types.hh revision 7498:fbc62b421fa0
110066Sandreas.hansson@arm.com/* 210066Sandreas.hansson@arm.com * Copyright (c) 2010 ARM Limited 310066Sandreas.hansson@arm.com * All rights reserved 410066Sandreas.hansson@arm.com * 510066Sandreas.hansson@arm.com * The license below extends only to copyright in the software and shall 610066Sandreas.hansson@arm.com * not be construed as granting a license to any other intellectual 710066Sandreas.hansson@arm.com * property including but not limited to intellectual property relating 810066Sandreas.hansson@arm.com * to a hardware implementation of the functionality of the software 910066Sandreas.hansson@arm.com * licensed hereunder. You may use the software subject to the license 1010066Sandreas.hansson@arm.com * terms below provided that you ensure that this notice is replicated 1110066Sandreas.hansson@arm.com * unmodified and in its entirety in all distributions of the software, 1210066Sandreas.hansson@arm.com * modified or unmodified, in source code or in binary form. 1310066Sandreas.hansson@arm.com * 1410066Sandreas.hansson@arm.com * Copyright (c) 2007-2008 The Florida State University 1510066Sandreas.hansson@arm.com * All rights reserved. 1610066Sandreas.hansson@arm.com * 1710066Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 1810066Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 1910066Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 2010066Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 2110066Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 2210066Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 2310066Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 2410066Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 2510066Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 2610066Sandreas.hansson@arm.com * this software without specific prior written permission. 2710066Sandreas.hansson@arm.com * 2810066Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2910066Sandreas.hansson@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3010066Sandreas.hansson@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 3110066Sandreas.hansson@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3210066Sandreas.hansson@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3310066Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3410066Sandreas.hansson@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3510066Sandreas.hansson@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3610066Sandreas.hansson@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3710066Sandreas.hansson@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3810066Sandreas.hansson@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3910066Sandreas.hansson@arm.com * 4010066Sandreas.hansson@arm.com * Authors: Stephen Hines 4110066Sandreas.hansson@arm.com */ 4210066Sandreas.hansson@arm.com 4310066Sandreas.hansson@arm.com#ifndef __ARCH_ARM_TYPES_HH__ 4410066Sandreas.hansson@arm.com#define __ARCH_ARM_TYPES_HH__ 4510066Sandreas.hansson@arm.com 4610066Sandreas.hansson@arm.com#include "base/bitunion.hh" 4710066Sandreas.hansson@arm.com#include "base/types.hh" 4810066Sandreas.hansson@arm.com 4910066Sandreas.hansson@arm.comnamespace ArmISA 5010066Sandreas.hansson@arm.com{ 5110066Sandreas.hansson@arm.com typedef uint32_t MachInst; 5210066Sandreas.hansson@arm.com 5310296Sandreas.hansson@arm.com BitUnion64(ExtMachInst) 5410066Sandreas.hansson@arm.com Bitfield<63, 56> newItstate; 5510066Sandreas.hansson@arm.com // ITSTATE bits 5610066Sandreas.hansson@arm.com Bitfield<55, 48> itstate; 5710066Sandreas.hansson@arm.com Bitfield<55, 52> itstateCond; 5810066Sandreas.hansson@arm.com Bitfield<51, 48> itstateMask; 5910066Sandreas.hansson@arm.com 6010066Sandreas.hansson@arm.com // FPSCR fields 6110066Sandreas.hansson@arm.com Bitfield<41, 40> fpscrStride; 6210066Sandreas.hansson@arm.com Bitfield<39, 37> fpscrLen; 6310066Sandreas.hansson@arm.com 6410066Sandreas.hansson@arm.com // Bitfields to select mode. 6510066Sandreas.hansson@arm.com Bitfield<36> thumb; 6610066Sandreas.hansson@arm.com Bitfield<35> bigThumb; 6710066Sandreas.hansson@arm.com 6810066Sandreas.hansson@arm.com // Made up bitfields that make life easier. 6910066Sandreas.hansson@arm.com Bitfield<33> sevenAndFour; 7010066Sandreas.hansson@arm.com Bitfield<32> isMisc; 7110066Sandreas.hansson@arm.com 7210066Sandreas.hansson@arm.com uint32_t instBits; 7310066Sandreas.hansson@arm.com 7410066Sandreas.hansson@arm.com // All the different types of opcode fields. 7510066Sandreas.hansson@arm.com Bitfield<27, 25> encoding; 7610066Sandreas.hansson@arm.com Bitfield<25> useImm; 7710066Sandreas.hansson@arm.com Bitfield<24, 21> opcode; 7810066Sandreas.hansson@arm.com Bitfield<24, 20> mediaOpcode; 7910466Sandreas.hansson@arm.com Bitfield<24> opcode24; 8010466Sandreas.hansson@arm.com Bitfield<24, 23> opcode24_23; 8110066Sandreas.hansson@arm.com Bitfield<23, 20> opcode23_20; 8210066Sandreas.hansson@arm.com Bitfield<23, 21> opcode23_21; 8310066Sandreas.hansson@arm.com Bitfield<20> opcode20; 8410066Sandreas.hansson@arm.com Bitfield<22> opcode22; 8510066Sandreas.hansson@arm.com Bitfield<19, 16> opcode19_16; 8610066Sandreas.hansson@arm.com Bitfield<19> opcode19; 8710066Sandreas.hansson@arm.com Bitfield<18> opcode18; 8810066Sandreas.hansson@arm.com Bitfield<15, 12> opcode15_12; 8910066Sandreas.hansson@arm.com Bitfield<15> opcode15; 9010066Sandreas.hansson@arm.com Bitfield<7, 4> miscOpcode; 9110066Sandreas.hansson@arm.com Bitfield<7,5> opc2; 9210066Sandreas.hansson@arm.com Bitfield<7> opcode7; 9310066Sandreas.hansson@arm.com Bitfield<6> opcode6; 9410066Sandreas.hansson@arm.com Bitfield<4> opcode4; 9510296Sandreas.hansson@arm.com 9610296Sandreas.hansson@arm.com Bitfield<31, 28> condCode; 9710066Sandreas.hansson@arm.com Bitfield<20> sField; 9810066Sandreas.hansson@arm.com Bitfield<19, 16> rn; 9910066Sandreas.hansson@arm.com Bitfield<15, 12> rd; 10010066Sandreas.hansson@arm.com Bitfield<15, 12> rt; 10110066Sandreas.hansson@arm.com Bitfield<11, 7> shiftSize; 10210066Sandreas.hansson@arm.com Bitfield<6, 5> shift; 10310066Sandreas.hansson@arm.com Bitfield<3, 0> rm; 10410066Sandreas.hansson@arm.com 10510066Sandreas.hansson@arm.com Bitfield<11, 8> rs; 10610066Sandreas.hansson@arm.com 10710066Sandreas.hansson@arm.com SubBitUnion(puswl, 24, 20) 10810066Sandreas.hansson@arm.com Bitfield<24> prepost; 10910066Sandreas.hansson@arm.com Bitfield<23> up; 11010066Sandreas.hansson@arm.com Bitfield<22> psruser; 11110066Sandreas.hansson@arm.com Bitfield<21> writeback; 11210066Sandreas.hansson@arm.com Bitfield<20> loadOp; 11310066Sandreas.hansson@arm.com EndSubBitUnion(puswl) 11410066Sandreas.hansson@arm.com 11510066Sandreas.hansson@arm.com Bitfield<24, 20> pubwl; 11610066Sandreas.hansson@arm.com 11710066Sandreas.hansson@arm.com Bitfield<7, 0> imm; 11810066Sandreas.hansson@arm.com 11910066Sandreas.hansson@arm.com Bitfield<11, 8> rotate; 12010913Sandreas.sandberg@arm.com 12110913Sandreas.sandberg@arm.com Bitfield<11, 0> immed11_0; 12210066Sandreas.hansson@arm.com Bitfield<7, 0> immed7_0; 12310066Sandreas.hansson@arm.com 12410066Sandreas.hansson@arm.com Bitfield<11, 8> immedHi11_8; 12510066Sandreas.hansson@arm.com Bitfield<3, 0> immedLo3_0; 12610066Sandreas.hansson@arm.com 12710066Sandreas.hansson@arm.com Bitfield<15, 0> regList; 12810066Sandreas.hansson@arm.com 12910066Sandreas.hansson@arm.com Bitfield<23, 0> offset; 13010066Sandreas.hansson@arm.com 13110066Sandreas.hansson@arm.com Bitfield<23, 0> immed23_0; 13210066Sandreas.hansson@arm.com 13310066Sandreas.hansson@arm.com Bitfield<11, 8> cpNum; 13410066Sandreas.hansson@arm.com Bitfield<18, 16> fn; 13510066Sandreas.hansson@arm.com Bitfield<14, 12> fd; 13610066Sandreas.hansson@arm.com Bitfield<3> fpRegImm; 13710066Sandreas.hansson@arm.com Bitfield<3, 0> fm; 13810066Sandreas.hansson@arm.com Bitfield<2, 0> fpImm; 13910066Sandreas.hansson@arm.com Bitfield<24, 20> punwl; 14010066Sandreas.hansson@arm.com 14110066Sandreas.hansson@arm.com Bitfield<7, 0> m5Func; 14210066Sandreas.hansson@arm.com 14310066Sandreas.hansson@arm.com // 16 bit thumb bitfields 14410066Sandreas.hansson@arm.com Bitfield<15, 13> topcode15_13; 14510066Sandreas.hansson@arm.com Bitfield<13, 11> topcode13_11; 14610713Sandreas.hansson@arm.com Bitfield<12, 11> topcode12_11; 14710066Sandreas.hansson@arm.com Bitfield<12, 10> topcode12_10; 14810066Sandreas.hansson@arm.com Bitfield<11, 9> topcode11_9; 14910066Sandreas.hansson@arm.com Bitfield<11, 8> topcode11_8; 15010066Sandreas.hansson@arm.com Bitfield<10, 9> topcode10_9; 15110066Sandreas.hansson@arm.com Bitfield<10, 8> topcode10_8; 15210066Sandreas.hansson@arm.com Bitfield<9, 6> topcode9_6; 15310066Sandreas.hansson@arm.com Bitfield<7> topcode7; 15410066Sandreas.hansson@arm.com Bitfield<7, 6> topcode7_6; 15510066Sandreas.hansson@arm.com Bitfield<7, 5> topcode7_5; 15610066Sandreas.hansson@arm.com Bitfield<7, 4> topcode7_4; 15710066Sandreas.hansson@arm.com Bitfield<3, 0> topcode3_0; 15810066Sandreas.hansson@arm.com 15910066Sandreas.hansson@arm.com // 32 bit thumb bitfields 16010066Sandreas.hansson@arm.com Bitfield<28, 27> htopcode12_11; 16110066Sandreas.hansson@arm.com Bitfield<26, 25> htopcode10_9; 16210066Sandreas.hansson@arm.com Bitfield<25> htopcode9; 16310066Sandreas.hansson@arm.com Bitfield<25, 24> htopcode9_8; 16410066Sandreas.hansson@arm.com Bitfield<25, 21> htopcode9_5; 16510066Sandreas.hansson@arm.com Bitfield<25, 20> htopcode9_4; 16610066Sandreas.hansson@arm.com Bitfield<24> htopcode8; 16710066Sandreas.hansson@arm.com Bitfield<24, 23> htopcode8_7; 16810066Sandreas.hansson@arm.com Bitfield<24, 22> htopcode8_6; 16910066Sandreas.hansson@arm.com Bitfield<24, 21> htopcode8_5; 17010066Sandreas.hansson@arm.com Bitfield<23> htopcode7; 17110066Sandreas.hansson@arm.com Bitfield<23, 21> htopcode7_5; 17210066Sandreas.hansson@arm.com Bitfield<22> htopcode6; 17310066Sandreas.hansson@arm.com Bitfield<22, 21> htopcode6_5; 17410066Sandreas.hansson@arm.com Bitfield<21, 20> htopcode5_4; 17510066Sandreas.hansson@arm.com Bitfield<20> htopcode4; 17610066Sandreas.hansson@arm.com 17710066Sandreas.hansson@arm.com Bitfield<19, 16> htrn; 17810066Sandreas.hansson@arm.com Bitfield<20> hts; 17910066Sandreas.hansson@arm.com 18010066Sandreas.hansson@arm.com Bitfield<15> ltopcode15; 18110066Sandreas.hansson@arm.com Bitfield<11, 8> ltopcode11_8; 18210066Sandreas.hansson@arm.com Bitfield<7, 6> ltopcode7_6; 18310066Sandreas.hansson@arm.com Bitfield<7, 4> ltopcode7_4; 18410066Sandreas.hansson@arm.com Bitfield<4> ltopcode4; 18510066Sandreas.hansson@arm.com 18610066Sandreas.hansson@arm.com Bitfield<11, 8> ltrd; 18710066Sandreas.hansson@arm.com Bitfield<11, 8> ltcoproc; 18810066Sandreas.hansson@arm.com EndBitUnion(ExtMachInst) 18910066Sandreas.hansson@arm.com 19010066Sandreas.hansson@arm.com // Shift types for ARM instructions 19110066Sandreas.hansson@arm.com enum ArmShiftType { 19210066Sandreas.hansson@arm.com LSL = 0, 19310066Sandreas.hansson@arm.com LSR, 19410066Sandreas.hansson@arm.com ASR, 19510066Sandreas.hansson@arm.com ROR 19610066Sandreas.hansson@arm.com }; 19710066Sandreas.hansson@arm.com 19810066Sandreas.hansson@arm.com typedef uint64_t LargestRead; 19910066Sandreas.hansson@arm.com // Need to use 64 bits to make sure that read requests get handled properly 20010066Sandreas.hansson@arm.com 20110066Sandreas.hansson@arm.com typedef int RegContextParam; 20210066Sandreas.hansson@arm.com typedef int RegContextVal; 20310066Sandreas.hansson@arm.com 20410066Sandreas.hansson@arm.com //used in FP convert & round function 20510066Sandreas.hansson@arm.com enum ConvertType{ 20610066Sandreas.hansson@arm.com SINGLE_TO_DOUBLE, 20710066Sandreas.hansson@arm.com SINGLE_TO_WORD, 20810066Sandreas.hansson@arm.com SINGLE_TO_LONG, 20910066Sandreas.hansson@arm.com 21010066Sandreas.hansson@arm.com DOUBLE_TO_SINGLE, 21110066Sandreas.hansson@arm.com DOUBLE_TO_WORD, 21210066Sandreas.hansson@arm.com DOUBLE_TO_LONG, 21310066Sandreas.hansson@arm.com 21410066Sandreas.hansson@arm.com LONG_TO_SINGLE, 21510066Sandreas.hansson@arm.com LONG_TO_DOUBLE, 21610066Sandreas.hansson@arm.com LONG_TO_WORD, 21710066Sandreas.hansson@arm.com LONG_TO_PS, 21810066Sandreas.hansson@arm.com 21910066Sandreas.hansson@arm.com WORD_TO_SINGLE, 22010066Sandreas.hansson@arm.com WORD_TO_DOUBLE, 22110066Sandreas.hansson@arm.com WORD_TO_LONG, 22210066Sandreas.hansson@arm.com WORD_TO_PS, 22310066Sandreas.hansson@arm.com 22410066Sandreas.hansson@arm.com PL_TO_SINGLE, 22510066Sandreas.hansson@arm.com PU_TO_SINGLE 22610066Sandreas.hansson@arm.com }; 22710066Sandreas.hansson@arm.com 22810066Sandreas.hansson@arm.com //used in FP convert & round function 22910066Sandreas.hansson@arm.com enum RoundMode{ 23010066Sandreas.hansson@arm.com RND_ZERO, 23110066Sandreas.hansson@arm.com RND_DOWN, 23210066Sandreas.hansson@arm.com RND_UP, 23310066Sandreas.hansson@arm.com RND_NEAREST 23410066Sandreas.hansson@arm.com }; 23510066Sandreas.hansson@arm.com 23610066Sandreas.hansson@arm.com enum OperatingMode { 23710066Sandreas.hansson@arm.com MODE_USER = 16, 23810066Sandreas.hansson@arm.com MODE_FIQ = 17, 23910066Sandreas.hansson@arm.com MODE_IRQ = 18, 24010066Sandreas.hansson@arm.com MODE_SVC = 19, 24110066Sandreas.hansson@arm.com MODE_MON = 22, 24210066Sandreas.hansson@arm.com MODE_ABORT = 23, 24310713Sandreas.hansson@arm.com MODE_UNDEFINED = 27, 24410066Sandreas.hansson@arm.com MODE_SYSTEM = 31, 24510066Sandreas.hansson@arm.com MODE_MAXMODE = MODE_SYSTEM 24610066Sandreas.hansson@arm.com }; 24710066Sandreas.hansson@arm.com 24810066Sandreas.hansson@arm.com static inline bool 24910066Sandreas.hansson@arm.com badMode(OperatingMode mode) 25010066Sandreas.hansson@arm.com { 25110066Sandreas.hansson@arm.com switch (mode) { 25210066Sandreas.hansson@arm.com case MODE_USER: 25310066Sandreas.hansson@arm.com case MODE_FIQ: 25410066Sandreas.hansson@arm.com case MODE_IRQ: 25510066Sandreas.hansson@arm.com case MODE_SVC: 25610066Sandreas.hansson@arm.com case MODE_MON: 25710066Sandreas.hansson@arm.com case MODE_ABORT: 25810066Sandreas.hansson@arm.com case MODE_UNDEFINED: 25910066Sandreas.hansson@arm.com case MODE_SYSTEM: 26010066Sandreas.hansson@arm.com return false; 26110066Sandreas.hansson@arm.com default: 26210066Sandreas.hansson@arm.com return true; 26310066Sandreas.hansson@arm.com } 26410066Sandreas.hansson@arm.com } 26510066Sandreas.hansson@arm.com 26610066Sandreas.hansson@arm.com struct CoreSpecific { 26710721SMarco.Balboni@ARM.com // Empty for now on the ARM 26810721SMarco.Balboni@ARM.com }; 26910721SMarco.Balboni@ARM.com 27010721SMarco.Balboni@ARM.com} // namespace ArmISA 27110694SMarco.Balboni@ARM.com 27210066Sandreas.hansson@arm.com#endif 27310066Sandreas.hansson@arm.com