misc.hh revision 10037
17202Sgblack@eecs.umich.edu/* 210037SARM gem5 Developers * Copyright (c) 2010, 2012-2013 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 9710037SARM gem5 Developersclass MrrcOp : public PredOp 9810037SARM gem5 Developers{ 9910037SARM gem5 Developers protected: 10010037SARM gem5 Developers IntRegIndex op1; 10110037SARM gem5 Developers IntRegIndex dest; 10210037SARM gem5 Developers IntRegIndex dest2; 10310037SARM gem5 Developers uint32_t imm; 10410037SARM gem5 Developers 10510037SARM gem5 Developers MrrcOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 10610037SARM gem5 Developers IntRegIndex _op1, IntRegIndex _dest, IntRegIndex _dest2, 10710037SARM gem5 Developers uint32_t _imm) : 10810037SARM gem5 Developers PredOp(mnem, _machInst, __opClass), op1(_op1), dest(_dest), 10910037SARM gem5 Developers dest2(_dest2), imm(_imm) 11010037SARM gem5 Developers {} 11110037SARM gem5 Developers 11210037SARM gem5 Developers std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 11310037SARM gem5 Developers}; 11410037SARM gem5 Developers 11510037SARM gem5 Developersclass McrrOp : public PredOp 11610037SARM gem5 Developers{ 11710037SARM gem5 Developers protected: 11810037SARM gem5 Developers IntRegIndex op1; 11910037SARM gem5 Developers IntRegIndex op2; 12010037SARM gem5 Developers IntRegIndex dest; 12110037SARM gem5 Developers uint32_t imm; 12210037SARM gem5 Developers 12310037SARM gem5 Developers McrrOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 12410037SARM gem5 Developers IntRegIndex _op1, IntRegIndex _op2, IntRegIndex _dest, 12510037SARM gem5 Developers uint32_t _imm) : 12610037SARM gem5 Developers PredOp(mnem, _machInst, __opClass), op1(_op1), op2(_op2), 12710037SARM gem5 Developers dest(_dest), imm(_imm) 12810037SARM gem5 Developers {} 12910037SARM gem5 Developers 13010037SARM gem5 Developers std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 13110037SARM gem5 Developers}; 13210037SARM gem5 Developers 1337306Sgblack@eecs.umich.educlass ImmOp : public PredOp 1347306Sgblack@eecs.umich.edu{ 1357306Sgblack@eecs.umich.edu protected: 1367330Sgblack@eecs.umich.edu uint64_t imm; 1377306Sgblack@eecs.umich.edu 1387306Sgblack@eecs.umich.edu ImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1397330Sgblack@eecs.umich.edu uint64_t _imm) : 1407306Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), imm(_imm) 1417306Sgblack@eecs.umich.edu {} 1427306Sgblack@eecs.umich.edu 1437306Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 1447306Sgblack@eecs.umich.edu}; 1457306Sgblack@eecs.umich.edu 1467332Sgblack@eecs.umich.educlass RegImmOp : public PredOp 1477332Sgblack@eecs.umich.edu{ 1487332Sgblack@eecs.umich.edu protected: 1497332Sgblack@eecs.umich.edu IntRegIndex dest; 1507332Sgblack@eecs.umich.edu uint64_t imm; 1517332Sgblack@eecs.umich.edu 1527332Sgblack@eecs.umich.edu RegImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1537332Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm) : 1547332Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), dest(_dest), imm(_imm) 1557332Sgblack@eecs.umich.edu {} 1567332Sgblack@eecs.umich.edu 1577332Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 1587332Sgblack@eecs.umich.edu}; 1597332Sgblack@eecs.umich.edu 1607261Sgblack@eecs.umich.educlass RegRegOp : public PredOp 1617208Sgblack@eecs.umich.edu{ 1627208Sgblack@eecs.umich.edu protected: 1637208Sgblack@eecs.umich.edu IntRegIndex dest; 1647208Sgblack@eecs.umich.edu IntRegIndex op1; 1657208Sgblack@eecs.umich.edu 1667261Sgblack@eecs.umich.edu RegRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1677261Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1) : 1687208Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), dest(_dest), op1(_op1) 1697208Sgblack@eecs.umich.edu {} 1707208Sgblack@eecs.umich.edu 1717208Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 1727208Sgblack@eecs.umich.edu}; 1737208Sgblack@eecs.umich.edu 1747232Sgblack@eecs.umich.educlass RegImmRegOp : public PredOp 1757225Sgblack@eecs.umich.edu{ 1767225Sgblack@eecs.umich.edu protected: 1777225Sgblack@eecs.umich.edu IntRegIndex dest; 1787330Sgblack@eecs.umich.edu uint64_t imm; 1797225Sgblack@eecs.umich.edu IntRegIndex op1; 1807225Sgblack@eecs.umich.edu 1817232Sgblack@eecs.umich.edu RegImmRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1827330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1) : 1837225Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 1847232Sgblack@eecs.umich.edu dest(_dest), imm(_imm), op1(_op1) 1857225Sgblack@eecs.umich.edu {} 1867225Sgblack@eecs.umich.edu 1877225Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 1887225Sgblack@eecs.umich.edu}; 1897225Sgblack@eecs.umich.edu 1907233Sgblack@eecs.umich.educlass RegRegRegImmOp : public PredOp 1917233Sgblack@eecs.umich.edu{ 1927233Sgblack@eecs.umich.edu protected: 1937233Sgblack@eecs.umich.edu IntRegIndex dest; 1947233Sgblack@eecs.umich.edu IntRegIndex op1; 1957233Sgblack@eecs.umich.edu IntRegIndex op2; 1967330Sgblack@eecs.umich.edu uint64_t imm; 1977233Sgblack@eecs.umich.edu 1987233Sgblack@eecs.umich.edu RegRegRegImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1997233Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2, 2007330Sgblack@eecs.umich.edu uint64_t _imm) : 2017233Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 2027233Sgblack@eecs.umich.edu dest(_dest), op1(_op1), op2(_op2), imm(_imm) 2037233Sgblack@eecs.umich.edu {} 2047233Sgblack@eecs.umich.edu 2057233Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 2067233Sgblack@eecs.umich.edu}; 2077233Sgblack@eecs.umich.edu 2087241Sgblack@eecs.umich.educlass RegRegRegRegOp : public PredOp 2097241Sgblack@eecs.umich.edu{ 2107241Sgblack@eecs.umich.edu protected: 2117241Sgblack@eecs.umich.edu IntRegIndex dest; 2127241Sgblack@eecs.umich.edu IntRegIndex op1; 2137241Sgblack@eecs.umich.edu IntRegIndex op2; 2147241Sgblack@eecs.umich.edu IntRegIndex op3; 2157241Sgblack@eecs.umich.edu 2167241Sgblack@eecs.umich.edu RegRegRegRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 2177241Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 2187241Sgblack@eecs.umich.edu IntRegIndex _op2, IntRegIndex _op3) : 2197241Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 2207241Sgblack@eecs.umich.edu dest(_dest), op1(_op1), op2(_op2), op3(_op3) 2217241Sgblack@eecs.umich.edu {} 2227241Sgblack@eecs.umich.edu 2237241Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 2247241Sgblack@eecs.umich.edu}; 2257241Sgblack@eecs.umich.edu 2267238Sgblack@eecs.umich.educlass RegRegRegOp : public PredOp 2277238Sgblack@eecs.umich.edu{ 2287238Sgblack@eecs.umich.edu protected: 2297238Sgblack@eecs.umich.edu IntRegIndex dest; 2307238Sgblack@eecs.umich.edu IntRegIndex op1; 2317238Sgblack@eecs.umich.edu IntRegIndex op2; 2327238Sgblack@eecs.umich.edu 2337238Sgblack@eecs.umich.edu RegRegRegOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 2347238Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _op2) : 2357238Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 2367238Sgblack@eecs.umich.edu dest(_dest), op1(_op1), op2(_op2) 2377238Sgblack@eecs.umich.edu {} 2387238Sgblack@eecs.umich.edu 2397238Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 2407238Sgblack@eecs.umich.edu}; 2417238Sgblack@eecs.umich.edu 2427331Sgblack@eecs.umich.educlass RegRegImmOp : public PredOp 2437331Sgblack@eecs.umich.edu{ 2447331Sgblack@eecs.umich.edu protected: 2457331Sgblack@eecs.umich.edu IntRegIndex dest; 2467331Sgblack@eecs.umich.edu IntRegIndex op1; 2477331Sgblack@eecs.umich.edu uint64_t imm; 2487331Sgblack@eecs.umich.edu 2497331Sgblack@eecs.umich.edu RegRegImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 2507331Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 2517331Sgblack@eecs.umich.edu uint64_t _imm) : 2527331Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 2537331Sgblack@eecs.umich.edu dest(_dest), op1(_op1), imm(_imm) 2547331Sgblack@eecs.umich.edu {} 2557331Sgblack@eecs.umich.edu 2567331Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 2577331Sgblack@eecs.umich.edu}; 2587331Sgblack@eecs.umich.edu 25910037SARM gem5 Developersclass RegImmImmOp : public PredOp 26010037SARM gem5 Developers{ 26110037SARM gem5 Developers protected: 26210037SARM gem5 Developers IntRegIndex dest; 26310037SARM gem5 Developers IntRegIndex op1; 26410037SARM gem5 Developers uint64_t imm1; 26510037SARM gem5 Developers uint64_t imm2; 26610037SARM gem5 Developers 26710037SARM gem5 Developers RegImmImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 26810037SARM gem5 Developers IntRegIndex _dest, uint64_t _imm1, uint64_t _imm2) : 26910037SARM gem5 Developers PredOp(mnem, _machInst, __opClass), 27010037SARM gem5 Developers dest(_dest), imm1(_imm1), imm2(_imm2) 27110037SARM gem5 Developers {} 27210037SARM gem5 Developers 27310037SARM gem5 Developers std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 27410037SARM gem5 Developers}; 27510037SARM gem5 Developers 2767253Sgblack@eecs.umich.educlass RegRegImmImmOp : public PredOp 2777253Sgblack@eecs.umich.edu{ 2787253Sgblack@eecs.umich.edu protected: 2797253Sgblack@eecs.umich.edu IntRegIndex dest; 2807253Sgblack@eecs.umich.edu IntRegIndex op1; 2817330Sgblack@eecs.umich.edu uint64_t imm1; 2827330Sgblack@eecs.umich.edu uint64_t imm2; 2837253Sgblack@eecs.umich.edu 2847253Sgblack@eecs.umich.edu RegRegImmImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 2857253Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, 2867330Sgblack@eecs.umich.edu uint64_t _imm1, uint64_t _imm2) : 2877253Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 2887253Sgblack@eecs.umich.edu dest(_dest), op1(_op1), imm1(_imm1), imm2(_imm2) 2897253Sgblack@eecs.umich.edu {} 2907253Sgblack@eecs.umich.edu 2917253Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 2927253Sgblack@eecs.umich.edu}; 2937253Sgblack@eecs.umich.edu 2947232Sgblack@eecs.umich.educlass RegImmRegShiftOp : public PredOp 2957225Sgblack@eecs.umich.edu{ 2967225Sgblack@eecs.umich.edu protected: 2977225Sgblack@eecs.umich.edu IntRegIndex dest; 2987330Sgblack@eecs.umich.edu uint64_t imm; 2997225Sgblack@eecs.umich.edu IntRegIndex op1; 3007225Sgblack@eecs.umich.edu int32_t shiftAmt; 3017225Sgblack@eecs.umich.edu ArmShiftType shiftType; 3027225Sgblack@eecs.umich.edu 3037232Sgblack@eecs.umich.edu RegImmRegShiftOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 3047330Sgblack@eecs.umich.edu IntRegIndex _dest, uint64_t _imm, IntRegIndex _op1, 3057232Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType) : 3067225Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass), 3077232Sgblack@eecs.umich.edu dest(_dest), imm(_imm), op1(_op1), 3087225Sgblack@eecs.umich.edu shiftAmt(_shiftAmt), shiftType(_shiftType) 3097225Sgblack@eecs.umich.edu {} 3107225Sgblack@eecs.umich.edu 3117225Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 3127225Sgblack@eecs.umich.edu}; 3137225Sgblack@eecs.umich.edu 3147409Sgblack@eecs.umich.educlass UnknownOp : public PredOp 3157409Sgblack@eecs.umich.edu{ 3167409Sgblack@eecs.umich.edu protected: 3177409Sgblack@eecs.umich.edu 3187409Sgblack@eecs.umich.edu UnknownOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass) : 3197409Sgblack@eecs.umich.edu PredOp(mnem, _machInst, __opClass) 3207409Sgblack@eecs.umich.edu {} 3217409Sgblack@eecs.umich.edu 3227409Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 3237409Sgblack@eecs.umich.edu}; 3247409Sgblack@eecs.umich.edu 3257202Sgblack@eecs.umich.edu#endif 326