base.isa revision 2089
12SN/A// -*- mode:c++ -*-
29448SAndreas.Sandberg@ARM.com
37338SAli.Saidi@ARM.com////////////////////////////////////////////////////////////////////
47338SAli.Saidi@ARM.com//
57338SAli.Saidi@ARM.com// Base class for MIPS instructions, and some support functions
67338SAli.Saidi@ARM.com//
77338SAli.Saidi@ARM.com
87338SAli.Saidi@ARM.com//Outputs to decoder.hh
97338SAli.Saidi@ARM.comoutput header {{
107338SAli.Saidi@ARM.com        /**
117338SAli.Saidi@ARM.com         * Base class for all SPARC static instructions.
127338SAli.Saidi@ARM.com         */
137338SAli.Saidi@ARM.com        class MipsStaticInst : public StaticInst<MIPSISA>
141762SN/A        {
152SN/A        protected:
162SN/A
172SN/A                // Constructor.
182SN/A                MipsStaticInst(const char *mnem, MachInst _machInst, OpClass __opClass)
192SN/A                    : StaticInst<SPARCISA>(mnem, _machInst, __opClass)
202SN/A                {
212SN/A                }
222SN/A
232SN/A                std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
242SN/A        };
252SN/A
262SN/A}};
272SN/A
282SN/A//Ouputs to decoder.cc
292SN/Aoutput decoder {{
302SN/A
312SN/A        std::string MipsStaticInst::generateDisassembly(Addr pc, const SymbolTable *symtab) const
322SN/A        {
332SN/A                std::stringstream ss;
342SN/A
352SN/A                ccprintf(ss, "%-10s ", mnemonic);
362SN/A
372SN/A                // just print the first two source regs... if there's
382SN/A                // a third one, it's a read-modify-write dest (Rc),
392665Ssaidi@eecs.umich.edu                // e.g. for CMOVxx
402665Ssaidi@eecs.umich.edu                if(_numSrcRegs > 0)
412SN/A                {
422SN/A                        printReg(ss, _srcRegIdx[0]);
438779Sgblack@eecs.umich.edu                }
448779Sgblack@eecs.umich.edu                if(_numSrcRegs > 1)
458779Sgblack@eecs.umich.edu                {
462439SN/A                        ss << ",";
478779Sgblack@eecs.umich.edu                        printReg(ss, _srcRegIdx[1]);
488229Snate@binkert.org                }
496216Snate@binkert.org
50146SN/A                // just print the first dest... if there's a second one,
51146SN/A                // it's generally implicit
52146SN/A                if(_numDestRegs > 0)
53146SN/A                {
54146SN/A                        if(_numSrcRegs > 0)
556216Snate@binkert.org                                ss << ",";
566658Snate@binkert.org                        printReg(ss, _destRegIdx[0]);
578229Snate@binkert.org                }
581717SN/A
598887Sgeoffrey.blake@arm.com                return ss.str();
608887Sgeoffrey.blake@arm.com        }
61146SN/A
621977SN/A}};
632683Sktlim@umich.edu
641717SN/A