types.hh revision 7097:c017bb97ba27
110298Salexandru.dutu@amd.com/*
210298Salexandru.dutu@amd.com * Copyright (c) 2010 ARM Limited
310298Salexandru.dutu@amd.com * All rights reserved
410298Salexandru.dutu@amd.com *
510298Salexandru.dutu@amd.com * The license below extends only to copyright in the software and shall
610298Salexandru.dutu@amd.com * not be construed as granting a license to any other intellectual
710298Salexandru.dutu@amd.com * property including but not limited to intellectual property relating
810298Salexandru.dutu@amd.com * to a hardware implementation of the functionality of the software
910298Salexandru.dutu@amd.com * licensed hereunder.  You may use the software subject to the license
1010298Salexandru.dutu@amd.com * terms below provided that you ensure that this notice is replicated
1110298Salexandru.dutu@amd.com * unmodified and in its entirety in all distributions of the software,
1210298Salexandru.dutu@amd.com * modified or unmodified, in source code or in binary form.
1310298Salexandru.dutu@amd.com *
1410298Salexandru.dutu@amd.com * Copyright (c) 2007-2008 The Florida State University
1510298Salexandru.dutu@amd.com * All rights reserved.
1610298Salexandru.dutu@amd.com *
1710298Salexandru.dutu@amd.com * Redistribution and use in source and binary forms, with or without
1810298Salexandru.dutu@amd.com * modification, are permitted provided that the following conditions are
1910298Salexandru.dutu@amd.com * met: redistributions of source code must retain the above copyright
2010298Salexandru.dutu@amd.com * notice, this list of conditions and the following disclaimer;
2110298Salexandru.dutu@amd.com * redistributions in binary form must reproduce the above copyright
2210298Salexandru.dutu@amd.com * notice, this list of conditions and the following disclaimer in the
2310298Salexandru.dutu@amd.com * documentation and/or other materials provided with the distribution;
2410298Salexandru.dutu@amd.com * neither the name of the copyright holders nor the names of its
2510298Salexandru.dutu@amd.com * contributors may be used to endorse or promote products derived from
2610298Salexandru.dutu@amd.com * this software without specific prior written permission.
2710298Salexandru.dutu@amd.com *
2810298Salexandru.dutu@amd.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2910298Salexandru.dutu@amd.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
3010298Salexandru.dutu@amd.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
3110298Salexandru.dutu@amd.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3210298Salexandru.dutu@amd.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3310298Salexandru.dutu@amd.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
3410298Salexandru.dutu@amd.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
3510298Salexandru.dutu@amd.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3610298Salexandru.dutu@amd.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3710298Salexandru.dutu@amd.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3810298Salexandru.dutu@amd.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3910298Salexandru.dutu@amd.com *
4010298Salexandru.dutu@amd.com * Authors: Stephen Hines
4110298Salexandru.dutu@amd.com */
4210298Salexandru.dutu@amd.com
4310298Salexandru.dutu@amd.com#ifndef __ARCH_ARM_TYPES_HH__
4411800Sbrandon.potter@amd.com#define __ARCH_ARM_TYPES_HH__
4511800Sbrandon.potter@amd.com
4610298Salexandru.dutu@amd.com#include "base/bitunion.hh"
4710298Salexandru.dutu@amd.com#include "base/types.hh"
4810298Salexandru.dutu@amd.com
4910298Salexandru.dutu@amd.comnamespace ArmISA
5010298Salexandru.dutu@amd.com{
5110298Salexandru.dutu@amd.com    typedef uint32_t MachInst;
5210298Salexandru.dutu@amd.com
5310298Salexandru.dutu@amd.com    BitUnion64(ExtMachInst)
5410298Salexandru.dutu@amd.com        // Bitfields to select mode.
5510298Salexandru.dutu@amd.com        Bitfield<36>     thumb;
5610298Salexandru.dutu@amd.com        Bitfield<35>     bigThumb;
5710298Salexandru.dutu@amd.com
5810298Salexandru.dutu@amd.com        // Made up bitfields that make life easier.
5910298Salexandru.dutu@amd.com        Bitfield<33>     sevenAndFour;
6010298Salexandru.dutu@amd.com        Bitfield<32>     isMisc;
6110298Salexandru.dutu@amd.com
6210298Salexandru.dutu@amd.com        // All the different types of opcode fields.
6310298Salexandru.dutu@amd.com        Bitfield<27, 25> encoding;
6410298Salexandru.dutu@amd.com        Bitfield<25>     useImm;
6510298Salexandru.dutu@amd.com        Bitfield<24, 21> opcode;
6610298Salexandru.dutu@amd.com        Bitfield<24, 20> mediaOpcode;
6710298Salexandru.dutu@amd.com        Bitfield<24>     opcode24;
6810298Salexandru.dutu@amd.com        Bitfield<23, 20> opcode23_20;
6910298Salexandru.dutu@amd.com        Bitfield<23, 21> opcode23_21;
7010298Salexandru.dutu@amd.com        Bitfield<20>     opcode20;
7110298Salexandru.dutu@amd.com        Bitfield<22>     opcode22;
7210298Salexandru.dutu@amd.com        Bitfield<19>     opcode19;
7310298Salexandru.dutu@amd.com        Bitfield<18>     opcode18;
7410298Salexandru.dutu@amd.com        Bitfield<15, 12> opcode15_12;
7510298Salexandru.dutu@amd.com        Bitfield<15>     opcode15;
7610298Salexandru.dutu@amd.com        Bitfield<7,  4>  miscOpcode;
7710298Salexandru.dutu@amd.com        Bitfield<7,5>    opc2;
7810298Salexandru.dutu@amd.com        Bitfield<7>      opcode7;
7910298Salexandru.dutu@amd.com        Bitfield<4>      opcode4;
8010298Salexandru.dutu@amd.com
8110298Salexandru.dutu@amd.com        Bitfield<31, 28> condCode;
8210298Salexandru.dutu@amd.com        Bitfield<20>     sField;
8310298Salexandru.dutu@amd.com        Bitfield<19, 16> rn;
8410298Salexandru.dutu@amd.com        Bitfield<15, 12> rd;
8510298Salexandru.dutu@amd.com        Bitfield<11, 7>  shiftSize;
8610298Salexandru.dutu@amd.com        Bitfield<6,  5>  shift;
8710298Salexandru.dutu@amd.com        Bitfield<3,  0>  rm;
8810298Salexandru.dutu@amd.com
8910298Salexandru.dutu@amd.com        Bitfield<11, 8>  rs;
9010298Salexandru.dutu@amd.com
9110298Salexandru.dutu@amd.com        SubBitUnion(puswl, 24, 20)
9210298Salexandru.dutu@amd.com            Bitfield<24> prepost;
9310298Salexandru.dutu@amd.com            Bitfield<23> up;
9410298Salexandru.dutu@amd.com            Bitfield<22> psruser;
9510298Salexandru.dutu@amd.com            Bitfield<21> writeback;
9610298Salexandru.dutu@amd.com            Bitfield<20> loadOp;
9710298Salexandru.dutu@amd.com        EndSubBitUnion(puswl)
9810298Salexandru.dutu@amd.com
9910298Salexandru.dutu@amd.com        Bitfield<24, 20> pubwl;
10010298Salexandru.dutu@amd.com
10110298Salexandru.dutu@amd.com        Bitfield<7, 0> imm;
10210298Salexandru.dutu@amd.com
10312446Sgabeblack@google.com        Bitfield<11, 8>  rotate;
10410298Salexandru.dutu@amd.com
10510298Salexandru.dutu@amd.com        Bitfield<11, 0>  immed11_0;
10610298Salexandru.dutu@amd.com        Bitfield<7,  0>  immed7_0;
10710298Salexandru.dutu@amd.com
10810298Salexandru.dutu@amd.com        Bitfield<11, 8>  immedHi11_8;
10910298Salexandru.dutu@amd.com        Bitfield<3,  0>  immedLo3_0;
11010298Salexandru.dutu@amd.com
11110298Salexandru.dutu@amd.com        Bitfield<15, 0>  regList;
11210298Salexandru.dutu@amd.com
11310298Salexandru.dutu@amd.com        Bitfield<23, 0>  offset;
11410298Salexandru.dutu@amd.com
11510298Salexandru.dutu@amd.com        Bitfield<23, 0>  immed23_0;
11610298Salexandru.dutu@amd.com
11710298Salexandru.dutu@amd.com        Bitfield<11, 8>  cpNum;
11810298Salexandru.dutu@amd.com        Bitfield<18, 16> fn;
11910298Salexandru.dutu@amd.com        Bitfield<14, 12> fd;
12010298Salexandru.dutu@amd.com        Bitfield<3>      fpRegImm;
12110298Salexandru.dutu@amd.com        Bitfield<3,  0>  fm;
12210298Salexandru.dutu@amd.com        Bitfield<2,  0>  fpImm;
12310298Salexandru.dutu@amd.com        Bitfield<24, 20> punwl;
12410298Salexandru.dutu@amd.com
12510298Salexandru.dutu@amd.com        Bitfield<7,  0>  m5Func;
12610298Salexandru.dutu@amd.com    EndBitUnion(ExtMachInst)
12710298Salexandru.dutu@amd.com
12810298Salexandru.dutu@amd.com    // Shift types for ARM instructions
12910298Salexandru.dutu@amd.com    enum ArmShiftType {
13010298Salexandru.dutu@amd.com        LSL = 0,
13110298Salexandru.dutu@amd.com        LSR,
13210298Salexandru.dutu@amd.com        ASR,
13310298Salexandru.dutu@amd.com        ROR
13410298Salexandru.dutu@amd.com    };
13510298Salexandru.dutu@amd.com
13610298Salexandru.dutu@amd.com    typedef uint64_t LargestRead;
13710298Salexandru.dutu@amd.com    // Need to use 64 bits to make sure that read requests get handled properly
13812446Sgabeblack@google.com
13910298Salexandru.dutu@amd.com    typedef int RegContextParam;
14010298Salexandru.dutu@amd.com    typedef int RegContextVal;
14110556Salexandru.dutu@amd.com
14212432Sgabeblack@google.com    //used in FP convert & round function
14310298Salexandru.dutu@amd.com    enum ConvertType{
14410298Salexandru.dutu@amd.com        SINGLE_TO_DOUBLE,
14511175Sandreas.hansson@arm.com        SINGLE_TO_WORD,
14610298Salexandru.dutu@amd.com        SINGLE_TO_LONG,
14710558Salexandru.dutu@amd.com
14811175Sandreas.hansson@arm.com        DOUBLE_TO_SINGLE,
14911175Sandreas.hansson@arm.com        DOUBLE_TO_WORD,
15011175Sandreas.hansson@arm.com        DOUBLE_TO_LONG,
15111168Sandreas.hansson@arm.com
15211168Sandreas.hansson@arm.com        LONG_TO_SINGLE,
15310298Salexandru.dutu@amd.com        LONG_TO_DOUBLE,
15410298Salexandru.dutu@amd.com        LONG_TO_WORD,
155        LONG_TO_PS,
156
157        WORD_TO_SINGLE,
158        WORD_TO_DOUBLE,
159        WORD_TO_LONG,
160        WORD_TO_PS,
161
162        PL_TO_SINGLE,
163        PU_TO_SINGLE
164    };
165
166    //used in FP convert & round function
167    enum RoundMode{
168        RND_ZERO,
169        RND_DOWN,
170        RND_UP,
171        RND_NEAREST
172    };
173
174    enum OperatingMode {
175        MODE_USER = 16,
176        MODE_FIQ = 17,
177        MODE_IRQ = 18,
178        MODE_SVC = 19,
179        MODE_MON = 22,
180        MODE_ABORT = 23,
181        MODE_UNDEFINED = 27,
182        MODE_SYSTEM = 31
183    };
184
185    struct CoreSpecific {
186        // Empty for now on the ARM
187    };
188
189} // namespace ArmISA
190
191#endif
192