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