mem.hh revision 12616
12068SN/A/* 22068SN/A * Copyright (c) 2010 ARM Limited 32068SN/A * All rights reserved 42068SN/A * 52068SN/A * The license below extends only to copyright in the software and shall 62068SN/A * not be construed as granting a license to any other intellectual 72068SN/A * property including but not limited to intellectual property relating 82068SN/A * to a hardware implementation of the functionality of the software 92068SN/A * licensed hereunder. You may use the software subject to the license 102068SN/A * terms below provided that you ensure that this notice is replicated 112068SN/A * unmodified and in its entirety in all distributions of the software, 122068SN/A * modified or unmodified, in source code or in binary form. 132068SN/A * 142068SN/A * Copyright (c) 2007-2008 The Florida State University 152068SN/A * All rights reserved. 162068SN/A * 172068SN/A * Redistribution and use in source and binary forms, with or without 182068SN/A * modification, are permitted provided that the following conditions are 192068SN/A * met: redistributions of source code must retain the above copyright 202068SN/A * notice, this list of conditions and the following disclaimer; 212068SN/A * redistributions in binary form must reproduce the above copyright 222068SN/A * notice, this list of conditions and the following disclaimer in the 232068SN/A * documentation and/or other materials provided with the distribution; 242068SN/A * neither the name of the copyright holders nor the names of its 252068SN/A * contributors may be used to endorse or promote products derived from 262068SN/A * this software without specific prior written permission. 272068SN/A * 282665Ssaidi@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 292665Ssaidi@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 302665Ssaidi@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 312068SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 322649Ssaidi@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 332649Ssaidi@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 342649Ssaidi@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 352649Ssaidi@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 362649Ssaidi@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 372068SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 382068SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 392068SN/A * 402068SN/A * Authors: Stephen Hines 412068SN/A */ 422068SN/A#ifndef __ARCH_ARM_MEM_HH__ 432068SN/A#define __ARCH_ARM_MEM_HH__ 442068SN/A 452068SN/A#include "arch/arm/insts/pred_inst.hh" 462068SN/A 472068SN/Anamespace ArmISA 482107SN/A{ 492068SN/A 502107SN/Aclass Swap : public PredOp 512068SN/A{ 522068SN/A protected: 532227SN/A IntRegIndex dest; 542107SN/A IntRegIndex op1; 552107SN/A IntRegIndex base; 562068SN/A 572068SN/A Swap(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 582068SN/A IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _base) 592068SN/A : PredOp(mnem, _machInst, __opClass), 602068SN/A dest(_dest), op1(_op1), base(_base) 612068SN/A {} 622068SN/A 632068SN/A std::string generateDisassembly( 642068SN/A Addr pc, const SymbolTable *symtab) const override; 652068SN/A}; 662107SN/A 672107SN/Aclass MightBeMicro : public PredOp 682068SN/A{ 692068SN/A protected: 702068SN/A MightBeMicro(const char *mnem, ExtMachInst _machInst, OpClass __opClass) 712068SN/A : PredOp(mnem, _machInst, __opClass) 722068SN/A {} 732068SN/A 742068SN/A void 752068SN/A advancePC(PCState &pcState) const 762068SN/A { 772068SN/A if (flags[IsLastMicroop]) { 782068SN/A pcState.uEnd(); 792068SN/A } else if (flags[IsMicroop]) { 802068SN/A pcState.uAdvance(); 812227SN/A } else { 822107SN/A pcState.advance(); 832107SN/A } 842068SN/A } 852068SN/A}; 862068SN/A 872068SN/A// The address is a base register plus an immediate. 882068SN/Aclass RfeOp : public MightBeMicro 892068SN/A{ 902068SN/A public: 912068SN/A enum AddrMode { 922068SN/A DecrementAfter, 932068SN/A DecrementBefore, 942068SN/A IncrementAfter, 952068SN/A IncrementBefore 962068SN/A }; 972068SN/A protected: 982068SN/A IntRegIndex base; 992068SN/A AddrMode mode; 1002227SN/A bool wb; 1012107SN/A IntRegIndex ura, urb, urc; 1022107SN/A static const unsigned numMicroops = 3; 1032068SN/A 1042068SN/A StaticInstPtr *uops; 1052068SN/A 1062068SN/A RfeOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1072068SN/A IntRegIndex _base, AddrMode _mode, bool _wb) 1082068SN/A : MightBeMicro(mnem, _machInst, __opClass), 1092068SN/A base(_base), mode(_mode), wb(_wb), 1102068SN/A ura(INTREG_UREG0), urb(INTREG_UREG1), 1112068SN/A urc(INTREG_UREG2), 1122068SN/A uops(NULL) 1132068SN/A {} 1142068SN/A 1152068SN/A virtual 1162068SN/A ~RfeOp() 1172068SN/A { 1182068SN/A delete [] uops; 1192068SN/A } 1202068SN/A 1212068SN/A StaticInstPtr 1222068SN/A fetchMicroop(MicroPC microPC) const override 1232068SN/A { 1242068SN/A assert(uops != NULL && microPC < numMicroops); 1252068SN/A return uops[microPC]; 1262068SN/A } 1272068SN/A 1282068SN/A std::string generateDisassembly( 1293953Sstever@eecs.umich.edu Addr pc, const SymbolTable *symtab) const override; 1302068SN/A}; 1312068SN/A 1322068SN/A// The address is a base register plus an immediate. 1332068SN/Aclass SrsOp : public MightBeMicro 1342068SN/A{ 1352068SN/A public: 1362068SN/A enum AddrMode { 1372068SN/A DecrementAfter, 1382068SN/A DecrementBefore, 1392068SN/A IncrementAfter, 1402068SN/A IncrementBefore 1412068SN/A }; 1422068SN/A protected: 1432068SN/A uint32_t regMode; 1442068SN/A AddrMode mode; 1452068SN/A bool wb; 1462068SN/A static const unsigned numMicroops = 2; 1472068SN/A 1482068SN/A StaticInstPtr *uops; 1492068SN/A 1502068SN/A SrsOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1512068SN/A uint32_t _regMode, AddrMode _mode, bool _wb) 1522227SN/A : MightBeMicro(mnem, _machInst, __opClass), 1532068SN/A regMode(_regMode), mode(_mode), wb(_wb), uops(NULL) 1542068SN/A {} 1552068SN/A 1562068SN/A virtual 1572068SN/A ~SrsOp() 1582068SN/A { 1592068SN/A delete [] uops; 1602068SN/A } 1612068SN/A 1622068SN/A StaticInstPtr 1632068SN/A fetchMicroop(MicroPC microPC) const override 1642227SN/A { 1652068SN/A assert(uops != NULL && microPC < numMicroops); 1662068SN/A return uops[microPC]; 1672068SN/A } 1682068SN/A 1692068SN/A std::string generateDisassembly( 1702068SN/A Addr pc, const SymbolTable *symtab) const override; 1712068SN/A}; 1722227SN/A 1732068SN/Aclass Memory : public MightBeMicro 1742068SN/A{ 1752095SN/A public: 1762095SN/A enum AddrMode { 1772095SN/A AddrMd_Offset, 1782095SN/A AddrMd_PreIndex, 1792068SN/A AddrMd_PostIndex 1802068SN/A }; 1812068SN/A 1822095SN/A protected: 1832095SN/A 1842132SN/A IntRegIndex dest; 1852095SN/A IntRegIndex base; 1862095SN/A bool add; 1872095SN/A static const unsigned numMicroops = 3; 1882095SN/A 1893349Sbinkertn@umich.edu StaticInstPtr *uops; 1902623SN/A 1912095SN/A Memory(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1922095SN/A IntRegIndex _dest, IntRegIndex _base, bool _add) 1932095SN/A : MightBeMicro(mnem, _machInst, __opClass), 1943953Sstever@eecs.umich.edu dest(_dest), base(_base), add(_add), uops(NULL) 1952068SN/A {} 1962068SN/A 1972068SN/A virtual 1982227SN/A ~Memory() 1992068SN/A { 2002068SN/A delete [] uops; 2013953Sstever@eecs.umich.edu } 2022068SN/A 2033953Sstever@eecs.umich.edu StaticInstPtr 2042068SN/A fetchMicroop(MicroPC microPC) const override 2053953Sstever@eecs.umich.edu { 2063953Sstever@eecs.umich.edu assert(uops != NULL && microPC < numMicroops); 2072227SN/A return uops[microPC]; 2082068SN/A } 2092068SN/A 2103953Sstever@eecs.umich.edu virtual void 2112068SN/A printOffset(std::ostream &os) const 2123953Sstever@eecs.umich.edu {} 2132068SN/A 2143953Sstever@eecs.umich.edu virtual void 2153953Sstever@eecs.umich.edu printDest(std::ostream &os) const 2162227SN/A { 2172068SN/A printIntReg(os, dest); 2182068SN/A } 2192068SN/A 2202068SN/A void printInst(std::ostream &os, AddrMode addrMode) const; 2212068SN/A}; 2222068SN/A 2232068SN/A// The address is a base register plus an immediate. 2242068SN/Aclass MemoryImm : public Memory 2252068SN/A{ 2262132SN/A protected: 2272068SN/A int32_t imm; 2282068SN/A 2292068SN/A MemoryImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 2302068SN/A IntRegIndex _dest, IntRegIndex _base, bool _add, int32_t _imm) 2312132SN/A : Memory(mnem, _machInst, __opClass, _dest, _base, _add), imm(_imm) 2322068SN/A {} 2332068SN/A 2342068SN/A void 2352068SN/A printOffset(std::ostream &os) const 2363953Sstever@eecs.umich.edu { 2372068SN/A int32_t pImm = imm; 2382090SN/A if (!add) 2392068SN/A pImm = -pImm; 2402068SN/A ccprintf(os, "#%d", pImm); 2412068SN/A } 2422068SN/A}; 2432068SN/A 2442068SN/Aclass MemoryExImm : public MemoryImm 2452068SN/A{ 2462068SN/A protected: 2472069SN/A IntRegIndex result; 2482132SN/A 2492068SN/A MemoryExImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 2502068SN/A IntRegIndex _result, IntRegIndex _dest, IntRegIndex _base, 2512068SN/A bool _add, int32_t _imm) 2522068SN/A : MemoryImm(mnem, _machInst, __opClass, _dest, _base, _add, _imm), 2532132SN/A result(_result) 2542068SN/A {} 2552068SN/A 2562068SN/A void 2572069SN/A printDest(std::ostream &os) const 2582068SN/A { 2592068SN/A printIntReg(os, result); 2602090SN/A os << ", "; 2612069SN/A MemoryImm::printDest(os); 2623953Sstever@eecs.umich.edu } 2632068SN/A}; 2642068SN/A 2652090SN/A// The address is a base register plus an immediate. 2662069SN/Aclass MemoryDImm : public MemoryImm 2672068SN/A{ 2682068SN/A protected: 2692068SN/A IntRegIndex dest2; 2702068SN/A 2712068SN/A MemoryDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 2722068SN/A IntRegIndex _dest, IntRegIndex _dest2, 2732068SN/A IntRegIndex _base, bool _add, int32_t _imm) 2742069SN/A : MemoryImm(mnem, _machInst, __opClass, _dest, _base, _add, _imm), 2752132SN/A dest2(_dest2) 2762068SN/A {} 2772068SN/A 2782068SN/A void 2792132SN/A printDest(std::ostream &os) const 2802068SN/A { 2812068SN/A MemoryImm::printDest(os); 2822068SN/A os << ", "; 2832069SN/A printIntReg(os, dest2); 2842068SN/A } 2852068SN/A}; 2862090SN/A 2872069SN/Aclass MemoryExDImm : public MemoryDImm 2882068SN/A{ 2892068SN/A protected: 2902068SN/A IntRegIndex result; 2912090SN/A 2922069SN/A MemoryExDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 2932069SN/A IntRegIndex _result, IntRegIndex _dest, IntRegIndex _dest2, 2942069SN/A IntRegIndex _base, bool _add, int32_t _imm) 2952069SN/A : MemoryDImm(mnem, _machInst, __opClass, _dest, _dest2, 2962069SN/A _base, _add, _imm), result(_result) 2972069SN/A {} 2982069SN/A 2992069SN/A void 3002095SN/A printDest(std::ostream &os) const 3012132SN/A { 3022095SN/A printIntReg(os, result); 3032095SN/A os << ", "; 3042095SN/A MemoryDImm::printDest(os); 3052132SN/A } 3062095SN/A}; 3072095SN/A 3082095SN/A// The address is a shifted register plus an immediate 3092095SN/Aclass MemoryReg : public Memory 3102095SN/A{ 3112095SN/A protected: 3122098SN/A int32_t shiftAmt; 3132095SN/A ArmShiftType shiftType; 3142095SN/A IntRegIndex index; 3152095SN/A 3162095SN/A MemoryReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 3172095SN/A IntRegIndex _dest, IntRegIndex _base, bool _add, 3182095SN/A int32_t _shiftAmt, ArmShiftType _shiftType, 3192095SN/A IntRegIndex _index) 3202095SN/A : Memory(mnem, _machInst, __opClass, _dest, _base, _add), 3212095SN/A shiftAmt(_shiftAmt), shiftType(_shiftType), index(_index) 3223349Sbinkertn@umich.edu {} 3232095SN/A 3242095SN/A void printOffset(std::ostream &os) const; 3252095SN/A}; 3262132SN/A 3272095SN/Aclass MemoryDReg : public MemoryReg 3282095SN/A{ 3292506SN/A protected: 3302095SN/A IntRegIndex dest2; 3312623SN/A 3322095SN/A MemoryDReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 3332098SN/A IntRegIndex _dest, IntRegIndex _dest2, 3342095SN/A IntRegIndex _base, bool _add, 3352095SN/A int32_t _shiftAmt, ArmShiftType _shiftType, 3362095SN/A IntRegIndex _index) 3372098SN/A : MemoryReg(mnem, _machInst, __opClass, _dest, _base, _add, 3382095SN/A _shiftAmt, _shiftType, _index), 3392095SN/A dest2(_dest2) 3402095SN/A {} 3412095SN/A 3422095SN/A void 3432095SN/A printDest(std::ostream &os) const 3442095SN/A { 3452095SN/A MemoryReg::printDest(os); 3462069SN/A os << ", "; 3472132SN/A printIntReg(os, dest2); 3482069SN/A } 3492069SN/A}; 3502069SN/A 3512069SN/Atemplate<class Base> 3522132SN/Aclass MemoryOffset : public Base 3534027Sstever@eecs.umich.edu{ 3544027Sstever@eecs.umich.edu protected: 3554027Sstever@eecs.umich.edu MemoryOffset(const char *mnem, ExtMachInst _machInst, 3564027Sstever@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, 3574027Sstever@eecs.umich.edu bool _add, int32_t _imm) 3584027Sstever@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm) 3594027Sstever@eecs.umich.edu {} 3604027Sstever@eecs.umich.edu 3614027Sstever@eecs.umich.edu MemoryOffset(const char *mnem, ExtMachInst _machInst, 3624027Sstever@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, 3634027Sstever@eecs.umich.edu bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, 3644027Sstever@eecs.umich.edu IntRegIndex _index) 3654027Sstever@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _base, _add, 3664027Sstever@eecs.umich.edu _shiftAmt, _shiftType, _index) 3674027Sstever@eecs.umich.edu {} 3684027Sstever@eecs.umich.edu 3694027Sstever@eecs.umich.edu MemoryOffset(const char *mnem, ExtMachInst _machInst, 3704027Sstever@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, 3714027Sstever@eecs.umich.edu IntRegIndex _base, bool _add, int32_t _imm) 3724027Sstever@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm) 3734027Sstever@eecs.umich.edu {} 3744027Sstever@eecs.umich.edu 3754027Sstever@eecs.umich.edu MemoryOffset(const char *mnem, ExtMachInst _machInst, 3764027Sstever@eecs.umich.edu OpClass __opClass, IntRegIndex _result, 3774027Sstever@eecs.umich.edu IntRegIndex _dest, IntRegIndex _dest2, 3784027Sstever@eecs.umich.edu IntRegIndex _base, bool _add, int32_t _imm) 3794027Sstever@eecs.umich.edu : Base(mnem, _machInst, __opClass, _result, 3804027Sstever@eecs.umich.edu _dest, _dest2, _base, _add, _imm) 3814027Sstever@eecs.umich.edu {} 3824027Sstever@eecs.umich.edu 3834027Sstever@eecs.umich.edu MemoryOffset(const char *mnem, ExtMachInst _machInst, 3844027Sstever@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, 3854027Sstever@eecs.umich.edu IntRegIndex _base, bool _add, 3864027Sstever@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType, 3874027Sstever@eecs.umich.edu IntRegIndex _index) 3882069SN/A : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, 3892069SN/A _shiftAmt, _shiftType, _index) 3902069SN/A {} 3912069SN/A 3922069SN/A std::string 3932069SN/A generateDisassembly(Addr pc, const SymbolTable *symtab) const 3942069SN/A { 3952090SN/A std::stringstream ss; 3963953Sstever@eecs.umich.edu this->printInst(ss, Memory::AddrMd_Offset); 3972069SN/A return ss.str(); 3982069SN/A } 3992090SN/A}; 4002069SN/A 4012069SN/Atemplate<class Base> 4022069SN/Aclass MemoryPreIndex : public Base 4032068SN/A{ 4042068SN/A protected: 4052090SN/A MemoryPreIndex(const char *mnem, ExtMachInst _machInst, 4062068SN/A OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, 4072068SN/A bool _add, int32_t _imm) 4082068SN/A : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm) 4092090SN/A {} 4102069SN/A 4112068SN/A MemoryPreIndex(const char *mnem, ExtMachInst _machInst, 4122068SN/A OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, 4132068SN/A bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, 4142068SN/A IntRegIndex _index) 4152068SN/A : Base(mnem, _machInst, __opClass, _dest, _base, _add, 4162068SN/A _shiftAmt, _shiftType, _index) 4172068SN/A {} 4182069SN/A 4192132SN/A MemoryPreIndex(const char *mnem, ExtMachInst _machInst, 4202069SN/A OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, 4212069SN/A IntRegIndex _base, bool _add, int32_t _imm) 4222069SN/A : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm) 4232132SN/A {} 4244027Sstever@eecs.umich.edu 4254027Sstever@eecs.umich.edu MemoryPreIndex(const char *mnem, ExtMachInst _machInst, 4264027Sstever@eecs.umich.edu OpClass __opClass, IntRegIndex _result, 4274027Sstever@eecs.umich.edu IntRegIndex _dest, IntRegIndex _dest2, 4284027Sstever@eecs.umich.edu IntRegIndex _base, bool _add, int32_t _imm) 4294027Sstever@eecs.umich.edu : Base(mnem, _machInst, __opClass, _result, 4304027Sstever@eecs.umich.edu _dest, _dest2, _base, _add, _imm) 4314027Sstever@eecs.umich.edu {} 4324027Sstever@eecs.umich.edu 4334027Sstever@eecs.umich.edu MemoryPreIndex(const char *mnem, ExtMachInst _machInst, 4344027Sstever@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, 4354027Sstever@eecs.umich.edu IntRegIndex _base, bool _add, 4364027Sstever@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType, 4374027Sstever@eecs.umich.edu IntRegIndex _index) 4384027Sstever@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, 4394027Sstever@eecs.umich.edu _shiftAmt, _shiftType, _index) 4404027Sstever@eecs.umich.edu {} 4414027Sstever@eecs.umich.edu 4424027Sstever@eecs.umich.edu std::string 4434027Sstever@eecs.umich.edu generateDisassembly(Addr pc, const SymbolTable *symtab) const 4444027Sstever@eecs.umich.edu { 4454027Sstever@eecs.umich.edu std::stringstream ss; 4464027Sstever@eecs.umich.edu this->printInst(ss, Memory::AddrMd_PreIndex); 4474027Sstever@eecs.umich.edu return ss.str(); 4484027Sstever@eecs.umich.edu } 4494027Sstever@eecs.umich.edu}; 4504027Sstever@eecs.umich.edu 4514027Sstever@eecs.umich.edutemplate<class Base> 4524027Sstever@eecs.umich.educlass MemoryPostIndex : public Base 4534027Sstever@eecs.umich.edu{ 4544027Sstever@eecs.umich.edu protected: 4554027Sstever@eecs.umich.edu MemoryPostIndex(const char *mnem, ExtMachInst _machInst, 4564027Sstever@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, 4574027Sstever@eecs.umich.edu bool _add, int32_t _imm) 4582069SN/A : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm) 4592069SN/A {} 4602069SN/A 4612069SN/A MemoryPostIndex(const char *mnem, ExtMachInst _machInst, 4622069SN/A OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, 4632069SN/A bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, 4642069SN/A IntRegIndex _index) 4652090SN/A : Base(mnem, _machInst, __opClass, _dest, _base, _add, 4662069SN/A _shiftAmt, _shiftType, _index) 4672069SN/A {} 4682069SN/A 4692090SN/A MemoryPostIndex(const char *mnem, ExtMachInst _machInst, 4702069SN/A OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, 4712069SN/A IntRegIndex _base, bool _add, int32_t _imm) 4722069SN/A : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm) 4732069SN/A {} 4742069SN/A 4752090SN/A MemoryPostIndex(const char *mnem, ExtMachInst _machInst, 4762069SN/A OpClass __opClass, IntRegIndex _result, 4772069SN/A IntRegIndex _dest, IntRegIndex _dest2, 4782069SN/A IntRegIndex _base, bool _add, int32_t _imm) 4792090SN/A : Base(mnem, _machInst, __opClass, _result, 4802069SN/A _dest, _dest2, _base, _add, _imm) 4812069SN/A {} 4822069SN/A 4832069SN/A MemoryPostIndex(const char *mnem, ExtMachInst _machInst, 4842069SN/A OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, 4852069SN/A IntRegIndex _base, bool _add, 4862069SN/A int32_t _shiftAmt, ArmShiftType _shiftType, 4872095SN/A IntRegIndex _index) 4882132SN/A : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, 4892095SN/A _shiftAmt, _shiftType, _index) 4902095SN/A {} 4912095SN/A 4922132SN/A std::string 4932095SN/A generateDisassembly(Addr pc, const SymbolTable *symtab) const 4942095SN/A { 4952506SN/A std::stringstream ss; 4962095SN/A this->printInst(ss, Memory::AddrMd_PostIndex); 4972095SN/A return ss.str(); 4982095SN/A } 4992098SN/A}; 5002095SN/A} 5012095SN/A 5022095SN/A#endif //__ARCH_ARM_INSTS_MEM_HH__ 5032098SN/A