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