misc.hh revision 7332
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 977306Sgblack@eecs.umich.educlass ImmOp : public PredOp 987306Sgblack@eecs.umich.edu{ 997306Sgblack@eecs.umich.edu protected: 1007330Sgblack@eecs.umich.edu uint64_t imm; 1017306Sgblack@eecs.umich.edu 1027306Sgblack@eecs.umich.edu ImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1037330Sgblack@eecs.umich.edu uint64_t _imm) : 1047306Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), imm(_imm) 1057306Sgblack@eecs.umich.edu {} 1067306Sgblack@eecs.umich.edu 1077306Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 1087306Sgblack@eecs.umich.edu}; 1097306Sgblack@eecs.umich.edu 1107332Sgblack@eecs.umich.educlass RegImmOp : public PredOp 1117332Sgblack@eecs.umich.edu{ 1127332Sgblack@eecs.umich.edu protected: 1137332Sgblack@eecs.umich.edu IntRegIndex dest; 1147332Sgblack@eecs.umich.edu uint64_t imm; 1157332Sgblack@eecs.umich.edu 1167332Sgblack@eecs.umich.edu RegImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1177332Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm) : 1187332Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), dest(_dest), imm(_imm) 1197332Sgblack@eecs.umich.edu {} 1207332Sgblack@eecs.umich.edu 1217332Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 1227332Sgblack@eecs.umich.edu}; 1237332Sgblack@eecs.umich.edu 1247261Sgblack@eecs.umich.educlass RegRegOp : public PredOp 1257208Sgblack@eecs.umich.edu{ 1267208Sgblack@eecs.umich.edu protected: 1277208Sgblack@eecs.umich.edu IntRegIndex dest; 1287208Sgblack@eecs.umich.edu IntRegIndex op1; 1297208Sgblack@eecs.umich.edu 1307261Sgblack@eecs.umich.edu RegRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1317261Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1) : 1327208Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), dest(_dest), op1(_op1) 1337208Sgblack@eecs.umich.edu {} 1347208Sgblack@eecs.umich.edu 1357208Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 1367208Sgblack@eecs.umich.edu}; 1377208Sgblack@eecs.umich.edu 1387232Sgblack@eecs.umich.educlass RegImmRegOp : public PredOp 1397225Sgblack@eecs.umich.edu{ 1407225Sgblack@eecs.umich.edu protected: 1417225Sgblack@eecs.umich.edu IntRegIndex dest; 1427330Sgblack@eecs.umich.edu uint64_t imm; 1437225Sgblack@eecs.umich.edu IntRegIndex op1; 1447225Sgblack@eecs.umich.edu 1457232Sgblack@eecs.umich.edu RegImmRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1467330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1) : 1477225Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 1487232Sgblack@eecs.umich.edu dest(_dest), imm(_imm), op1(_op1) 1497225Sgblack@eecs.umich.edu {} 1507225Sgblack@eecs.umich.edu 1517225Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 1527225Sgblack@eecs.umich.edu}; 1537225Sgblack@eecs.umich.edu 1547233Sgblack@eecs.umich.educlass RegRegRegImmOp : public PredOp 1557233Sgblack@eecs.umich.edu{ 1567233Sgblack@eecs.umich.edu protected: 1577233Sgblack@eecs.umich.edu IntRegIndex dest; 1587233Sgblack@eecs.umich.edu IntRegIndex op1; 1597233Sgblack@eecs.umich.edu IntRegIndex op2; 1607330Sgblack@eecs.umich.edu uint64_t imm; 1617233Sgblack@eecs.umich.edu 1627233Sgblack@eecs.umich.edu RegRegRegImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1637233Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 1647330Sgblack@eecs.umich.edu uint64_t _imm) : 1657233Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 1667233Sgblack@eecs.umich.edu dest(_dest), op1(_op1), op2(_op2), imm(_imm) 1677233Sgblack@eecs.umich.edu {} 1687233Sgblack@eecs.umich.edu 1697233Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 1707233Sgblack@eecs.umich.edu}; 1717233Sgblack@eecs.umich.edu 1727241Sgblack@eecs.umich.educlass RegRegRegRegOp : public PredOp 1737241Sgblack@eecs.umich.edu{ 1747241Sgblack@eecs.umich.edu protected: 1757241Sgblack@eecs.umich.edu IntRegIndex dest; 1767241Sgblack@eecs.umich.edu IntRegIndex op1; 1777241Sgblack@eecs.umich.edu IntRegIndex op2; 1787241Sgblack@eecs.umich.edu IntRegIndex op3; 1797241Sgblack@eecs.umich.edu 1807241Sgblack@eecs.umich.edu RegRegRegRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1817241Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 1827241Sgblack@eecs.umich.edu IntRegIndex _op2, IntRegIndex _op3) : 1837241Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 1847241Sgblack@eecs.umich.edu dest(_dest), op1(_op1), op2(_op2), op3(_op3) 1857241Sgblack@eecs.umich.edu {} 1867241Sgblack@eecs.umich.edu 1877241Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 1887241Sgblack@eecs.umich.edu}; 1897241Sgblack@eecs.umich.edu 1907238Sgblack@eecs.umich.educlass RegRegRegOp : public PredOp 1917238Sgblack@eecs.umich.edu{ 1927238Sgblack@eecs.umich.edu protected: 1937238Sgblack@eecs.umich.edu IntRegIndex dest; 1947238Sgblack@eecs.umich.edu IntRegIndex op1; 1957238Sgblack@eecs.umich.edu IntRegIndex op2; 1967238Sgblack@eecs.umich.edu 1977238Sgblack@eecs.umich.edu RegRegRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1987238Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2) : 1997238Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 2007238Sgblack@eecs.umich.edu dest(_dest), op1(_op1), op2(_op2) 2017238Sgblack@eecs.umich.edu {} 2027238Sgblack@eecs.umich.edu 2037238Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 2047238Sgblack@eecs.umich.edu}; 2057238Sgblack@eecs.umich.edu 2067331Sgblack@eecs.umich.educlass RegRegImmOp : public PredOp 2077331Sgblack@eecs.umich.edu{ 2087331Sgblack@eecs.umich.edu protected: 2097331Sgblack@eecs.umich.edu IntRegIndex dest; 2107331Sgblack@eecs.umich.edu IntRegIndex op1; 2117331Sgblack@eecs.umich.edu uint64_t imm; 2127331Sgblack@eecs.umich.edu 2137331Sgblack@eecs.umich.edu RegRegImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 2147331Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 2157331Sgblack@eecs.umich.edu uint64_t _imm) : 2167331Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 2177331Sgblack@eecs.umich.edu dest(_dest), op1(_op1), imm(_imm) 2187331Sgblack@eecs.umich.edu {} 2197331Sgblack@eecs.umich.edu 2207331Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 2217331Sgblack@eecs.umich.edu}; 2227331Sgblack@eecs.umich.edu 2237253Sgblack@eecs.umich.educlass RegRegImmImmOp : public PredOp 2247253Sgblack@eecs.umich.edu{ 2257253Sgblack@eecs.umich.edu protected: 2267253Sgblack@eecs.umich.edu IntRegIndex dest; 2277253Sgblack@eecs.umich.edu IntRegIndex op1; 2287330Sgblack@eecs.umich.edu uint64_t imm1; 2297330Sgblack@eecs.umich.edu uint64_t imm2; 2307253Sgblack@eecs.umich.edu 2317253Sgblack@eecs.umich.edu RegRegImmImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 2327253Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 2337330Sgblack@eecs.umich.edu uint64_t _imm1, uint64_t _imm2) : 2347253Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 2357253Sgblack@eecs.umich.edu dest(_dest), op1(_op1), imm1(_imm1), imm2(_imm2) 2367253Sgblack@eecs.umich.edu {} 2377253Sgblack@eecs.umich.edu 2387253Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 2397253Sgblack@eecs.umich.edu}; 2407253Sgblack@eecs.umich.edu 2417232Sgblack@eecs.umich.educlass RegImmRegShiftOp : public PredOp 2427225Sgblack@eecs.umich.edu{ 2437225Sgblack@eecs.umich.edu protected: 2447225Sgblack@eecs.umich.edu IntRegIndex dest; 2457330Sgblack@eecs.umich.edu uint64_t imm; 2467225Sgblack@eecs.umich.edu IntRegIndex op1; 2477225Sgblack@eecs.umich.edu int32_t shiftAmt; 2487225Sgblack@eecs.umich.edu ArmShiftType shiftType; 2497225Sgblack@eecs.umich.edu 2507232Sgblack@eecs.umich.edu RegImmRegShiftOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 2517330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1, 2527232Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType) : 2537225Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 2547232Sgblack@eecs.umich.edu dest(_dest), imm(_imm), op1(_op1), 2557225Sgblack@eecs.umich.edu shiftAmt(_shiftAmt), shiftType(_shiftType) 2567225Sgblack@eecs.umich.edu {} 2577225Sgblack@eecs.umich.edu 2587225Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 2597225Sgblack@eecs.umich.edu}; 2607225Sgblack@eecs.umich.edu 2617202Sgblack@eecs.umich.edu#endif 262