unimp.isa

来自「M5,一个功能强大的多处理器系统模拟器.很多针对处理器架构,性能的研究都使用它作」· ISA 代码 · 共 147 行

ISA
147
字号
// -*- mode:c++ -*-//Copyright (c) 2003, 2004, 2005//The Regents of The University of Michigan//All Rights Reserved//This code is part of the M5 simulator.//Permission is granted to use, copy, create derivative works and//redistribute this software and such derivative works for any purpose,//so long as the copyright notice above, this grant of permission, and//the disclaimer below appear in all copies made; and so long as the//name of The University of Michigan is not used in any advertising or//publicity pertaining to the use or distribution of this software//without specific, written prior authorization.//THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE//UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND WITHOUT//WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER EXPRESS OR//IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF//MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE REGENTS OF//THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE FOR ANY DAMAGES,//INCLUDING DIRECT, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL//DAMAGES, WITH RESPECT TO ANY CLAIM ARISING OUT OF OR IN CONNECTION//WITH THE USE OF THE SOFTWARE, EVEN IF IT HAS BEEN OR IS HEREAFTER//ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.//Authors: Steven K. Reinhardt//////////////////////////////////////////////////////////////////////// Unimplemented instructions//output header {{    /**     * Static instruction class for unimplemented instructions that     * cause simulator termination.  Note that these are recognized     * (legal) instructions that the simulator does not support; the     * 'Unknown' class is used for unrecognized/illegal instructions.     * This is a leaf class.     */    class FailUnimplemented : public SparcStaticInst    {      public:        /// Constructor        FailUnimplemented(const char *_mnemonic, ExtMachInst _machInst)            : SparcStaticInst(_mnemonic, _machInst, No_OpClass)        {            // don't call execute() (which panics) if we're on a            // speculative path            flags[IsNonSpeculative] = true;        }        %(BasicExecDeclare)s        std::string        generateDisassembly(Addr pc, const SymbolTable *symtab) const;    };    /**     * Base class for unimplemented instructions that cause a warning     * to be printed (but do not terminate simulation).  This     * implementation is a little screwy in that it will print a     * warning for each instance of a particular unimplemented machine     * instruction, not just for each unimplemented opcode.  Should     * probably make the 'warned' flag a static member of the derived     * class.     */    class WarnUnimplemented : public SparcStaticInst    {      private:        /// Have we warned on this instruction yet?        mutable bool warned;      public:        /// Constructor        WarnUnimplemented(const char *_mnemonic, ExtMachInst _machInst)            : SparcStaticInst(_mnemonic, _machInst, No_OpClass), warned(false)        {            // don't call execute() (which panics) if we're on a            // speculative path            flags[IsNonSpeculative] = true;        }        %(BasicExecDeclare)s        std::string        generateDisassembly(Addr pc, const SymbolTable *symtab) const;    };}};output decoder {{    std::string    FailUnimplemented::generateDisassembly(Addr pc,                                           const SymbolTable *symtab) const    {        return csprintf("%-10s (unimplemented)", mnemonic);    }    std::string    WarnUnimplemented::generateDisassembly(Addr pc,                                           const SymbolTable *symtab) const    {#ifdef SS_COMPATIBLE_DISASSEMBLY        return csprintf("%-10s", mnemonic);#else        return csprintf("%-10s (unimplemented)", mnemonic);#endif    }}};output exec {{    Fault    FailUnimplemented::execute(%(CPU_exec_context)s *xc,                               Trace::InstRecord *traceData) const    {        panic("attempt to execute unimplemented instruction '%s' "              "(inst 0x%08x)", mnemonic, machInst);        return NoFault;    }    Fault    WarnUnimplemented::execute(%(CPU_exec_context)s *xc,                               Trace::InstRecord *traceData) const    {        if (!warned) {            warn("instruction '%s' unimplemented\n", mnemonic);            warned = true;        }        return NoFault;    }}};def format FailUnimpl() {{    iop = InstObjParams(name, 'FailUnimplemented')    decode_block = BasicDecodeWithMnemonic.subst(iop)}};def format WarnUnimpl() {{    iop = InstObjParams(name, 'WarnUnimplemented')    decode_block = BasicDecodeWithMnemonic.subst(iop)}};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?