diff options
Diffstat (limited to 'arch/mips/isa/formats/int.isa')
-rw-r--r-- | arch/mips/isa/formats/int.isa | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/arch/mips/isa/formats/int.isa b/arch/mips/isa/formats/int.isa deleted file mode 100644 index 7d38b9ff5..000000000 --- a/arch/mips/isa/formats/int.isa +++ /dev/null @@ -1,131 +0,0 @@ -// -*- mode:c++ -*- - -//////////////////////////////////////////////////////////////////// -// -// Integer operate instructions -// - -//Outputs to decoder.hh -output header {{ -#include <iostream> - using namespace std; - /** - * Base class for integer operations. - */ - class IntOp : public MipsStaticInst - { - protected: - - /// Constructor - IntOp(const char *mnem, MachInst _machInst, OpClass __opClass) : - MipsStaticInst(mnem, _machInst, __opClass) - { - } - - std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; - }; - - class IntImmOp : public MipsStaticInst - { - protected: - - int16_t imm; - int32_t sextImm; - uint32_t zextImm; - - /// Constructor - IntImmOp(const char *mnem, MachInst _machInst, OpClass __opClass) : - MipsStaticInst(mnem, _machInst, __opClass),imm(INTIMM), - sextImm(INTIMM),zextImm(0x0000FFFF & INTIMM) - { - //If Bit 15 is 1 then Sign Extend - int32_t temp = sextImm & 0x00008000; - if (temp > 0 && mnemonic != "lui") { - sextImm |= 0xFFFF0000; - } - } - - std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; - - - }; - -}}; - -//Outputs to decoder.cc -output decoder {{ - std::string IntOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const - { - std::stringstream ss; - - ccprintf(ss, "%-10s ", mnemonic); - - // just print the first dest... if there's a second one, - // it's generally implicit - if (_numDestRegs > 0) { - printReg(ss, _destRegIdx[0]); - ss << ","; - } - - // just print the first two source regs... if there's - // a third one, it's a read-modify-write dest (Rc), - // e.g. for CMOVxx - if (_numSrcRegs > 0) { - printReg(ss, _srcRegIdx[0]); - } - - if (_numSrcRegs > 1) { - ss << ","; - printReg(ss, _srcRegIdx[1]); - } - - return ss.str(); - } - - std::string IntImmOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const - { - std::stringstream ss; - - ccprintf(ss, "%-10s ", mnemonic); - - if (_numDestRegs > 0) { - printReg(ss, _destRegIdx[0]); - } - - ss << ","; - - if (_numSrcRegs > 0) { - printReg(ss, _srcRegIdx[0]); - ss << ","; - } - - if( mnemonic == "lui") - ccprintf(ss, "%08p ", sextImm); - else - ss << (int) sextImm; - - return ss.str(); - } - -}}; - -//Used by decoder.isa -def format IntOp(code, *opt_flags) {{ - orig_code = code - cblk = CodeBlock(code) - - # Figure out if we are creating a IntImmOp or a IntOp - # by looking at the instruction name - iop = InstObjParams(name, Name, 'IntOp', cblk, opt_flags) - strlen = len(name) - if name[strlen-1] == 'i' or name[strlen-2:] == 'iu': - iop = InstObjParams(name, Name, 'IntImmOp', cblk, opt_flags) - - header_output = BasicDeclare.subst(iop) - decoder_output = BasicConstructor.subst(iop) - decode_block = OperateNopCheckDecode.subst(iop) - exec_output = BasicExecute.subst(iop) -}}; - - - |