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