base.isa revision 2754:e3d023bc752c
14484Sbinkertn@umich.edu// -*- mode:c++ -*- 24484Sbinkertn@umich.edu 34484Sbinkertn@umich.edu// Copyright (c) 2006 The Regents of The University of Michigan 44484Sbinkertn@umich.edu// All rights reserved. 54484Sbinkertn@umich.edu// 64484Sbinkertn@umich.edu// Redistribution and use in source and binary forms, with or without 74484Sbinkertn@umich.edu// modification, are permitted provided that the following conditions are 84484Sbinkertn@umich.edu// met: redistributions of source code must retain the above copyright 94484Sbinkertn@umich.edu// notice, this list of conditions and the following disclaimer; 104484Sbinkertn@umich.edu// redistributions in binary form must reproduce the above copyright 114484Sbinkertn@umich.edu// notice, this list of conditions and the following disclaimer in the 124484Sbinkertn@umich.edu// documentation and/or other materials provided with the distribution; 134484Sbinkertn@umich.edu// neither the name of the copyright holders nor the names of its 144484Sbinkertn@umich.edu// contributors may be used to endorse or promote products derived from 154484Sbinkertn@umich.edu// this software without specific prior written permission. 164484Sbinkertn@umich.edu// 174484Sbinkertn@umich.edu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 184484Sbinkertn@umich.edu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 194484Sbinkertn@umich.edu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 204484Sbinkertn@umich.edu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 214484Sbinkertn@umich.edu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 224484Sbinkertn@umich.edu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 234484Sbinkertn@umich.edu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 244484Sbinkertn@umich.edu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 254484Sbinkertn@umich.edu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 264484Sbinkertn@umich.edu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 274484Sbinkertn@umich.edu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 284484Sbinkertn@umich.edu// 294484Sbinkertn@umich.edu// Authors: Korey Sewell 304484Sbinkertn@umich.edu 314484Sbinkertn@umich.edu//////////////////////////////////////////////////////////////////// 324484Sbinkertn@umich.edu// 334484Sbinkertn@umich.edu// Base class for MIPS instructions, and some support functions 344484Sbinkertn@umich.edu// 354484Sbinkertn@umich.edu 364484Sbinkertn@umich.edu//Outputs to decoder.hh 374484Sbinkertn@umich.eduoutput header {{ 384484Sbinkertn@umich.edu 394484Sbinkertn@umich.edu using namespace MipsISA; 404484Sbinkertn@umich.edu 414484Sbinkertn@umich.edu /** 424484Sbinkertn@umich.edu * Base class for all MIPS static instructions. 434484Sbinkertn@umich.edu */ 444484Sbinkertn@umich.edu class MipsStaticInst : public StaticInst 454484Sbinkertn@umich.edu { 464484Sbinkertn@umich.edu protected: 474484Sbinkertn@umich.edu 484484Sbinkertn@umich.edu // Constructor 494484Sbinkertn@umich.edu MipsStaticInst(const char *mnem, MachInst _machInst, OpClass __opClass) 504484Sbinkertn@umich.edu : StaticInst(mnem, _machInst, __opClass) 514484Sbinkertn@umich.edu { 524484Sbinkertn@umich.edu } 534484Sbinkertn@umich.edu 544484Sbinkertn@umich.edu /// Print a register name for disassembly given the unique 554484Sbinkertn@umich.edu /// dependence tag number (FP or int). 564484Sbinkertn@umich.edu void printReg(std::ostream &os, int reg) const; 574484Sbinkertn@umich.edu 584484Sbinkertn@umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 594484Sbinkertn@umich.edu }; 604484Sbinkertn@umich.edu 614484Sbinkertn@umich.edu}}; 624484Sbinkertn@umich.edu 634484Sbinkertn@umich.edu//Ouputs to decoder.cc 644484Sbinkertn@umich.eduoutput decoder {{ 654484Sbinkertn@umich.edu 664484Sbinkertn@umich.edu void MipsStaticInst::printReg(std::ostream &os, int reg) const 674484Sbinkertn@umich.edu { 684484Sbinkertn@umich.edu if (reg < FP_Base_DepTag) { 694484Sbinkertn@umich.edu ccprintf(os, "r%d", reg); 704484Sbinkertn@umich.edu } 714484Sbinkertn@umich.edu else { 724484Sbinkertn@umich.edu ccprintf(os, "f%d", reg - FP_Base_DepTag); 734484Sbinkertn@umich.edu } 744484Sbinkertn@umich.edu } 754484Sbinkertn@umich.edu 764484Sbinkertn@umich.edu std::string MipsStaticInst::generateDisassembly(Addr pc, const SymbolTable *symtab) const 774484Sbinkertn@umich.edu { 784484Sbinkertn@umich.edu std::stringstream ss; 794484Sbinkertn@umich.edu 804484Sbinkertn@umich.edu ccprintf(ss, "%-10s ", mnemonic); 814484Sbinkertn@umich.edu 824484Sbinkertn@umich.edu if(_numDestRegs > 0){ 834484Sbinkertn@umich.edu printReg(ss, _destRegIdx[0]); 844484Sbinkertn@umich.edu } 854484Sbinkertn@umich.edu 864484Sbinkertn@umich.edu if(_numSrcRegs > 0) { 874484Sbinkertn@umich.edu ss << ", "; 884484Sbinkertn@umich.edu printReg(ss, _srcRegIdx[0]); 894484Sbinkertn@umich.edu } 904484Sbinkertn@umich.edu 914484Sbinkertn@umich.edu if(_numSrcRegs > 1) { 924484Sbinkertn@umich.edu ss << ", "; 934484Sbinkertn@umich.edu printReg(ss, _srcRegIdx[1]); 944484Sbinkertn@umich.edu } 954484Sbinkertn@umich.edu 964484Sbinkertn@umich.edu 974484Sbinkertn@umich.edu if(mnemonic == "sll" || mnemonic == "sra"){ 984484Sbinkertn@umich.edu ccprintf(ss,", %d",SA); 994484Sbinkertn@umich.edu } 1004484Sbinkertn@umich.edu 1014484Sbinkertn@umich.edu return ss.str(); 1024484Sbinkertn@umich.edu } 1034484Sbinkertn@umich.edu 1044484Sbinkertn@umich.edu}}; 1054484Sbinkertn@umich.edu 1064484Sbinkertn@umich.edu