types.hh revision 6254
16019Shines@cs.fsu.edu/*
26019Shines@cs.fsu.edu * Copyright (c) 2007-2008 The Florida State University
36019Shines@cs.fsu.edu * All rights reserved.
46019Shines@cs.fsu.edu *
56019Shines@cs.fsu.edu * Redistribution and use in source and binary forms, with or without
66019Shines@cs.fsu.edu * modification, are permitted provided that the following conditions are
76019Shines@cs.fsu.edu * met: redistributions of source code must retain the above copyright
86019Shines@cs.fsu.edu * notice, this list of conditions and the following disclaimer;
96019Shines@cs.fsu.edu * redistributions in binary form must reproduce the above copyright
106019Shines@cs.fsu.edu * notice, this list of conditions and the following disclaimer in the
116019Shines@cs.fsu.edu * documentation and/or other materials provided with the distribution;
126019Shines@cs.fsu.edu * neither the name of the copyright holders nor the names of its
136019Shines@cs.fsu.edu * contributors may be used to endorse or promote products derived from
146019Shines@cs.fsu.edu * this software without specific prior written permission.
156019Shines@cs.fsu.edu *
166019Shines@cs.fsu.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
176019Shines@cs.fsu.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
186019Shines@cs.fsu.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
196019Shines@cs.fsu.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
206019Shines@cs.fsu.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
216019Shines@cs.fsu.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
226019Shines@cs.fsu.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
236019Shines@cs.fsu.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
246019Shines@cs.fsu.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
256019Shines@cs.fsu.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
266019Shines@cs.fsu.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
276019Shines@cs.fsu.edu *
286019Shines@cs.fsu.edu * Authors: Stephen Hines
296019Shines@cs.fsu.edu */
306019Shines@cs.fsu.edu
316019Shines@cs.fsu.edu#ifndef __ARCH_ARM_TYPES_HH__
326019Shines@cs.fsu.edu#define __ARCH_ARM_TYPES_HH__
336019Shines@cs.fsu.edu
346251Sgblack@eecs.umich.edu#include "base/bitunion.hh"
356214Snate@binkert.org#include "base/types.hh"
366019Shines@cs.fsu.edu
376019Shines@cs.fsu.edunamespace ArmISA
386019Shines@cs.fsu.edu{
396019Shines@cs.fsu.edu    typedef uint32_t MachInst;
406251Sgblack@eecs.umich.edu
416251Sgblack@eecs.umich.edu    BitUnion32(ExtMachInst)
426251Sgblack@eecs.umich.edu        // All the different types of opcode fields.
436251Sgblack@eecs.umich.edu        Bitfield<27, 25> opcode;
446251Sgblack@eecs.umich.edu        Bitfield<27, 25> opcode27_25;
456251Sgblack@eecs.umich.edu        Bitfield<24, 21> opcode24_21;
466251Sgblack@eecs.umich.edu        Bitfield<24, 23> opcode24_23;
476251Sgblack@eecs.umich.edu        Bitfield<24>     opcode24;
486251Sgblack@eecs.umich.edu        Bitfield<23, 20> opcode23_20;
496251Sgblack@eecs.umich.edu        Bitfield<23, 21> opcode23_21;
506251Sgblack@eecs.umich.edu        Bitfield<23>     opcode23;
516251Sgblack@eecs.umich.edu        Bitfield<22, 8>  opcode22_8;
526251Sgblack@eecs.umich.edu        Bitfield<22, 21> opcode22_21;
536251Sgblack@eecs.umich.edu        Bitfield<22>     opcode22;
546251Sgblack@eecs.umich.edu        Bitfield<21, 20> opcode21_20;
556251Sgblack@eecs.umich.edu        Bitfield<20>     opcode20;
566251Sgblack@eecs.umich.edu        Bitfield<19, 18> opcode19_18;
576251Sgblack@eecs.umich.edu        Bitfield<19>     opcode19;
586251Sgblack@eecs.umich.edu        Bitfield<15, 12> opcode15_12;
596251Sgblack@eecs.umich.edu        Bitfield<15>     opcode15;
606251Sgblack@eecs.umich.edu        Bitfield<9>      opcode9;
616251Sgblack@eecs.umich.edu        Bitfield<7,  4>  opcode7_4;
626251Sgblack@eecs.umich.edu        Bitfield<7,  5>  opcode7_5;
636251Sgblack@eecs.umich.edu        Bitfield<7,  6>  opcode7_6;
646251Sgblack@eecs.umich.edu        Bitfield<7>      opcode7;
656251Sgblack@eecs.umich.edu        Bitfield<6,  5>  opcode6_5;
666251Sgblack@eecs.umich.edu        Bitfield<6>      opcode6;
676251Sgblack@eecs.umich.edu        Bitfield<5>      opcode5;
686251Sgblack@eecs.umich.edu        Bitfield<4>      opcode4;
696251Sgblack@eecs.umich.edu
706251Sgblack@eecs.umich.edu        Bitfield<31, 28> condCode;
716251Sgblack@eecs.umich.edu        Bitfield<20>     sField;
726251Sgblack@eecs.umich.edu        Bitfield<19, 16> rn;
736251Sgblack@eecs.umich.edu        Bitfield<15, 12> rd;
746251Sgblack@eecs.umich.edu        Bitfield<11, 7>  shiftSize;
756251Sgblack@eecs.umich.edu        Bitfield<6,  5>  shift;
766251Sgblack@eecs.umich.edu        Bitfield<3,  0>  rm;
776251Sgblack@eecs.umich.edu
786251Sgblack@eecs.umich.edu        Bitfield<11, 8>  rs;
796251Sgblack@eecs.umich.edu
806251Sgblack@eecs.umich.edu        Bitfield<19, 16> rdup;
816251Sgblack@eecs.umich.edu        Bitfield<15, 12> rddn;
826251Sgblack@eecs.umich.edu
836251Sgblack@eecs.umich.edu        Bitfield<15, 12> rdhi;
846251Sgblack@eecs.umich.edu        Bitfield<11, 8>  rdlo;
856251Sgblack@eecs.umich.edu
866251Sgblack@eecs.umich.edu        Bitfield<23>     uField;
876251Sgblack@eecs.umich.edu
886251Sgblack@eecs.umich.edu        SubBitUnion(puswl, 24, 20)
896251Sgblack@eecs.umich.edu            Bitfield<24> prepost;
906251Sgblack@eecs.umich.edu            Bitfield<23> up;
916251Sgblack@eecs.umich.edu            Bitfield<22> psruser;
926251Sgblack@eecs.umich.edu            Bitfield<21> writeback;
936251Sgblack@eecs.umich.edu            Bitfield<20> loadOp;
946251Sgblack@eecs.umich.edu        EndSubBitUnion(puswl)
956251Sgblack@eecs.umich.edu
966251Sgblack@eecs.umich.edu        Bitfield<24, 20> pubwl;
976251Sgblack@eecs.umich.edu        Bitfield<24, 20> puiwl;
986251Sgblack@eecs.umich.edu        Bitfield<22>     byteAccess;
996251Sgblack@eecs.umich.edu
1006251Sgblack@eecs.umich.edu        Bitfield<23, 20> luas;
1016251Sgblack@eecs.umich.edu
1026251Sgblack@eecs.umich.edu        SubBitUnion(imm, 7, 0)
1036251Sgblack@eecs.umich.edu            Bitfield<7, 4> imm7_4;
1046251Sgblack@eecs.umich.edu            Bitfield<3, 0> imm3_0;
1056251Sgblack@eecs.umich.edu        EndSubBitUnion(imm)
1066251Sgblack@eecs.umich.edu
1076251Sgblack@eecs.umich.edu        SubBitUnion(msr, 19, 16)
1086251Sgblack@eecs.umich.edu            Bitfield<19> f;
1096251Sgblack@eecs.umich.edu            Bitfield<18> s;
1106251Sgblack@eecs.umich.edu            Bitfield<17> x;
1116251Sgblack@eecs.umich.edu            Bitfield<16> c;
1126251Sgblack@eecs.umich.edu        EndSubBitUnion(msr)
1136251Sgblack@eecs.umich.edu
1146251Sgblack@eecs.umich.edu        Bitfield<6>      y;
1156251Sgblack@eecs.umich.edu        Bitfield<5>      x;
1166251Sgblack@eecs.umich.edu
1176251Sgblack@eecs.umich.edu        Bitfield<15, 4>  immed15_4;
1186251Sgblack@eecs.umich.edu
1196251Sgblack@eecs.umich.edu        Bitfield<21>     wField;
1206251Sgblack@eecs.umich.edu
1216251Sgblack@eecs.umich.edu        Bitfield<11, 8>  rotate;
1226251Sgblack@eecs.umich.edu        Bitfield<7,  0>  immed7_0;
1236251Sgblack@eecs.umich.edu
1246251Sgblack@eecs.umich.edu        Bitfield<21>     tField;
1256251Sgblack@eecs.umich.edu        Bitfield<11, 0>  immed11_0;
1266251Sgblack@eecs.umich.edu
1276251Sgblack@eecs.umich.edu        Bitfield<20, 16> immed20_16;
1286251Sgblack@eecs.umich.edu        Bitfield<19, 16> immed19_16;
1296251Sgblack@eecs.umich.edu
1306251Sgblack@eecs.umich.edu        Bitfield<11, 8>  immedHi11_8;
1316251Sgblack@eecs.umich.edu        Bitfield<3,  0>  immedLo3_0;
1326251Sgblack@eecs.umich.edu
1336251Sgblack@eecs.umich.edu        Bitfield<11, 10> rot;
1346251Sgblack@eecs.umich.edu
1356251Sgblack@eecs.umich.edu        Bitfield<5>      rField;
1366251Sgblack@eecs.umich.edu
1376251Sgblack@eecs.umich.edu        Bitfield<22>     caret;
1386251Sgblack@eecs.umich.edu        Bitfield<15, 0>  regList;
1396251Sgblack@eecs.umich.edu
1406251Sgblack@eecs.umich.edu        Bitfield<23, 0>  offset;
1416251Sgblack@eecs.umich.edu        Bitfield<11, 8>  copro;
1426251Sgblack@eecs.umich.edu        Bitfield<7,  4>  op1_7_4;
1436251Sgblack@eecs.umich.edu        Bitfield<3,  0>  cm;
1446251Sgblack@eecs.umich.edu
1456251Sgblack@eecs.umich.edu        Bitfield<22>     lField;
1466251Sgblack@eecs.umich.edu        Bitfield<15, 12> cd;
1476251Sgblack@eecs.umich.edu        Bitfield<7,  0>  option;
1486251Sgblack@eecs.umich.edu
1496251Sgblack@eecs.umich.edu        Bitfield<23, 20> op1_23_20;
1506251Sgblack@eecs.umich.edu        Bitfield<19, 16> cn;
1516251Sgblack@eecs.umich.edu        Bitfield<7,  5>  op2_7_5;
1526251Sgblack@eecs.umich.edu
1536251Sgblack@eecs.umich.edu        Bitfield<23, 21> op1_23_21;
1546251Sgblack@eecs.umich.edu
1556251Sgblack@eecs.umich.edu        Bitfield<23, 0>  immed23_0;
1566251Sgblack@eecs.umich.edu        Bitfield<17>     mField;
1576251Sgblack@eecs.umich.edu        Bitfield<8>      aField;
1586251Sgblack@eecs.umich.edu        Bitfield<7>      iField;
1596251Sgblack@eecs.umich.edu        Bitfield<6>      fField;
1606251Sgblack@eecs.umich.edu        Bitfield<4,  0>  mode;
1616251Sgblack@eecs.umich.edu
1626251Sgblack@eecs.umich.edu        Bitfield<24>     aBlx;
1636251Sgblack@eecs.umich.edu
1646251Sgblack@eecs.umich.edu        Bitfield<11, 8>  cpNum;
1656251Sgblack@eecs.umich.edu        Bitfield<18, 16> fn;
1666251Sgblack@eecs.umich.edu        Bitfield<14, 12> fd;
1676251Sgblack@eecs.umich.edu        Bitfield<3>      fpRegImm;
1686251Sgblack@eecs.umich.edu        Bitfield<3,  0>  fm;
1696251Sgblack@eecs.umich.edu        Bitfield<2,  0>  fpImm;
1706251Sgblack@eecs.umich.edu        Bitfield<24, 20> punwl;
1716251Sgblack@eecs.umich.edu
1726251Sgblack@eecs.umich.edu        Bitfield<7,  0>  m5Func;
1736251Sgblack@eecs.umich.edu    EndBitUnion(ExtMachInst)
1746251Sgblack@eecs.umich.edu
1756254Sgblack@eecs.umich.edu    // Shift types for ARM instructions
1766254Sgblack@eecs.umich.edu    enum ArmShiftType {
1776254Sgblack@eecs.umich.edu        LSL = 0,
1786254Sgblack@eecs.umich.edu        LSR,
1796254Sgblack@eecs.umich.edu        ASR,
1806254Sgblack@eecs.umich.edu        ROR
1816254Sgblack@eecs.umich.edu    };
1826254Sgblack@eecs.umich.edu
1836019Shines@cs.fsu.edu    typedef uint8_t  RegIndex;
1846019Shines@cs.fsu.edu
1856019Shines@cs.fsu.edu    typedef uint64_t IntReg;
1866019Shines@cs.fsu.edu    typedef uint64_t LargestRead;
1876019Shines@cs.fsu.edu    // Need to use 64 bits to make sure that read requests get handled properly
1886019Shines@cs.fsu.edu
1896019Shines@cs.fsu.edu    // floating point register file entry type
1906019Shines@cs.fsu.edu    typedef uint32_t FloatReg32;
1916019Shines@cs.fsu.edu    typedef uint64_t FloatReg64;
1926019Shines@cs.fsu.edu    typedef uint64_t FloatRegBits;
1936019Shines@cs.fsu.edu
1946019Shines@cs.fsu.edu    typedef double FloatRegVal;
1956019Shines@cs.fsu.edu    typedef double FloatReg;
1966019Shines@cs.fsu.edu
1976019Shines@cs.fsu.edu    // cop-0/cop-1 system control register
1986019Shines@cs.fsu.edu    typedef uint64_t MiscReg;
1996019Shines@cs.fsu.edu
2006019Shines@cs.fsu.edu    typedef union {
2016019Shines@cs.fsu.edu        IntReg   intreg;
2026019Shines@cs.fsu.edu        FloatReg fpreg;
2036019Shines@cs.fsu.edu        MiscReg  ctrlreg;
2046019Shines@cs.fsu.edu    } AnyReg;
2056019Shines@cs.fsu.edu
2066019Shines@cs.fsu.edu    typedef int RegContextParam;
2076019Shines@cs.fsu.edu    typedef int RegContextVal;
2086019Shines@cs.fsu.edu
2096019Shines@cs.fsu.edu    //used in FP convert & round function
2106019Shines@cs.fsu.edu    enum ConvertType{
2116019Shines@cs.fsu.edu        SINGLE_TO_DOUBLE,
2126019Shines@cs.fsu.edu        SINGLE_TO_WORD,
2136019Shines@cs.fsu.edu        SINGLE_TO_LONG,
2146019Shines@cs.fsu.edu
2156019Shines@cs.fsu.edu        DOUBLE_TO_SINGLE,
2166019Shines@cs.fsu.edu        DOUBLE_TO_WORD,
2176019Shines@cs.fsu.edu        DOUBLE_TO_LONG,
2186019Shines@cs.fsu.edu
2196019Shines@cs.fsu.edu        LONG_TO_SINGLE,
2206019Shines@cs.fsu.edu        LONG_TO_DOUBLE,
2216019Shines@cs.fsu.edu        LONG_TO_WORD,
2226019Shines@cs.fsu.edu        LONG_TO_PS,
2236019Shines@cs.fsu.edu
2246019Shines@cs.fsu.edu        WORD_TO_SINGLE,
2256019Shines@cs.fsu.edu        WORD_TO_DOUBLE,
2266019Shines@cs.fsu.edu        WORD_TO_LONG,
2276019Shines@cs.fsu.edu        WORD_TO_PS,
2286019Shines@cs.fsu.edu
2296019Shines@cs.fsu.edu        PL_TO_SINGLE,
2306019Shines@cs.fsu.edu        PU_TO_SINGLE
2316019Shines@cs.fsu.edu    };
2326019Shines@cs.fsu.edu
2336019Shines@cs.fsu.edu    //used in FP convert & round function
2346019Shines@cs.fsu.edu    enum RoundMode{
2356019Shines@cs.fsu.edu        RND_ZERO,
2366019Shines@cs.fsu.edu        RND_DOWN,
2376019Shines@cs.fsu.edu        RND_UP,
2386019Shines@cs.fsu.edu        RND_NEAREST
2396019Shines@cs.fsu.edu    };
2406019Shines@cs.fsu.edu
2416019Shines@cs.fsu.edu    enum OperatingMode {
2426019Shines@cs.fsu.edu        MODE_USER = 16,
2436019Shines@cs.fsu.edu        MODE_FIQ = 17,
2446019Shines@cs.fsu.edu        MODE_IRQ = 18,
2456019Shines@cs.fsu.edu        MODE_SVC = 19,
2466019Shines@cs.fsu.edu        MODE_ABORT = 23,
2476019Shines@cs.fsu.edu        MODE_UNDEFINED = 27,
2486019Shines@cs.fsu.edu        MODE_SYSTEM = 31
2496019Shines@cs.fsu.edu    };
2506019Shines@cs.fsu.edu
2516019Shines@cs.fsu.edu    struct CoreSpecific {
2526019Shines@cs.fsu.edu        // Empty for now on the ARM
2536019Shines@cs.fsu.edu    };
2546019Shines@cs.fsu.edu
2556019Shines@cs.fsu.edu} // namespace ArmISA
2566019Shines@cs.fsu.edu
2576019Shines@cs.fsu.edu#endif
258