misc.hh revision 7409
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
2617409Sgblack@eecs.umich.educlass UnknownOp : public PredOp
2627409Sgblack@eecs.umich.edu{
2637409Sgblack@eecs.umich.edu  protected:
2647409Sgblack@eecs.umich.edu
2657409Sgblack@eecs.umich.edu    UnknownOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass) :
2667409Sgblack@eecs.umich.edu        PredOp(mnem, _machInst, __opClass)
2677409Sgblack@eecs.umich.edu    {}
2687409Sgblack@eecs.umich.edu
2697409Sgblack@eecs.umich.edu    std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
2707409Sgblack@eecs.umich.edu};
2717409Sgblack@eecs.umich.edu
2727202Sgblack@eecs.umich.edu#endif
273