types.hh revision 6268:0f869e59c079
15217Ssaidi@eecs.umich.edu/*
25217Ssaidi@eecs.umich.edu * Copyright (c) 2007-2008 The Florida State University
35217Ssaidi@eecs.umich.edu * All rights reserved.
45217Ssaidi@eecs.umich.edu *
55217Ssaidi@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
65217Ssaidi@eecs.umich.edu * modification, are permitted provided that the following conditions are
75217Ssaidi@eecs.umich.edu * met: redistributions of source code must retain the above copyright
85217Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
95217Ssaidi@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
105217Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
115217Ssaidi@eecs.umich.edu * documentation and/or other materials provided with the distribution;
125217Ssaidi@eecs.umich.edu * neither the name of the copyright holders nor the names of its
135217Ssaidi@eecs.umich.edu * contributors may be used to endorse or promote products derived from
145217Ssaidi@eecs.umich.edu * this software without specific prior written permission.
155217Ssaidi@eecs.umich.edu *
165217Ssaidi@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
175217Ssaidi@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
185217Ssaidi@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
195217Ssaidi@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
205217Ssaidi@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
215217Ssaidi@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
225217Ssaidi@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
235217Ssaidi@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
245217Ssaidi@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255217Ssaidi@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
265217Ssaidi@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
275217Ssaidi@eecs.umich.edu *
285217Ssaidi@eecs.umich.edu * Authors: Stephen Hines
295217Ssaidi@eecs.umich.edu */
305217Ssaidi@eecs.umich.edu
315217Ssaidi@eecs.umich.edu#ifndef __ARCH_ARM_TYPES_HH__
325217Ssaidi@eecs.umich.edu#define __ARCH_ARM_TYPES_HH__
335217Ssaidi@eecs.umich.edu
345217Ssaidi@eecs.umich.edu#include "base/bitunion.hh"
355217Ssaidi@eecs.umich.edu#include "base/types.hh"
365217Ssaidi@eecs.umich.edu
375217Ssaidi@eecs.umich.edunamespace ArmISA
385217Ssaidi@eecs.umich.edu{
395217Ssaidi@eecs.umich.edu    typedef uint32_t MachInst;
405217Ssaidi@eecs.umich.edu
415217Ssaidi@eecs.umich.edu    BitUnion64(ExtMachInst)
425217Ssaidi@eecs.umich.edu        // Made up bitfields that make life easier.
435217Ssaidi@eecs.umich.edu        Bitfield<33>     sevenAndFour;
445217Ssaidi@eecs.umich.edu        Bitfield<32>     isMisc;
455217Ssaidi@eecs.umich.edu
465217Ssaidi@eecs.umich.edu        // All the different types of opcode fields.
475217Ssaidi@eecs.umich.edu        Bitfield<27, 25> encoding;
485217Ssaidi@eecs.umich.edu        Bitfield<24, 21> opcode;
495217Ssaidi@eecs.umich.edu        Bitfield<24, 23> opcode24_23;
505217Ssaidi@eecs.umich.edu        Bitfield<24>     opcode24;
515217Ssaidi@eecs.umich.edu        Bitfield<23, 20> opcode23_20;
525217Ssaidi@eecs.umich.edu        Bitfield<23, 21> opcode23_21;
535217Ssaidi@eecs.umich.edu        Bitfield<23>     opcode23;
545217Ssaidi@eecs.umich.edu        Bitfield<22, 8>  opcode22_8;
555217Ssaidi@eecs.umich.edu        Bitfield<22, 21> opcode22_21;
565217Ssaidi@eecs.umich.edu        Bitfield<22>     opcode22;
575217Ssaidi@eecs.umich.edu        Bitfield<21, 20> opcode21_20;
585217Ssaidi@eecs.umich.edu        Bitfield<20>     opcode20;
595217Ssaidi@eecs.umich.edu        Bitfield<19, 18> opcode19_18;
605217Ssaidi@eecs.umich.edu        Bitfield<19>     opcode19;
615217Ssaidi@eecs.umich.edu        Bitfield<15, 12> opcode15_12;
625217Ssaidi@eecs.umich.edu        Bitfield<15>     opcode15;
635217Ssaidi@eecs.umich.edu        Bitfield<9>      opcode9;
645217Ssaidi@eecs.umich.edu        Bitfield<7,  4>  miscOpcode;
655217Ssaidi@eecs.umich.edu        Bitfield<7,  5>  opcode7_5;
665217Ssaidi@eecs.umich.edu        Bitfield<7,  6>  opcode7_6;
675217Ssaidi@eecs.umich.edu        Bitfield<7>      opcode7;
685217Ssaidi@eecs.umich.edu        Bitfield<6,  5>  opcode6_5;
695217Ssaidi@eecs.umich.edu        Bitfield<6>      opcode6;
705217Ssaidi@eecs.umich.edu        Bitfield<5>      opcode5;
715217Ssaidi@eecs.umich.edu        Bitfield<4>      opcode4;
725217Ssaidi@eecs.umich.edu
735217Ssaidi@eecs.umich.edu        Bitfield<31, 28> condCode;
745217Ssaidi@eecs.umich.edu        Bitfield<20>     sField;
755217Ssaidi@eecs.umich.edu        Bitfield<19, 16> rn;
765217Ssaidi@eecs.umich.edu        Bitfield<15, 12> rd;
775712Shsul@eecs.umich.edu        Bitfield<11, 7>  shiftSize;
785712Shsul@eecs.umich.edu        Bitfield<6,  5>  shift;
795217Ssaidi@eecs.umich.edu        Bitfield<3,  0>  rm;
805217Ssaidi@eecs.umich.edu
815217Ssaidi@eecs.umich.edu        Bitfield<11, 8>  rs;
82
83        Bitfield<19, 16> rdup;
84        Bitfield<15, 12> rddn;
85
86        Bitfield<15, 12> rdhi;
87        Bitfield<11, 8>  rdlo;
88
89        Bitfield<23>     uField;
90
91        SubBitUnion(puswl, 24, 20)
92            Bitfield<24> prepost;
93            Bitfield<23> up;
94            Bitfield<22> psruser;
95            Bitfield<21> writeback;
96            Bitfield<20> loadOp;
97        EndSubBitUnion(puswl)
98
99        Bitfield<24, 20> pubwl;
100        Bitfield<24, 20> puiwl;
101        Bitfield<22>     byteAccess;
102
103        Bitfield<23, 20> luas;
104
105        SubBitUnion(imm, 7, 0)
106            Bitfield<7, 4> imm7_4;
107            Bitfield<3, 0> imm3_0;
108        EndSubBitUnion(imm)
109
110        SubBitUnion(msr, 19, 16)
111            Bitfield<19> f;
112            Bitfield<18> s;
113            Bitfield<17> x;
114            Bitfield<16> c;
115        EndSubBitUnion(msr)
116
117        Bitfield<6>      y;
118        Bitfield<5>      x;
119
120        Bitfield<15, 4>  immed15_4;
121
122        Bitfield<21>     wField;
123
124        Bitfield<11, 8>  rotate;
125        Bitfield<7,  0>  immed7_0;
126
127        Bitfield<21>     tField;
128        Bitfield<11, 0>  immed11_0;
129
130        Bitfield<20, 16> immed20_16;
131        Bitfield<19, 16> immed19_16;
132
133        Bitfield<11, 8>  immedHi11_8;
134        Bitfield<3,  0>  immedLo3_0;
135
136        Bitfield<11, 10> rot;
137
138        Bitfield<5>      rField;
139
140        Bitfield<22>     caret;
141        Bitfield<15, 0>  regList;
142
143        Bitfield<23, 0>  offset;
144        Bitfield<11, 8>  copro;
145        Bitfield<7,  4>  op1_7_4;
146        Bitfield<3,  0>  cm;
147
148        Bitfield<22>     lField;
149        Bitfield<15, 12> cd;
150        Bitfield<7,  0>  option;
151
152        Bitfield<23, 20> op1_23_20;
153        Bitfield<19, 16> cn;
154        Bitfield<7,  5>  op2_7_5;
155
156        Bitfield<23, 21> op1_23_21;
157
158        Bitfield<23, 0>  immed23_0;
159        Bitfield<17>     mField;
160        Bitfield<8>      aField;
161        Bitfield<7>      iField;
162        Bitfield<6>      fField;
163        Bitfield<4,  0>  mode;
164
165        Bitfield<24>     aBlx;
166
167        Bitfield<11, 8>  cpNum;
168        Bitfield<18, 16> fn;
169        Bitfield<14, 12> fd;
170        Bitfield<3>      fpRegImm;
171        Bitfield<3,  0>  fm;
172        Bitfield<2,  0>  fpImm;
173        Bitfield<24, 20> punwl;
174
175        Bitfield<7,  0>  m5Func;
176    EndBitUnion(ExtMachInst)
177
178    // Shift types for ARM instructions
179    enum ArmShiftType {
180        LSL = 0,
181        LSR,
182        ASR,
183        ROR
184    };
185
186    typedef uint8_t  RegIndex;
187
188    typedef uint64_t IntReg;
189    typedef uint64_t LargestRead;
190    // Need to use 64 bits to make sure that read requests get handled properly
191
192    // floating point register file entry type
193    typedef uint32_t FloatReg32;
194    typedef uint64_t FloatReg64;
195    typedef uint64_t FloatRegBits;
196
197    typedef double FloatRegVal;
198    typedef double FloatReg;
199
200    // cop-0/cop-1 system control register
201    typedef uint64_t MiscReg;
202
203    typedef union {
204        IntReg   intreg;
205        FloatReg fpreg;
206        MiscReg  ctrlreg;
207    } AnyReg;
208
209    typedef int RegContextParam;
210    typedef int RegContextVal;
211
212    //used in FP convert & round function
213    enum ConvertType{
214        SINGLE_TO_DOUBLE,
215        SINGLE_TO_WORD,
216        SINGLE_TO_LONG,
217
218        DOUBLE_TO_SINGLE,
219        DOUBLE_TO_WORD,
220        DOUBLE_TO_LONG,
221
222        LONG_TO_SINGLE,
223        LONG_TO_DOUBLE,
224        LONG_TO_WORD,
225        LONG_TO_PS,
226
227        WORD_TO_SINGLE,
228        WORD_TO_DOUBLE,
229        WORD_TO_LONG,
230        WORD_TO_PS,
231
232        PL_TO_SINGLE,
233        PU_TO_SINGLE
234    };
235
236    //used in FP convert & round function
237    enum RoundMode{
238        RND_ZERO,
239        RND_DOWN,
240        RND_UP,
241        RND_NEAREST
242    };
243
244    enum OperatingMode {
245        MODE_USER = 16,
246        MODE_FIQ = 17,
247        MODE_IRQ = 18,
248        MODE_SVC = 19,
249        MODE_ABORT = 23,
250        MODE_UNDEFINED = 27,
251        MODE_SYSTEM = 31
252    };
253
254    struct CoreSpecific {
255        // Empty for now on the ARM
256    };
257
258} // namespace ArmISA
259
260#endif
261