mem.hh revision 7279
17118Sgblack@eecs.umich.edu/* 27118Sgblack@eecs.umich.edu * Copyright (c) 2010 ARM Limited 37118Sgblack@eecs.umich.edu * All rights reserved 47118Sgblack@eecs.umich.edu * 57118Sgblack@eecs.umich.edu * The license below extends only to copyright in the software and shall 67118Sgblack@eecs.umich.edu * not be construed as granting a license to any other intellectual 77118Sgblack@eecs.umich.edu * property including but not limited to intellectual property relating 87118Sgblack@eecs.umich.edu * to a hardware implementation of the functionality of the software 97118Sgblack@eecs.umich.edu * licensed hereunder. You may use the software subject to the license 107118Sgblack@eecs.umich.edu * terms below provided that you ensure that this notice is replicated 117118Sgblack@eecs.umich.edu * unmodified and in its entirety in all distributions of the software, 127118Sgblack@eecs.umich.edu * modified or unmodified, in source code or in binary form. 137118Sgblack@eecs.umich.edu * 147118Sgblack@eecs.umich.edu * Copyright (c) 2007-2008 The Florida State University 156253Sgblack@eecs.umich.edu * All rights reserved. 166253Sgblack@eecs.umich.edu * 176253Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 186253Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 196253Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 206253Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 216253Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 226253Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 236253Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 246253Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 256253Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 266253Sgblack@eecs.umich.edu * this software without specific prior written permission. 276253Sgblack@eecs.umich.edu * 286253Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 296253Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 306253Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 316253Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 326253Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 336253Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 346253Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 356253Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 366253Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 376253Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 386253Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 396253Sgblack@eecs.umich.edu * 406253Sgblack@eecs.umich.edu * Authors: Stephen Hines 416253Sgblack@eecs.umich.edu */ 426253Sgblack@eecs.umich.edu#ifndef __ARCH_ARM_MEM_HH__ 436253Sgblack@eecs.umich.edu#define __ARCH_ARM_MEM_HH__ 446253Sgblack@eecs.umich.edu 456253Sgblack@eecs.umich.edu#include "arch/arm/insts/pred_inst.hh" 466253Sgblack@eecs.umich.edu 476253Sgblack@eecs.umich.edunamespace ArmISA 486253Sgblack@eecs.umich.edu{ 497118Sgblack@eecs.umich.edu 507205Sgblack@eecs.umich.educlass Swap : public PredOp 517205Sgblack@eecs.umich.edu{ 527205Sgblack@eecs.umich.edu protected: 537205Sgblack@eecs.umich.edu IntRegIndex dest; 547205Sgblack@eecs.umich.edu IntRegIndex op1; 557205Sgblack@eecs.umich.edu IntRegIndex base; 567205Sgblack@eecs.umich.edu 577205Sgblack@eecs.umich.edu Swap(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 587205Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _op1, IntRegIndex _base) 597205Sgblack@eecs.umich.edu : PredOp(mnem, _machInst, __opClass), 607205Sgblack@eecs.umich.edu dest(_dest), op1(_op1), base(_base) 617205Sgblack@eecs.umich.edu {} 627205Sgblack@eecs.umich.edu 637205Sgblack@eecs.umich.edu std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 647205Sgblack@eecs.umich.edu}; 657205Sgblack@eecs.umich.edu 667132Sgblack@eecs.umich.educlass Memory : public PredOp 677118Sgblack@eecs.umich.edu{ 687118Sgblack@eecs.umich.edu public: 697118Sgblack@eecs.umich.edu enum AddrMode { 707118Sgblack@eecs.umich.edu AddrMd_Offset, 717118Sgblack@eecs.umich.edu AddrMd_PreIndex, 727118Sgblack@eecs.umich.edu AddrMd_PostIndex 737118Sgblack@eecs.umich.edu }; 747118Sgblack@eecs.umich.edu 757118Sgblack@eecs.umich.edu protected: 767118Sgblack@eecs.umich.edu 777118Sgblack@eecs.umich.edu IntRegIndex dest; 787118Sgblack@eecs.umich.edu IntRegIndex base; 797118Sgblack@eecs.umich.edu bool add; 807118Sgblack@eecs.umich.edu 817132Sgblack@eecs.umich.edu Memory(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 827132Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _base, bool _add) 837118Sgblack@eecs.umich.edu : PredOp(mnem, _machInst, __opClass), 847118Sgblack@eecs.umich.edu dest(_dest), base(_base), add(_add) 857118Sgblack@eecs.umich.edu {} 867118Sgblack@eecs.umich.edu 877118Sgblack@eecs.umich.edu virtual void 887118Sgblack@eecs.umich.edu printOffset(std::ostream &os) const 897118Sgblack@eecs.umich.edu {} 907118Sgblack@eecs.umich.edu 917279Sgblack@eecs.umich.edu virtual void 927279Sgblack@eecs.umich.edu printDest(std::ostream &os) const 937279Sgblack@eecs.umich.edu { 947279Sgblack@eecs.umich.edu printReg(os, dest); 957279Sgblack@eecs.umich.edu } 967279Sgblack@eecs.umich.edu 977118Sgblack@eecs.umich.edu void printInst(std::ostream &os, AddrMode addrMode) const; 987118Sgblack@eecs.umich.edu}; 997118Sgblack@eecs.umich.edu 1007118Sgblack@eecs.umich.edu// The address is a base register plus an immediate. 1017132Sgblack@eecs.umich.educlass MemoryImm : public Memory 1027118Sgblack@eecs.umich.edu{ 1037118Sgblack@eecs.umich.edu protected: 1047118Sgblack@eecs.umich.edu int32_t imm; 1057118Sgblack@eecs.umich.edu 1067132Sgblack@eecs.umich.edu MemoryImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1077132Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _base, bool _add, int32_t _imm) 1087132Sgblack@eecs.umich.edu : Memory(mnem, _machInst, __opClass, _dest, _base, _add), imm(_imm) 1097118Sgblack@eecs.umich.edu {} 1107118Sgblack@eecs.umich.edu 1117118Sgblack@eecs.umich.edu void 1127118Sgblack@eecs.umich.edu printOffset(std::ostream &os) const 1137118Sgblack@eecs.umich.edu { 1147118Sgblack@eecs.umich.edu int32_t pImm = imm; 1157118Sgblack@eecs.umich.edu if (!add) 1167118Sgblack@eecs.umich.edu pImm = -pImm; 1177118Sgblack@eecs.umich.edu ccprintf(os, "#%d", pImm); 1187118Sgblack@eecs.umich.edu } 1197118Sgblack@eecs.umich.edu}; 1207118Sgblack@eecs.umich.edu 1217279Sgblack@eecs.umich.edu// The address is a base register plus an immediate. 1227279Sgblack@eecs.umich.educlass MemoryDImm : public MemoryImm 1237279Sgblack@eecs.umich.edu{ 1247279Sgblack@eecs.umich.edu protected: 1257279Sgblack@eecs.umich.edu IntRegIndex dest2; 1267279Sgblack@eecs.umich.edu 1277279Sgblack@eecs.umich.edu MemoryDImm(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1287279Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _dest2, 1297279Sgblack@eecs.umich.edu IntRegIndex _base, bool _add, int32_t _imm) 1307279Sgblack@eecs.umich.edu : MemoryImm(mnem, _machInst, __opClass, _dest, _base, _add, _imm), 1317279Sgblack@eecs.umich.edu dest2(_dest2) 1327279Sgblack@eecs.umich.edu {} 1337279Sgblack@eecs.umich.edu 1347279Sgblack@eecs.umich.edu void 1357279Sgblack@eecs.umich.edu printDest(std::ostream &os) const 1367279Sgblack@eecs.umich.edu { 1377279Sgblack@eecs.umich.edu MemoryImm::printDest(os); 1387279Sgblack@eecs.umich.edu os << ", "; 1397279Sgblack@eecs.umich.edu printReg(os, dest2); 1407279Sgblack@eecs.umich.edu } 1417279Sgblack@eecs.umich.edu}; 1427279Sgblack@eecs.umich.edu 1437118Sgblack@eecs.umich.edu// The address is a shifted register plus an immediate 1447132Sgblack@eecs.umich.educlass MemoryReg : public Memory 1457118Sgblack@eecs.umich.edu{ 1467118Sgblack@eecs.umich.edu protected: 1477118Sgblack@eecs.umich.edu int32_t shiftAmt; 1487118Sgblack@eecs.umich.edu ArmShiftType shiftType; 1497118Sgblack@eecs.umich.edu IntRegIndex index; 1507118Sgblack@eecs.umich.edu 1517132Sgblack@eecs.umich.edu MemoryReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 1527132Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _base, bool _add, 1537132Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType, 1547132Sgblack@eecs.umich.edu IntRegIndex _index) 1557132Sgblack@eecs.umich.edu : Memory(mnem, _machInst, __opClass, _dest, _base, _add), 1567118Sgblack@eecs.umich.edu shiftAmt(_shiftAmt), shiftType(_shiftType), index(_index) 1577118Sgblack@eecs.umich.edu {} 1587118Sgblack@eecs.umich.edu 1597118Sgblack@eecs.umich.edu void 1607118Sgblack@eecs.umich.edu printOffset(std::ostream &os) const 1617118Sgblack@eecs.umich.edu { 1627118Sgblack@eecs.umich.edu if (!add) 1637118Sgblack@eecs.umich.edu os << "-"; 1647118Sgblack@eecs.umich.edu printReg(os, index); 1657118Sgblack@eecs.umich.edu if (shiftType != LSL || shiftAmt != 0) { 1667118Sgblack@eecs.umich.edu switch (shiftType) { 1677118Sgblack@eecs.umich.edu case LSL: 1687118Sgblack@eecs.umich.edu ccprintf(os, " LSL #%d", shiftAmt); 1697118Sgblack@eecs.umich.edu break; 1707118Sgblack@eecs.umich.edu case LSR: 1717118Sgblack@eecs.umich.edu if (shiftAmt == 0) { 1727118Sgblack@eecs.umich.edu ccprintf(os, " LSR #%d", 32); 1737118Sgblack@eecs.umich.edu } else { 1747118Sgblack@eecs.umich.edu ccprintf(os, " LSR #%d", shiftAmt); 1757118Sgblack@eecs.umich.edu } 1767118Sgblack@eecs.umich.edu break; 1777118Sgblack@eecs.umich.edu case ASR: 1787118Sgblack@eecs.umich.edu if (shiftAmt == 0) { 1797118Sgblack@eecs.umich.edu ccprintf(os, " ASR #%d", 32); 1807118Sgblack@eecs.umich.edu } else { 1817118Sgblack@eecs.umich.edu ccprintf(os, " ASR #%d", shiftAmt); 1827118Sgblack@eecs.umich.edu } 1837118Sgblack@eecs.umich.edu break; 1847118Sgblack@eecs.umich.edu case ROR: 1857118Sgblack@eecs.umich.edu if (shiftAmt == 0) { 1867118Sgblack@eecs.umich.edu ccprintf(os, " RRX"); 1877118Sgblack@eecs.umich.edu } else { 1887118Sgblack@eecs.umich.edu ccprintf(os, " ROR #%d", shiftAmt); 1897118Sgblack@eecs.umich.edu } 1907118Sgblack@eecs.umich.edu break; 1917118Sgblack@eecs.umich.edu } 1927118Sgblack@eecs.umich.edu } 1937118Sgblack@eecs.umich.edu } 1947118Sgblack@eecs.umich.edu}; 1957118Sgblack@eecs.umich.edu 1967279Sgblack@eecs.umich.educlass MemoryDReg : public MemoryReg 1977279Sgblack@eecs.umich.edu{ 1987279Sgblack@eecs.umich.edu protected: 1997279Sgblack@eecs.umich.edu IntRegIndex dest2; 2007279Sgblack@eecs.umich.edu 2017279Sgblack@eecs.umich.edu MemoryDReg(const char *mnem, ExtMachInst _machInst, OpClass __opClass, 2027279Sgblack@eecs.umich.edu IntRegIndex _dest, IntRegIndex _dest2, 2037279Sgblack@eecs.umich.edu IntRegIndex _base, bool _add, 2047279Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType, 2057279Sgblack@eecs.umich.edu IntRegIndex _index) 2067279Sgblack@eecs.umich.edu : MemoryReg(mnem, _machInst, __opClass, _dest, _base, _add, 2077279Sgblack@eecs.umich.edu _shiftAmt, _shiftType, _index), 2087279Sgblack@eecs.umich.edu dest2(_dest2) 2097279Sgblack@eecs.umich.edu {} 2107279Sgblack@eecs.umich.edu 2117279Sgblack@eecs.umich.edu void 2127279Sgblack@eecs.umich.edu printDest(std::ostream &os) const 2137279Sgblack@eecs.umich.edu { 2147279Sgblack@eecs.umich.edu MemoryReg::printDest(os); 2157279Sgblack@eecs.umich.edu os << ", "; 2167279Sgblack@eecs.umich.edu printReg(os, dest2); 2177279Sgblack@eecs.umich.edu } 2187279Sgblack@eecs.umich.edu}; 2197279Sgblack@eecs.umich.edu 2207118Sgblack@eecs.umich.edutemplate<class Base> 2217132Sgblack@eecs.umich.educlass MemoryOffset : public Base 2227118Sgblack@eecs.umich.edu{ 2237118Sgblack@eecs.umich.edu protected: 2247132Sgblack@eecs.umich.edu MemoryOffset(const char *mnem, ExtMachInst _machInst, 2257132Sgblack@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, 2267132Sgblack@eecs.umich.edu bool _add, int32_t _imm) 2277132Sgblack@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm) 2287132Sgblack@eecs.umich.edu {} 2297132Sgblack@eecs.umich.edu 2307132Sgblack@eecs.umich.edu MemoryOffset(const char *mnem, ExtMachInst _machInst, 2317132Sgblack@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, 2327132Sgblack@eecs.umich.edu bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, 2337132Sgblack@eecs.umich.edu IntRegIndex _index) 2347132Sgblack@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _base, _add, 2357132Sgblack@eecs.umich.edu _shiftAmt, _shiftType, _index) 2367132Sgblack@eecs.umich.edu {} 2377132Sgblack@eecs.umich.edu 2387279Sgblack@eecs.umich.edu MemoryOffset(const char *mnem, ExtMachInst _machInst, 2397279Sgblack@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, 2407279Sgblack@eecs.umich.edu IntRegIndex _base, bool _add, int32_t _imm) 2417279Sgblack@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm) 2427279Sgblack@eecs.umich.edu {} 2437279Sgblack@eecs.umich.edu 2447279Sgblack@eecs.umich.edu MemoryOffset(const char *mnem, ExtMachInst _machInst, 2457279Sgblack@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, 2467279Sgblack@eecs.umich.edu IntRegIndex _base, bool _add, 2477279Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType, 2487279Sgblack@eecs.umich.edu IntRegIndex _index) 2497279Sgblack@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, 2507279Sgblack@eecs.umich.edu _shiftAmt, _shiftType, _index) 2517279Sgblack@eecs.umich.edu {} 2527279Sgblack@eecs.umich.edu 2537132Sgblack@eecs.umich.edu std::string 2547132Sgblack@eecs.umich.edu generateDisassembly(Addr pc, const SymbolTable *symtab) const 2557132Sgblack@eecs.umich.edu { 2567132Sgblack@eecs.umich.edu std::stringstream ss; 2577132Sgblack@eecs.umich.edu this->printInst(ss, Memory::AddrMd_Offset); 2587132Sgblack@eecs.umich.edu return ss.str(); 2597132Sgblack@eecs.umich.edu } 2607132Sgblack@eecs.umich.edu}; 2617132Sgblack@eecs.umich.edu 2627132Sgblack@eecs.umich.edutemplate<class Base> 2637132Sgblack@eecs.umich.educlass MemoryPreIndex : public Base 2647132Sgblack@eecs.umich.edu{ 2657132Sgblack@eecs.umich.edu protected: 2667132Sgblack@eecs.umich.edu MemoryPreIndex(const char *mnem, ExtMachInst _machInst, 2677132Sgblack@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, 2687132Sgblack@eecs.umich.edu bool _add, int32_t _imm) 2697132Sgblack@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm) 2707132Sgblack@eecs.umich.edu {} 2717132Sgblack@eecs.umich.edu 2727132Sgblack@eecs.umich.edu MemoryPreIndex(const char *mnem, ExtMachInst _machInst, 2737132Sgblack@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, 2747132Sgblack@eecs.umich.edu bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, 2757132Sgblack@eecs.umich.edu IntRegIndex _index) 2767132Sgblack@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _base, _add, 2777132Sgblack@eecs.umich.edu _shiftAmt, _shiftType, _index) 2787132Sgblack@eecs.umich.edu {} 2797132Sgblack@eecs.umich.edu 2807279Sgblack@eecs.umich.edu MemoryPreIndex(const char *mnem, ExtMachInst _machInst, 2817279Sgblack@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, 2827279Sgblack@eecs.umich.edu IntRegIndex _base, bool _add, int32_t _imm) 2837279Sgblack@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm) 2847279Sgblack@eecs.umich.edu {} 2857279Sgblack@eecs.umich.edu 2867279Sgblack@eecs.umich.edu MemoryPreIndex(const char *mnem, ExtMachInst _machInst, 2877279Sgblack@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, 2887279Sgblack@eecs.umich.edu IntRegIndex _base, bool _add, 2897279Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType, 2907279Sgblack@eecs.umich.edu IntRegIndex _index) 2917279Sgblack@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, 2927279Sgblack@eecs.umich.edu _shiftAmt, _shiftType, _index) 2937279Sgblack@eecs.umich.edu {} 2947279Sgblack@eecs.umich.edu 2957132Sgblack@eecs.umich.edu std::string 2967132Sgblack@eecs.umich.edu generateDisassembly(Addr pc, const SymbolTable *symtab) const 2977132Sgblack@eecs.umich.edu { 2987132Sgblack@eecs.umich.edu std::stringstream ss; 2997132Sgblack@eecs.umich.edu this->printInst(ss, Memory::AddrMd_PreIndex); 3007132Sgblack@eecs.umich.edu return ss.str(); 3017132Sgblack@eecs.umich.edu } 3027132Sgblack@eecs.umich.edu}; 3037132Sgblack@eecs.umich.edu 3047132Sgblack@eecs.umich.edutemplate<class Base> 3057132Sgblack@eecs.umich.educlass MemoryPostIndex : public Base 3067132Sgblack@eecs.umich.edu{ 3077132Sgblack@eecs.umich.edu protected: 3087132Sgblack@eecs.umich.edu MemoryPostIndex(const char *mnem, ExtMachInst _machInst, 3097118Sgblack@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, 3107118Sgblack@eecs.umich.edu bool _add, int32_t _imm) 3117118Sgblack@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _base, _add, _imm) 3127118Sgblack@eecs.umich.edu {} 3137118Sgblack@eecs.umich.edu 3147132Sgblack@eecs.umich.edu MemoryPostIndex(const char *mnem, ExtMachInst _machInst, 3157118Sgblack@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _base, 3167118Sgblack@eecs.umich.edu bool _add, int32_t _shiftAmt, ArmShiftType _shiftType, 3177118Sgblack@eecs.umich.edu IntRegIndex _index) 3187118Sgblack@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _base, _add, 3197118Sgblack@eecs.umich.edu _shiftAmt, _shiftType, _index) 3207118Sgblack@eecs.umich.edu {} 3217118Sgblack@eecs.umich.edu 3227279Sgblack@eecs.umich.edu MemoryPostIndex(const char *mnem, ExtMachInst _machInst, 3237279Sgblack@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, 3247279Sgblack@eecs.umich.edu IntRegIndex _base, bool _add, int32_t _imm) 3257279Sgblack@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, _imm) 3267279Sgblack@eecs.umich.edu {} 3277279Sgblack@eecs.umich.edu 3287279Sgblack@eecs.umich.edu MemoryPostIndex(const char *mnem, ExtMachInst _machInst, 3297279Sgblack@eecs.umich.edu OpClass __opClass, IntRegIndex _dest, IntRegIndex _dest2, 3307279Sgblack@eecs.umich.edu IntRegIndex _base, bool _add, 3317279Sgblack@eecs.umich.edu int32_t _shiftAmt, ArmShiftType _shiftType, 3327279Sgblack@eecs.umich.edu IntRegIndex _index) 3337279Sgblack@eecs.umich.edu : Base(mnem, _machInst, __opClass, _dest, _dest2, _base, _add, 3347279Sgblack@eecs.umich.edu _shiftAmt, _shiftType, _index) 3357279Sgblack@eecs.umich.edu {} 3367279Sgblack@eecs.umich.edu 3377118Sgblack@eecs.umich.edu std::string 3387118Sgblack@eecs.umich.edu generateDisassembly(Addr pc, const SymbolTable *symtab) const 3397118Sgblack@eecs.umich.edu { 3407118Sgblack@eecs.umich.edu std::stringstream ss; 3417132Sgblack@eecs.umich.edu this->printInst(ss, Memory::AddrMd_PostIndex); 3427118Sgblack@eecs.umich.edu return ss.str(); 3437118Sgblack@eecs.umich.edu } 3447118Sgblack@eecs.umich.edu}; 3456253Sgblack@eecs.umich.edu} 3466253Sgblack@eecs.umich.edu 3476253Sgblack@eecs.umich.edu#endif //__ARCH_ARM_INSTS_MEM_HH__ 348