misc.hh revision 7253
17202Sgblack@eecs.umich.edu/*
27202Sgblack@eecs.umich.edu * Copyright (c) 2010 ARM Limited
37202Sgblack@eecs.umich.edu * All rights reserved
47202Sgblack@eecs.umich.edu *
57202Sgblack@eecs.umich.edu * The license below extends only to copyright in the software and shall
67202Sgblack@eecs.umich.edu * not be construed as granting a license to any other intellectual
77202Sgblack@eecs.umich.edu * property including but not limited to intellectual property relating
87202Sgblack@eecs.umich.edu * to a hardware implementation of the functionality of the software
97202Sgblack@eecs.umich.edu * licensed hereunder.  You may use the software subject to the license
107202Sgblack@eecs.umich.edu * terms below provided that you ensure that this notice is replicated
117202Sgblack@eecs.umich.edu * unmodified and in its entirety in all distributions of the software,
127202Sgblack@eecs.umich.edu * modified or unmodified, in source code or in binary form.
137202Sgblack@eecs.umich.edu *
147202Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
157202Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
167202Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
177202Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
187202Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
197202Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
207202Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
217202Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
227202Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
237202Sgblack@eecs.umich.edu * this software without specific prior written permission.
247202Sgblack@eecs.umich.edu *
257202Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
267202Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
277202Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
287202Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
297202Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
307202Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
317202Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
327202Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
337202Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
347202Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
357202Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
367202Sgblack@eecs.umich.edu *
377202Sgblack@eecs.umich.edu * Authors: Gabe Black
387202Sgblack@eecs.umich.edu */
397202Sgblack@eecs.umich.edu
407202Sgblack@eecs.umich.edu#ifndef __ARCH_ARM_INSTS_MISC_HH__
417202Sgblack@eecs.umich.edu#define __ARCH_ARM_INSTS_MISC_HH__
427202Sgblack@eecs.umich.edu
437202Sgblack@eecs.umich.edu#include "arch/arm/insts/pred_inst.hh"
447202Sgblack@eecs.umich.edu
457202Sgblack@eecs.umich.educlass MrsOp : public PredOp
467202Sgblack@eecs.umich.edu{
477202Sgblack@eecs.umich.edu  protected:
487202Sgblack@eecs.umich.edu    IntRegIndex dest;
497202Sgblack@eecs.umich.edu
507202Sgblack@eecs.umich.edu    MrsOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
517202Sgblack@eecs.umich.edu            IntRegIndex _dest) :
527202Sgblack@eecs.umich.edu        PredOp(mnem, _machInst, __opClass), dest(_dest)
537202Sgblack@eecs.umich.edu    {}
547202Sgblack@eecs.umich.edu
557202Sgblack@eecs.umich.edu    std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
567202Sgblack@eecs.umich.edu};
577202Sgblack@eecs.umich.edu
587202Sgblack@eecs.umich.educlass MsrBase : public PredOp
597202Sgblack@eecs.umich.edu{
607202Sgblack@eecs.umich.edu  protected:
617202Sgblack@eecs.umich.edu    uint8_t byteMask;
627202Sgblack@eecs.umich.edu
637202Sgblack@eecs.umich.edu    MsrBase(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
647202Sgblack@eecs.umich.edu            uint8_t _byteMask) :
657202Sgblack@eecs.umich.edu        PredOp(mnem, _machInst, __opClass), byteMask(_byteMask)
667202Sgblack@eecs.umich.edu    {}
677202Sgblack@eecs.umich.edu
687202Sgblack@eecs.umich.edu    void printMsrBase(std::ostream &os) const;
697202Sgblack@eecs.umich.edu};
707202Sgblack@eecs.umich.edu
717202Sgblack@eecs.umich.educlass MsrImmOp : public MsrBase
727202Sgblack@eecs.umich.edu{
737202Sgblack@eecs.umich.edu  protected:
747202Sgblack@eecs.umich.edu    uint32_t imm;
757202Sgblack@eecs.umich.edu
767202Sgblack@eecs.umich.edu    MsrImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
777202Sgblack@eecs.umich.edu             uint32_t _imm, uint8_t _byteMask) :
787202Sgblack@eecs.umich.edu        MsrBase(mnem, _machInst, __opClass, _byteMask), imm(_imm)
797202Sgblack@eecs.umich.edu    {}
807202Sgblack@eecs.umich.edu
817202Sgblack@eecs.umich.edu    std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
827202Sgblack@eecs.umich.edu};
837202Sgblack@eecs.umich.edu
847202Sgblack@eecs.umich.educlass MsrRegOp : public MsrBase
857202Sgblack@eecs.umich.edu{
867202Sgblack@eecs.umich.edu  protected:
877202Sgblack@eecs.umich.edu    IntRegIndex op1;
887202Sgblack@eecs.umich.edu
897202Sgblack@eecs.umich.edu    MsrRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
907202Sgblack@eecs.umich.edu             IntRegIndex _op1, uint8_t _byteMask) :
917202Sgblack@eecs.umich.edu        MsrBase(mnem, _machInst, __opClass, _byteMask), op1(_op1)
927202Sgblack@eecs.umich.edu    {}
937202Sgblack@eecs.umich.edu
947202Sgblack@eecs.umich.edu    std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
957202Sgblack@eecs.umich.edu};
967202Sgblack@eecs.umich.edu
977208Sgblack@eecs.umich.educlass RevOp : public PredOp
987208Sgblack@eecs.umich.edu{
997208Sgblack@eecs.umich.edu  protected:
1007208Sgblack@eecs.umich.edu    IntRegIndex dest;
1017208Sgblack@eecs.umich.edu    IntRegIndex op1;
1027208Sgblack@eecs.umich.edu
1037208Sgblack@eecs.umich.edu    RevOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
1047208Sgblack@eecs.umich.edu          IntRegIndex _dest, IntRegIndex _op1) :
1057208Sgblack@eecs.umich.edu        PredOp(mnem, _machInst, __opClass), dest(_dest), op1(_op1)
1067208Sgblack@eecs.umich.edu    {}
1077208Sgblack@eecs.umich.edu
1087208Sgblack@eecs.umich.edu    std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
1097208Sgblack@eecs.umich.edu};
1107208Sgblack@eecs.umich.edu
1117232Sgblack@eecs.umich.educlass RegImmRegOp : public PredOp
1127225Sgblack@eecs.umich.edu{
1137225Sgblack@eecs.umich.edu  protected:
1147225Sgblack@eecs.umich.edu    IntRegIndex dest;
1157232Sgblack@eecs.umich.edu    uint32_t imm;
1167225Sgblack@eecs.umich.edu    IntRegIndex op1;
1177225Sgblack@eecs.umich.edu
1187232Sgblack@eecs.umich.edu    RegImmRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
1197232Sgblack@eecs.umich.edu                IntRegIndex _dest, uint32_t _imm, IntRegIndex _op1) :
1207225Sgblack@eecs.umich.edu        PredOp(mnem, _machInst, __opClass),
1217232Sgblack@eecs.umich.edu        dest(_dest), imm(_imm), op1(_op1)
1227225Sgblack@eecs.umich.edu    {}
1237225Sgblack@eecs.umich.edu
1247225Sgblack@eecs.umich.edu    std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
1257225Sgblack@eecs.umich.edu};
1267225Sgblack@eecs.umich.edu
1277233Sgblack@eecs.umich.educlass RegRegRegImmOp : public PredOp
1287233Sgblack@eecs.umich.edu{
1297233Sgblack@eecs.umich.edu  protected:
1307233Sgblack@eecs.umich.edu    IntRegIndex dest;
1317233Sgblack@eecs.umich.edu    IntRegIndex op1;
1327233Sgblack@eecs.umich.edu    IntRegIndex op2;
1337233Sgblack@eecs.umich.edu    uint32_t imm;
1347233Sgblack@eecs.umich.edu
1357233Sgblack@eecs.umich.edu    RegRegRegImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
1367233Sgblack@eecs.umich.edu                   IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2,
1377233Sgblack@eecs.umich.edu                   uint32_t _imm) :
1387233Sgblack@eecs.umich.edu        PredOp(mnem, _machInst, __opClass),
1397233Sgblack@eecs.umich.edu        dest(_dest), op1(_op1), op2(_op2), imm(_imm)
1407233Sgblack@eecs.umich.edu    {}
1417233Sgblack@eecs.umich.edu
1427233Sgblack@eecs.umich.edu    std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
1437233Sgblack@eecs.umich.edu};
1447233Sgblack@eecs.umich.edu
1457241Sgblack@eecs.umich.educlass RegRegRegRegOp : public PredOp
1467241Sgblack@eecs.umich.edu{
1477241Sgblack@eecs.umich.edu  protected:
1487241Sgblack@eecs.umich.edu    IntRegIndex dest;
1497241Sgblack@eecs.umich.edu    IntRegIndex op1;
1507241Sgblack@eecs.umich.edu    IntRegIndex op2;
1517241Sgblack@eecs.umich.edu    IntRegIndex op3;
1527241Sgblack@eecs.umich.edu
1537241Sgblack@eecs.umich.edu    RegRegRegRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
1547241Sgblack@eecs.umich.edu                   IntRegIndex _dest, IntRegIndex _op1,
1557241Sgblack@eecs.umich.edu                   IntRegIndex _op2, IntRegIndex _op3) :
1567241Sgblack@eecs.umich.edu        PredOp(mnem, _machInst, __opClass),
1577241Sgblack@eecs.umich.edu        dest(_dest), op1(_op1), op2(_op2), op3(_op3)
1587241Sgblack@eecs.umich.edu    {}
1597241Sgblack@eecs.umich.edu
1607241Sgblack@eecs.umich.edu    std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
1617241Sgblack@eecs.umich.edu};
1627241Sgblack@eecs.umich.edu
1637238Sgblack@eecs.umich.educlass RegRegRegOp : public PredOp
1647238Sgblack@eecs.umich.edu{
1657238Sgblack@eecs.umich.edu  protected:
1667238Sgblack@eecs.umich.edu    IntRegIndex dest;
1677238Sgblack@eecs.umich.edu    IntRegIndex op1;
1687238Sgblack@eecs.umich.edu    IntRegIndex op2;
1697238Sgblack@eecs.umich.edu
1707238Sgblack@eecs.umich.edu    RegRegRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
1717238Sgblack@eecs.umich.edu                IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2) :
1727238Sgblack@eecs.umich.edu        PredOp(mnem, _machInst, __opClass),
1737238Sgblack@eecs.umich.edu        dest(_dest), op1(_op1), op2(_op2)
1747238Sgblack@eecs.umich.edu    {}
1757238Sgblack@eecs.umich.edu
1767238Sgblack@eecs.umich.edu    std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
1777238Sgblack@eecs.umich.edu};
1787238Sgblack@eecs.umich.edu
1797253Sgblack@eecs.umich.educlass RegRegImmImmOp : public PredOp
1807253Sgblack@eecs.umich.edu{
1817253Sgblack@eecs.umich.edu  protected:
1827253Sgblack@eecs.umich.edu    IntRegIndex dest;
1837253Sgblack@eecs.umich.edu    IntRegIndex op1;
1847253Sgblack@eecs.umich.edu    uint32_t imm1;
1857253Sgblack@eecs.umich.edu    uint32_t imm2;
1867253Sgblack@eecs.umich.edu
1877253Sgblack@eecs.umich.edu    RegRegImmImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
1887253Sgblack@eecs.umich.edu                   IntRegIndex _dest, IntRegIndex _op1,
1897253Sgblack@eecs.umich.edu                   uint32_t _imm1, uint32_t _imm2) :
1907253Sgblack@eecs.umich.edu        PredOp(mnem, _machInst, __opClass),
1917253Sgblack@eecs.umich.edu        dest(_dest), op1(_op1), imm1(_imm1), imm2(_imm2)
1927253Sgblack@eecs.umich.edu    {}
1937253Sgblack@eecs.umich.edu
1947253Sgblack@eecs.umich.edu    std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
1957253Sgblack@eecs.umich.edu};
1967253Sgblack@eecs.umich.edu
1977232Sgblack@eecs.umich.educlass RegImmRegShiftOp : public PredOp
1987225Sgblack@eecs.umich.edu{
1997225Sgblack@eecs.umich.edu  protected:
2007225Sgblack@eecs.umich.edu    IntRegIndex dest;
2017232Sgblack@eecs.umich.edu    uint32_t imm;
2027225Sgblack@eecs.umich.edu    IntRegIndex op1;
2037225Sgblack@eecs.umich.edu    int32_t shiftAmt;
2047225Sgblack@eecs.umich.edu    ArmShiftType shiftType;
2057225Sgblack@eecs.umich.edu
2067232Sgblack@eecs.umich.edu    RegImmRegShiftOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
2077232Sgblack@eecs.umich.edu                     IntRegIndex _dest, uint32_t _imm, IntRegIndex _op1,
2087232Sgblack@eecs.umich.edu                     int32_t _shiftAmt, ArmShiftType _shiftType) :
2097225Sgblack@eecs.umich.edu        PredOp(mnem, _machInst, __opClass),
2107232Sgblack@eecs.umich.edu        dest(_dest), imm(_imm), op1(_op1),
2117225Sgblack@eecs.umich.edu        shiftAmt(_shiftAmt), shiftType(_shiftType)
2127225Sgblack@eecs.umich.edu    {}
2137225Sgblack@eecs.umich.edu
2147225Sgblack@eecs.umich.edu    std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
2157225Sgblack@eecs.umich.edu};
2167225Sgblack@eecs.umich.edu
2177202Sgblack@eecs.umich.edu#endif
218