base.isa revision 2686
12089SN/A// -*- mode:c++ -*- 22089SN/A 32088SN/A//////////////////////////////////////////////////////////////////// 42088SN/A// 52089SN/A// Base class for MIPS instructions, and some support functions 62088SN/A// 72088SN/A 82089SN/A//Outputs to decoder.hh 92088SN/Aoutput header {{ 102239SN/A 112239SN/A using namespace MipsISA; 122239SN/A 132135SN/A 142131SN/A /** 152131SN/A * Base class for all MIPS static instructions. 162131SN/A */ 172131SN/A class MipsStaticInst : public StaticInst 182131SN/A { 192131SN/A protected: 202131SN/A 212131SN/A // Constructor 222131SN/A MipsStaticInst(const char *mnem, MachInst _machInst, OpClass __opClass) 232131SN/A : StaticInst(mnem, _machInst, __opClass) 242088SN/A { 252131SN/A } 262088SN/A 272131SN/A /// Print a register name for disassembly given the unique 282131SN/A /// dependence tag number (FP or int). 292131SN/A void printReg(std::ostream &os, int reg) const; 302088SN/A 312131SN/A std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 322131SN/A }; 332088SN/A 342088SN/A}}; 352088SN/A 362089SN/A//Ouputs to decoder.cc 372088SN/Aoutput decoder {{ 382088SN/A 392131SN/A void MipsStaticInst::printReg(std::ostream &os, int reg) const 402131SN/A { 412131SN/A if (reg < FP_Base_DepTag) { 422131SN/A ccprintf(os, "r%d", reg); 432131SN/A } 442131SN/A else { 452131SN/A ccprintf(os, "f%d", reg - FP_Base_DepTag); 462131SN/A } 472131SN/A } 482131SN/A 492131SN/A std::string MipsStaticInst::generateDisassembly(Addr pc, const SymbolTable *symtab) const 502131SN/A { 512131SN/A std::stringstream ss; 522131SN/A 532131SN/A ccprintf(ss, "%-10s ", mnemonic); 542131SN/A 552479SN/A if(_numDestRegs > 0){ 562479SN/A printReg(ss, _destRegIdx[0]); 572479SN/A } 582479SN/A 592479SN/A if(_numSrcRegs > 0) { 602686Sksewell@umich.edu ss << ", "; 612131SN/A printReg(ss, _srcRegIdx[0]); 622131SN/A } 632239SN/A 642479SN/A if(_numSrcRegs > 1) { 652686Sksewell@umich.edu ss << ", "; 662131SN/A printReg(ss, _srcRegIdx[1]); 672131SN/A } 682088SN/A 692479SN/A 702492SN/A if(mnemonic == "sll" || mnemonic == "sra"){ 712492SN/A ccprintf(ss,", %d",SA); 722131SN/A } 732088SN/A 742131SN/A return ss.str(); 752131SN/A } 762088SN/A 772088SN/A}}; 782088SN/A 79