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