16717Sgblack@eecs.umich.edu/*
210337SAndrew.Bardsley@arm.com * Copyright (c) 2010-2014 ARM Limited
37310Sgblack@eecs.umich.edu * All rights reserved
47310Sgblack@eecs.umich.edu *
57310Sgblack@eecs.umich.edu * The license below extends only to copyright in the software and shall
67310Sgblack@eecs.umich.edu * not be construed as granting a license to any other intellectual
77310Sgblack@eecs.umich.edu * property including but not limited to intellectual property relating
87310Sgblack@eecs.umich.edu * to a hardware implementation of the functionality of the software
97310Sgblack@eecs.umich.edu * licensed hereunder.  You may use the software subject to the license
107310Sgblack@eecs.umich.edu * terms below provided that you ensure that this notice is replicated
117310Sgblack@eecs.umich.edu * unmodified and in its entirety in all distributions of the software,
127310Sgblack@eecs.umich.edu * modified or unmodified, in source code or in binary form.
137310Sgblack@eecs.umich.edu *
146717Sgblack@eecs.umich.edu * Copyright (c) 2009 The Regents of The University of Michigan
156717Sgblack@eecs.umich.edu * All rights reserved.
166717Sgblack@eecs.umich.edu *
176717Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
186717Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
196717Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
206717Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
216717Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
226717Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
236717Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
246717Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
256717Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
266717Sgblack@eecs.umich.edu * this software without specific prior written permission.
276717Sgblack@eecs.umich.edu *
286717Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
296717Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
306717Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
316717Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
326717Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
336717Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
346717Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
356717Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
366717Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
376717Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
386717Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
396717Sgblack@eecs.umich.edu *
406717Sgblack@eecs.umich.edu * Authors: Gabe Black
416717Sgblack@eecs.umich.edu */
426717Sgblack@eecs.umich.edu
438229Snate@binkert.org#include <cassert>
446717Sgblack@eecs.umich.edu
456717Sgblack@eecs.umich.edu#ifndef __ARCH_ARM_INTREGS_HH__
466717Sgblack@eecs.umich.edu#define __ARCH_ARM_INTREGS_HH__
476717Sgblack@eecs.umich.edu
487310Sgblack@eecs.umich.edu#include "arch/arm/types.hh"
497310Sgblack@eecs.umich.edu
506717Sgblack@eecs.umich.edunamespace ArmISA
516717Sgblack@eecs.umich.edu{
526717Sgblack@eecs.umich.edu
536717Sgblack@eecs.umich.eduenum IntRegIndex
546717Sgblack@eecs.umich.edu{
556717Sgblack@eecs.umich.edu    /* All the unique register indices. */
566717Sgblack@eecs.umich.edu    INTREG_R0,
576717Sgblack@eecs.umich.edu    INTREG_R1,
586717Sgblack@eecs.umich.edu    INTREG_R2,
596717Sgblack@eecs.umich.edu    INTREG_R3,
606717Sgblack@eecs.umich.edu    INTREG_R4,
616717Sgblack@eecs.umich.edu    INTREG_R5,
626717Sgblack@eecs.umich.edu    INTREG_R6,
636717Sgblack@eecs.umich.edu    INTREG_R7,
646717Sgblack@eecs.umich.edu    INTREG_R8,
656717Sgblack@eecs.umich.edu    INTREG_R9,
666717Sgblack@eecs.umich.edu    INTREG_R10,
676717Sgblack@eecs.umich.edu    INTREG_R11,
686717Sgblack@eecs.umich.edu    INTREG_R12,
696717Sgblack@eecs.umich.edu    INTREG_R13,
706717Sgblack@eecs.umich.edu    INTREG_SP = INTREG_R13,
716717Sgblack@eecs.umich.edu    INTREG_R14,
726717Sgblack@eecs.umich.edu    INTREG_LR = INTREG_R14,
736717Sgblack@eecs.umich.edu    INTREG_R15,
746717Sgblack@eecs.umich.edu    INTREG_PC = INTREG_R15,
756717Sgblack@eecs.umich.edu
766717Sgblack@eecs.umich.edu    INTREG_R13_SVC,
776717Sgblack@eecs.umich.edu    INTREG_SP_SVC = INTREG_R13_SVC,
786717Sgblack@eecs.umich.edu    INTREG_R14_SVC,
796717Sgblack@eecs.umich.edu    INTREG_LR_SVC = INTREG_R14_SVC,
806717Sgblack@eecs.umich.edu
816717Sgblack@eecs.umich.edu    INTREG_R13_MON,
826717Sgblack@eecs.umich.edu    INTREG_SP_MON = INTREG_R13_MON,
836717Sgblack@eecs.umich.edu    INTREG_R14_MON,
846717Sgblack@eecs.umich.edu    INTREG_LR_MON = INTREG_R14_MON,
856717Sgblack@eecs.umich.edu
8610037SARM gem5 Developers    INTREG_R13_HYP,
8710037SARM gem5 Developers    INTREG_SP_HYP = INTREG_R13_HYP,
8810037SARM gem5 Developers
896717Sgblack@eecs.umich.edu    INTREG_R13_ABT,
906717Sgblack@eecs.umich.edu    INTREG_SP_ABT = INTREG_R13_ABT,
916717Sgblack@eecs.umich.edu    INTREG_R14_ABT,
926717Sgblack@eecs.umich.edu    INTREG_LR_ABT = INTREG_R14_ABT,
936717Sgblack@eecs.umich.edu
946717Sgblack@eecs.umich.edu    INTREG_R13_UND,
956717Sgblack@eecs.umich.edu    INTREG_SP_UND = INTREG_R13_UND,
966717Sgblack@eecs.umich.edu    INTREG_R14_UND,
976717Sgblack@eecs.umich.edu    INTREG_LR_UND = INTREG_R14_UND,
986717Sgblack@eecs.umich.edu
996717Sgblack@eecs.umich.edu    INTREG_R13_IRQ,
1006717Sgblack@eecs.umich.edu    INTREG_SP_IRQ = INTREG_R13_IRQ,
1016717Sgblack@eecs.umich.edu    INTREG_R14_IRQ,
1026717Sgblack@eecs.umich.edu    INTREG_LR_IRQ = INTREG_R14_IRQ,
1036717Sgblack@eecs.umich.edu
1046717Sgblack@eecs.umich.edu    INTREG_R8_FIQ,
1056717Sgblack@eecs.umich.edu    INTREG_R9_FIQ,
1066717Sgblack@eecs.umich.edu    INTREG_R10_FIQ,
1076717Sgblack@eecs.umich.edu    INTREG_R11_FIQ,
1086717Sgblack@eecs.umich.edu    INTREG_R12_FIQ,
1096717Sgblack@eecs.umich.edu    INTREG_R13_FIQ,
1106717Sgblack@eecs.umich.edu    INTREG_SP_FIQ = INTREG_R13_FIQ,
1116717Sgblack@eecs.umich.edu    INTREG_R14_FIQ,
1126717Sgblack@eecs.umich.edu    INTREG_LR_FIQ = INTREG_R14_FIQ,
1136717Sgblack@eecs.umich.edu
11410037SARM gem5 Developers    INTREG_ZERO,
1156717Sgblack@eecs.umich.edu    INTREG_UREG0,
1168140SMatt.Horsnell@arm.com    INTREG_UREG1,
1178140SMatt.Horsnell@arm.com    INTREG_UREG2,
11810037SARM gem5 Developers    INTREG_DUMMY, // Dummy reg used to throw away int reg results
11910037SARM gem5 Developers
12010037SARM gem5 Developers    INTREG_SP0,
12110037SARM gem5 Developers    INTREG_SP1,
12210037SARM gem5 Developers    INTREG_SP2,
12310037SARM gem5 Developers    INTREG_SP3,
1246717Sgblack@eecs.umich.edu
1256717Sgblack@eecs.umich.edu    NUM_INTREGS,
12610037SARM gem5 Developers    NUM_ARCH_INTREGS = 32,
12710037SARM gem5 Developers
12810037SARM gem5 Developers    /* AArch64 registers */
12910037SARM gem5 Developers    INTREG_X0 = 0,
13010037SARM gem5 Developers    INTREG_X1,
13110037SARM gem5 Developers    INTREG_X2,
13210037SARM gem5 Developers    INTREG_X3,
13310037SARM gem5 Developers    INTREG_X4,
13410037SARM gem5 Developers    INTREG_X5,
13510037SARM gem5 Developers    INTREG_X6,
13610037SARM gem5 Developers    INTREG_X7,
13710037SARM gem5 Developers    INTREG_X8,
13810037SARM gem5 Developers    INTREG_X9,
13910037SARM gem5 Developers    INTREG_X10,
14010037SARM gem5 Developers    INTREG_X11,
14110037SARM gem5 Developers    INTREG_X12,
14210037SARM gem5 Developers    INTREG_X13,
14310037SARM gem5 Developers    INTREG_X14,
14410037SARM gem5 Developers    INTREG_X15,
14510037SARM gem5 Developers    INTREG_X16,
14610037SARM gem5 Developers    INTREG_X17,
14710037SARM gem5 Developers    INTREG_X18,
14810037SARM gem5 Developers    INTREG_X19,
14910037SARM gem5 Developers    INTREG_X20,
15010037SARM gem5 Developers    INTREG_X21,
15110037SARM gem5 Developers    INTREG_X22,
15210037SARM gem5 Developers    INTREG_X23,
15310037SARM gem5 Developers    INTREG_X24,
15410037SARM gem5 Developers    INTREG_X25,
15510037SARM gem5 Developers    INTREG_X26,
15610037SARM gem5 Developers    INTREG_X27,
15710037SARM gem5 Developers    INTREG_X28,
15810037SARM gem5 Developers    INTREG_X29,
15910037SARM gem5 Developers    INTREG_X30,
16010037SARM gem5 Developers    INTREG_X31,
16110037SARM gem5 Developers
16210037SARM gem5 Developers    INTREG_SPX = NUM_INTREGS,
1636717Sgblack@eecs.umich.edu
1646717Sgblack@eecs.umich.edu    /* All the aliased indexes. */
16510037SARM gem5 Developers
1666717Sgblack@eecs.umich.edu    /* USR mode */
1676717Sgblack@eecs.umich.edu    INTREG_R0_USR = INTREG_R0,
1686717Sgblack@eecs.umich.edu    INTREG_R1_USR = INTREG_R1,
1696717Sgblack@eecs.umich.edu    INTREG_R2_USR = INTREG_R2,
1706717Sgblack@eecs.umich.edu    INTREG_R3_USR = INTREG_R3,
1716717Sgblack@eecs.umich.edu    INTREG_R4_USR = INTREG_R4,
1726717Sgblack@eecs.umich.edu    INTREG_R5_USR = INTREG_R5,
1736717Sgblack@eecs.umich.edu    INTREG_R6_USR = INTREG_R6,
1746717Sgblack@eecs.umich.edu    INTREG_R7_USR = INTREG_R7,
1756717Sgblack@eecs.umich.edu    INTREG_R8_USR = INTREG_R8,
1766717Sgblack@eecs.umich.edu    INTREG_R9_USR = INTREG_R9,
1776717Sgblack@eecs.umich.edu    INTREG_R10_USR = INTREG_R10,
1786717Sgblack@eecs.umich.edu    INTREG_R11_USR = INTREG_R11,
1796717Sgblack@eecs.umich.edu    INTREG_R12_USR = INTREG_R12,
1806717Sgblack@eecs.umich.edu    INTREG_R13_USR = INTREG_R13,
1816717Sgblack@eecs.umich.edu    INTREG_SP_USR = INTREG_SP,
1826717Sgblack@eecs.umich.edu    INTREG_R14_USR = INTREG_R14,
1836717Sgblack@eecs.umich.edu    INTREG_LR_USR = INTREG_LR,
1846717Sgblack@eecs.umich.edu    INTREG_R15_USR = INTREG_R15,
1856717Sgblack@eecs.umich.edu    INTREG_PC_USR = INTREG_PC,
1866717Sgblack@eecs.umich.edu
1876717Sgblack@eecs.umich.edu    /* SVC mode */
1886717Sgblack@eecs.umich.edu    INTREG_R0_SVC = INTREG_R0,
1896717Sgblack@eecs.umich.edu    INTREG_R1_SVC = INTREG_R1,
1906717Sgblack@eecs.umich.edu    INTREG_R2_SVC = INTREG_R2,
1916717Sgblack@eecs.umich.edu    INTREG_R3_SVC = INTREG_R3,
1926717Sgblack@eecs.umich.edu    INTREG_R4_SVC = INTREG_R4,
1936717Sgblack@eecs.umich.edu    INTREG_R5_SVC = INTREG_R5,
1946717Sgblack@eecs.umich.edu    INTREG_R6_SVC = INTREG_R6,
1956717Sgblack@eecs.umich.edu    INTREG_R7_SVC = INTREG_R7,
1966717Sgblack@eecs.umich.edu    INTREG_R8_SVC = INTREG_R8,
1976717Sgblack@eecs.umich.edu    INTREG_R9_SVC = INTREG_R9,
1986717Sgblack@eecs.umich.edu    INTREG_R10_SVC = INTREG_R10,
1996717Sgblack@eecs.umich.edu    INTREG_R11_SVC = INTREG_R11,
2006717Sgblack@eecs.umich.edu    INTREG_R12_SVC = INTREG_R12,
2016717Sgblack@eecs.umich.edu    INTREG_PC_SVC = INTREG_PC,
2026734Sgblack@eecs.umich.edu    INTREG_R15_SVC = INTREG_R15,
2036717Sgblack@eecs.umich.edu
2046717Sgblack@eecs.umich.edu    /* MON mode */
2056717Sgblack@eecs.umich.edu    INTREG_R0_MON = INTREG_R0,
2066717Sgblack@eecs.umich.edu    INTREG_R1_MON = INTREG_R1,
2076717Sgblack@eecs.umich.edu    INTREG_R2_MON = INTREG_R2,
2086717Sgblack@eecs.umich.edu    INTREG_R3_MON = INTREG_R3,
2096717Sgblack@eecs.umich.edu    INTREG_R4_MON = INTREG_R4,
2106717Sgblack@eecs.umich.edu    INTREG_R5_MON = INTREG_R5,
2116717Sgblack@eecs.umich.edu    INTREG_R6_MON = INTREG_R6,
2126717Sgblack@eecs.umich.edu    INTREG_R7_MON = INTREG_R7,
2136717Sgblack@eecs.umich.edu    INTREG_R8_MON = INTREG_R8,
2146717Sgblack@eecs.umich.edu    INTREG_R9_MON = INTREG_R9,
2156717Sgblack@eecs.umich.edu    INTREG_R10_MON = INTREG_R10,
2166717Sgblack@eecs.umich.edu    INTREG_R11_MON = INTREG_R11,
2176717Sgblack@eecs.umich.edu    INTREG_R12_MON = INTREG_R12,
2186717Sgblack@eecs.umich.edu    INTREG_PC_MON = INTREG_PC,
2196734Sgblack@eecs.umich.edu    INTREG_R15_MON = INTREG_R15,
2206717Sgblack@eecs.umich.edu
2216717Sgblack@eecs.umich.edu    /* ABT mode */
2226717Sgblack@eecs.umich.edu    INTREG_R0_ABT = INTREG_R0,
2236717Sgblack@eecs.umich.edu    INTREG_R1_ABT = INTREG_R1,
2246717Sgblack@eecs.umich.edu    INTREG_R2_ABT = INTREG_R2,
2256717Sgblack@eecs.umich.edu    INTREG_R3_ABT = INTREG_R3,
2266717Sgblack@eecs.umich.edu    INTREG_R4_ABT = INTREG_R4,
2276717Sgblack@eecs.umich.edu    INTREG_R5_ABT = INTREG_R5,
2286717Sgblack@eecs.umich.edu    INTREG_R6_ABT = INTREG_R6,
2296717Sgblack@eecs.umich.edu    INTREG_R7_ABT = INTREG_R7,
2306717Sgblack@eecs.umich.edu    INTREG_R8_ABT = INTREG_R8,
2316717Sgblack@eecs.umich.edu    INTREG_R9_ABT = INTREG_R9,
2326717Sgblack@eecs.umich.edu    INTREG_R10_ABT = INTREG_R10,
2336717Sgblack@eecs.umich.edu    INTREG_R11_ABT = INTREG_R11,
2346717Sgblack@eecs.umich.edu    INTREG_R12_ABT = INTREG_R12,
2356717Sgblack@eecs.umich.edu    INTREG_PC_ABT = INTREG_PC,
2366734Sgblack@eecs.umich.edu    INTREG_R15_ABT = INTREG_R15,
2376717Sgblack@eecs.umich.edu
23810037SARM gem5 Developers    /* HYP mode */
23910037SARM gem5 Developers    INTREG_R0_HYP = INTREG_R0,
24010037SARM gem5 Developers    INTREG_R1_HYP = INTREG_R1,
24110037SARM gem5 Developers    INTREG_R2_HYP = INTREG_R2,
24210037SARM gem5 Developers    INTREG_R3_HYP = INTREG_R3,
24310037SARM gem5 Developers    INTREG_R4_HYP = INTREG_R4,
24410037SARM gem5 Developers    INTREG_R5_HYP = INTREG_R5,
24510037SARM gem5 Developers    INTREG_R6_HYP = INTREG_R6,
24610037SARM gem5 Developers    INTREG_R7_HYP = INTREG_R7,
24710037SARM gem5 Developers    INTREG_R8_HYP = INTREG_R8,
24810037SARM gem5 Developers    INTREG_R9_HYP = INTREG_R9,
24910037SARM gem5 Developers    INTREG_R10_HYP = INTREG_R10,
25010037SARM gem5 Developers    INTREG_R11_HYP = INTREG_R11,
25110037SARM gem5 Developers    INTREG_R12_HYP = INTREG_R12,
25210037SARM gem5 Developers    INTREG_LR_HYP = INTREG_LR,
25310037SARM gem5 Developers    INTREG_R14_HYP = INTREG_R14,
25410037SARM gem5 Developers    INTREG_PC_HYP = INTREG_PC,
25510037SARM gem5 Developers    INTREG_R15_HYP = INTREG_R15,
25610037SARM gem5 Developers
2576717Sgblack@eecs.umich.edu    /* UND mode */
2586717Sgblack@eecs.umich.edu    INTREG_R0_UND = INTREG_R0,
2596717Sgblack@eecs.umich.edu    INTREG_R1_UND = INTREG_R1,
2606717Sgblack@eecs.umich.edu    INTREG_R2_UND = INTREG_R2,
2616717Sgblack@eecs.umich.edu    INTREG_R3_UND = INTREG_R3,
2626717Sgblack@eecs.umich.edu    INTREG_R4_UND = INTREG_R4,
2636717Sgblack@eecs.umich.edu    INTREG_R5_UND = INTREG_R5,
2646717Sgblack@eecs.umich.edu    INTREG_R6_UND = INTREG_R6,
2656717Sgblack@eecs.umich.edu    INTREG_R7_UND = INTREG_R7,
2666717Sgblack@eecs.umich.edu    INTREG_R8_UND = INTREG_R8,
2676717Sgblack@eecs.umich.edu    INTREG_R9_UND = INTREG_R9,
2686717Sgblack@eecs.umich.edu    INTREG_R10_UND = INTREG_R10,
2696717Sgblack@eecs.umich.edu    INTREG_R11_UND = INTREG_R11,
2706717Sgblack@eecs.umich.edu    INTREG_R12_UND = INTREG_R12,
2716717Sgblack@eecs.umich.edu    INTREG_PC_UND = INTREG_PC,
2726734Sgblack@eecs.umich.edu    INTREG_R15_UND = INTREG_R15,
2736717Sgblack@eecs.umich.edu
2746717Sgblack@eecs.umich.edu    /* IRQ mode */
2756717Sgblack@eecs.umich.edu    INTREG_R0_IRQ = INTREG_R0,
2766717Sgblack@eecs.umich.edu    INTREG_R1_IRQ = INTREG_R1,
2776717Sgblack@eecs.umich.edu    INTREG_R2_IRQ = INTREG_R2,
2786717Sgblack@eecs.umich.edu    INTREG_R3_IRQ = INTREG_R3,
2796717Sgblack@eecs.umich.edu    INTREG_R4_IRQ = INTREG_R4,
2806717Sgblack@eecs.umich.edu    INTREG_R5_IRQ = INTREG_R5,
2816717Sgblack@eecs.umich.edu    INTREG_R6_IRQ = INTREG_R6,
2826717Sgblack@eecs.umich.edu    INTREG_R7_IRQ = INTREG_R7,
2836717Sgblack@eecs.umich.edu    INTREG_R8_IRQ = INTREG_R8,
2846717Sgblack@eecs.umich.edu    INTREG_R9_IRQ = INTREG_R9,
2856717Sgblack@eecs.umich.edu    INTREG_R10_IRQ = INTREG_R10,
2866717Sgblack@eecs.umich.edu    INTREG_R11_IRQ = INTREG_R11,
2876717Sgblack@eecs.umich.edu    INTREG_R12_IRQ = INTREG_R12,
2886717Sgblack@eecs.umich.edu    INTREG_PC_IRQ = INTREG_PC,
2896734Sgblack@eecs.umich.edu    INTREG_R15_IRQ = INTREG_R15,
2906717Sgblack@eecs.umich.edu
2916717Sgblack@eecs.umich.edu    /* FIQ mode */
2926717Sgblack@eecs.umich.edu    INTREG_R0_FIQ = INTREG_R0,
2936717Sgblack@eecs.umich.edu    INTREG_R1_FIQ = INTREG_R1,
2946717Sgblack@eecs.umich.edu    INTREG_R2_FIQ = INTREG_R2,
2956717Sgblack@eecs.umich.edu    INTREG_R3_FIQ = INTREG_R3,
2966717Sgblack@eecs.umich.edu    INTREG_R4_FIQ = INTREG_R4,
2976717Sgblack@eecs.umich.edu    INTREG_R5_FIQ = INTREG_R5,
2986717Sgblack@eecs.umich.edu    INTREG_R6_FIQ = INTREG_R6,
2996717Sgblack@eecs.umich.edu    INTREG_R7_FIQ = INTREG_R7,
3006717Sgblack@eecs.umich.edu    INTREG_PC_FIQ = INTREG_PC,
3018902Sandreas.hansson@arm.com    INTREG_R15_FIQ = INTREG_R15
3026717Sgblack@eecs.umich.edu};
3036717Sgblack@eecs.umich.edu
3046717Sgblack@eecs.umich.edutypedef IntRegIndex IntRegMap[NUM_ARCH_INTREGS];
3056717Sgblack@eecs.umich.edu
30610037SARM gem5 Developersconst IntRegMap IntReg64Map = {
30710037SARM gem5 Developers    INTREG_R0,      INTREG_R1,      INTREG_R2,      INTREG_R3,
30810037SARM gem5 Developers    INTREG_R4,      INTREG_R5,      INTREG_R6,      INTREG_R7,
30910037SARM gem5 Developers    INTREG_R8_USR,  INTREG_R9_USR,  INTREG_R10_USR, INTREG_R11_USR,
31010037SARM gem5 Developers    INTREG_R12_USR, INTREG_R13_USR, INTREG_R14_USR, INTREG_R13_HYP,
31110037SARM gem5 Developers    INTREG_R14_IRQ, INTREG_R13_IRQ, INTREG_R14_SVC, INTREG_R13_SVC,
31210037SARM gem5 Developers    INTREG_R14_ABT, INTREG_R13_ABT, INTREG_R14_UND, INTREG_R13_UND,
31310037SARM gem5 Developers    INTREG_R8_FIQ,  INTREG_R9_FIQ,  INTREG_R10_FIQ, INTREG_R11_FIQ,
31410037SARM gem5 Developers    INTREG_R12_FIQ, INTREG_R13_FIQ, INTREG_R14_FIQ, INTREG_ZERO
31510037SARM gem5 Developers};
31610037SARM gem5 Developers
3176717Sgblack@eecs.umich.educonst IntRegMap IntRegUsrMap = {
3186717Sgblack@eecs.umich.edu    INTREG_R0_USR,  INTREG_R1_USR,  INTREG_R2_USR,  INTREG_R3_USR,
3196717Sgblack@eecs.umich.edu    INTREG_R4_USR,  INTREG_R5_USR,  INTREG_R6_USR,  INTREG_R7_USR,
3206717Sgblack@eecs.umich.edu    INTREG_R8_USR,  INTREG_R9_USR,  INTREG_R10_USR, INTREG_R11_USR,
32110037SARM gem5 Developers    INTREG_R12_USR, INTREG_R13_USR, INTREG_R14_USR, INTREG_R15_USR,
32210037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
32310037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
32410037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
32510037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO
3266717Sgblack@eecs.umich.edu};
3276717Sgblack@eecs.umich.edu
3286717Sgblack@eecs.umich.edustatic inline IntRegIndex
3296717Sgblack@eecs.umich.eduINTREG_USR(unsigned index)
3306717Sgblack@eecs.umich.edu{
3316717Sgblack@eecs.umich.edu    assert(index < NUM_ARCH_INTREGS);
3326717Sgblack@eecs.umich.edu    return IntRegUsrMap[index];
3336717Sgblack@eecs.umich.edu}
3346717Sgblack@eecs.umich.edu
33510037SARM gem5 Developersconst IntRegMap IntRegHypMap = {
33610037SARM gem5 Developers    INTREG_R0_HYP,  INTREG_R1_HYP,  INTREG_R2_HYP,  INTREG_R3_HYP,
33710037SARM gem5 Developers    INTREG_R4_HYP,  INTREG_R5_HYP,  INTREG_R6_HYP,  INTREG_R7_HYP,
33810037SARM gem5 Developers    INTREG_R8_HYP,  INTREG_R9_HYP,  INTREG_R10_HYP, INTREG_R11_HYP,
33910037SARM gem5 Developers    INTREG_R12_HYP, INTREG_R13_HYP, INTREG_R14_HYP, INTREG_R15_HYP,
34010037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
34110037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
34210037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
34310037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO
34410037SARM gem5 Developers};
34510037SARM gem5 Developers
34610037SARM gem5 Developersstatic inline IntRegIndex
34710037SARM gem5 DevelopersINTREG_HYP(unsigned index)
34810037SARM gem5 Developers{
34910037SARM gem5 Developers    assert(index < NUM_ARCH_INTREGS);
35010037SARM gem5 Developers    return IntRegHypMap[index];
35110037SARM gem5 Developers}
35210037SARM gem5 Developers
3536717Sgblack@eecs.umich.educonst IntRegMap IntRegSvcMap = {
3546717Sgblack@eecs.umich.edu    INTREG_R0_SVC,  INTREG_R1_SVC,  INTREG_R2_SVC,  INTREG_R3_SVC,
3556717Sgblack@eecs.umich.edu    INTREG_R4_SVC,  INTREG_R5_SVC,  INTREG_R6_SVC,  INTREG_R7_SVC,
3566717Sgblack@eecs.umich.edu    INTREG_R8_SVC,  INTREG_R9_SVC,  INTREG_R10_SVC, INTREG_R11_SVC,
35710037SARM gem5 Developers    INTREG_R12_SVC, INTREG_R13_SVC, INTREG_R14_SVC, INTREG_R15_SVC,
35810037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
35910037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
36010037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
36110037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO
3626717Sgblack@eecs.umich.edu};
3636717Sgblack@eecs.umich.edu
3646717Sgblack@eecs.umich.edustatic inline IntRegIndex
3656717Sgblack@eecs.umich.eduINTREG_SVC(unsigned index)
3666717Sgblack@eecs.umich.edu{
3676717Sgblack@eecs.umich.edu    assert(index < NUM_ARCH_INTREGS);
3686717Sgblack@eecs.umich.edu    return IntRegSvcMap[index];
3696717Sgblack@eecs.umich.edu}
3706717Sgblack@eecs.umich.edu
3716717Sgblack@eecs.umich.educonst IntRegMap IntRegMonMap = {
3726717Sgblack@eecs.umich.edu    INTREG_R0_MON,  INTREG_R1_MON,  INTREG_R2_MON,  INTREG_R3_MON,
3736717Sgblack@eecs.umich.edu    INTREG_R4_MON,  INTREG_R5_MON,  INTREG_R6_MON,  INTREG_R7_MON,
3746717Sgblack@eecs.umich.edu    INTREG_R8_MON,  INTREG_R9_MON,  INTREG_R10_MON, INTREG_R11_MON,
37510037SARM gem5 Developers    INTREG_R12_MON, INTREG_R13_MON, INTREG_R14_MON, INTREG_R15_MON,
37610037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
37710037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
37810037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
37910037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO
3806717Sgblack@eecs.umich.edu};
3816717Sgblack@eecs.umich.edu
3826717Sgblack@eecs.umich.edustatic inline IntRegIndex
3836717Sgblack@eecs.umich.eduINTREG_MON(unsigned index)
3846717Sgblack@eecs.umich.edu{
3856717Sgblack@eecs.umich.edu    assert(index < NUM_ARCH_INTREGS);
3866717Sgblack@eecs.umich.edu    return IntRegMonMap[index];
3876717Sgblack@eecs.umich.edu}
3886717Sgblack@eecs.umich.edu
3896717Sgblack@eecs.umich.educonst IntRegMap IntRegAbtMap = {
3906717Sgblack@eecs.umich.edu    INTREG_R0_ABT,  INTREG_R1_ABT,  INTREG_R2_ABT,  INTREG_R3_ABT,
3916717Sgblack@eecs.umich.edu    INTREG_R4_ABT,  INTREG_R5_ABT,  INTREG_R6_ABT,  INTREG_R7_ABT,
3926717Sgblack@eecs.umich.edu    INTREG_R8_ABT,  INTREG_R9_ABT,  INTREG_R10_ABT, INTREG_R11_ABT,
39310037SARM gem5 Developers    INTREG_R12_ABT, INTREG_R13_ABT, INTREG_R14_ABT, INTREG_R15_ABT,
39410037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
39510037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
39610037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
39710037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO
3986717Sgblack@eecs.umich.edu};
3996717Sgblack@eecs.umich.edu
4006717Sgblack@eecs.umich.edustatic inline IntRegIndex
4016717Sgblack@eecs.umich.eduINTREG_ABT(unsigned index)
4026717Sgblack@eecs.umich.edu{
4036717Sgblack@eecs.umich.edu    assert(index < NUM_ARCH_INTREGS);
4046717Sgblack@eecs.umich.edu    return IntRegAbtMap[index];
4056717Sgblack@eecs.umich.edu}
4066717Sgblack@eecs.umich.edu
4076717Sgblack@eecs.umich.educonst IntRegMap IntRegUndMap = {
4086717Sgblack@eecs.umich.edu    INTREG_R0_UND,  INTREG_R1_UND,  INTREG_R2_UND,  INTREG_R3_UND,
4096717Sgblack@eecs.umich.edu    INTREG_R4_UND,  INTREG_R5_UND,  INTREG_R6_UND,  INTREG_R7_UND,
4106717Sgblack@eecs.umich.edu    INTREG_R8_UND,  INTREG_R9_UND,  INTREG_R10_UND, INTREG_R11_UND,
41110037SARM gem5 Developers    INTREG_R12_UND, INTREG_R13_UND, INTREG_R14_UND, INTREG_R15_UND,
41210037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
41310037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
41410037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
41510037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO
4166717Sgblack@eecs.umich.edu};
4176717Sgblack@eecs.umich.edu
4186717Sgblack@eecs.umich.edustatic inline IntRegIndex
4196717Sgblack@eecs.umich.eduINTREG_UND(unsigned index)
4206717Sgblack@eecs.umich.edu{
4216717Sgblack@eecs.umich.edu    assert(index < NUM_ARCH_INTREGS);
4226717Sgblack@eecs.umich.edu    return IntRegUndMap[index];
4236717Sgblack@eecs.umich.edu}
4246717Sgblack@eecs.umich.edu
4256717Sgblack@eecs.umich.educonst IntRegMap IntRegIrqMap = {
4266717Sgblack@eecs.umich.edu    INTREG_R0_IRQ,  INTREG_R1_IRQ,  INTREG_R2_IRQ,  INTREG_R3_IRQ,
4276717Sgblack@eecs.umich.edu    INTREG_R4_IRQ,  INTREG_R5_IRQ,  INTREG_R6_IRQ,  INTREG_R7_IRQ,
4286717Sgblack@eecs.umich.edu    INTREG_R8_IRQ,  INTREG_R9_IRQ,  INTREG_R10_IRQ, INTREG_R11_IRQ,
42910037SARM gem5 Developers    INTREG_R12_IRQ, INTREG_R13_IRQ, INTREG_R14_IRQ, INTREG_R15_IRQ,
43010037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
43110037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
43210037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
43310037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO
4346717Sgblack@eecs.umich.edu};
4356717Sgblack@eecs.umich.edu
4366717Sgblack@eecs.umich.edustatic inline IntRegIndex
4376717Sgblack@eecs.umich.eduINTREG_IRQ(unsigned index)
4386717Sgblack@eecs.umich.edu{
4396717Sgblack@eecs.umich.edu    assert(index < NUM_ARCH_INTREGS);
4406717Sgblack@eecs.umich.edu    return IntRegIrqMap[index];
4416717Sgblack@eecs.umich.edu}
4426717Sgblack@eecs.umich.edu
4436717Sgblack@eecs.umich.educonst IntRegMap IntRegFiqMap = {
4446717Sgblack@eecs.umich.edu    INTREG_R0_FIQ,  INTREG_R1_FIQ,  INTREG_R2_FIQ,  INTREG_R3_FIQ,
4456717Sgblack@eecs.umich.edu    INTREG_R4_FIQ,  INTREG_R5_FIQ,  INTREG_R6_FIQ,  INTREG_R7_FIQ,
4466717Sgblack@eecs.umich.edu    INTREG_R8_FIQ,  INTREG_R9_FIQ,  INTREG_R10_FIQ, INTREG_R11_FIQ,
44710037SARM gem5 Developers    INTREG_R12_FIQ, INTREG_R13_FIQ, INTREG_R14_FIQ, INTREG_R15_FIQ,
44810037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
44910037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
45010037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,
45110037SARM gem5 Developers    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO,    INTREG_ZERO
4526717Sgblack@eecs.umich.edu};
4536717Sgblack@eecs.umich.edu
4546717Sgblack@eecs.umich.edustatic inline IntRegIndex
4556717Sgblack@eecs.umich.eduINTREG_FIQ(unsigned index)
4566717Sgblack@eecs.umich.edu{
4576717Sgblack@eecs.umich.edu    assert(index < NUM_ARCH_INTREGS);
4586717Sgblack@eecs.umich.edu    return IntRegFiqMap[index];
4596717Sgblack@eecs.umich.edu}
4606717Sgblack@eecs.umich.edu
4617310Sgblack@eecs.umich.edustatic const unsigned intRegsPerMode = NUM_INTREGS;
4627310Sgblack@eecs.umich.edu
4637310Sgblack@eecs.umich.edustatic inline int
4647310Sgblack@eecs.umich.eduintRegInMode(OperatingMode mode, int reg)
4656726Sgblack@eecs.umich.edu{
4667310Sgblack@eecs.umich.edu    assert(reg < NUM_ARCH_INTREGS);
4677310Sgblack@eecs.umich.edu    return mode * intRegsPerMode + reg;
4686726Sgblack@eecs.umich.edu}
4696726Sgblack@eecs.umich.edu
47010037SARM gem5 Developersstatic inline int
47110037SARM gem5 DevelopersflattenIntRegModeIndex(int reg)
47210037SARM gem5 Developers{
47310037SARM gem5 Developers    int mode = reg / intRegsPerMode;
47410037SARM gem5 Developers    reg = reg % intRegsPerMode;
47510037SARM gem5 Developers    switch (mode) {
47610037SARM gem5 Developers      case MODE_USER:
47710037SARM gem5 Developers      case MODE_SYSTEM:
47810037SARM gem5 Developers        return INTREG_USR(reg);
47910037SARM gem5 Developers      case MODE_FIQ:
48010037SARM gem5 Developers        return INTREG_FIQ(reg);
48110037SARM gem5 Developers      case MODE_IRQ:
48210037SARM gem5 Developers        return INTREG_IRQ(reg);
48310037SARM gem5 Developers      case MODE_SVC:
48410037SARM gem5 Developers        return INTREG_SVC(reg);
48510037SARM gem5 Developers      case MODE_MON:
48610037SARM gem5 Developers        return INTREG_MON(reg);
48710037SARM gem5 Developers      case MODE_ABORT:
48810037SARM gem5 Developers        return INTREG_ABT(reg);
48910037SARM gem5 Developers      case MODE_HYP:
49010037SARM gem5 Developers        return INTREG_HYP(reg);
49110037SARM gem5 Developers      case MODE_UNDEFINED:
49210037SARM gem5 Developers        return INTREG_UND(reg);
49310037SARM gem5 Developers      default:
49410037SARM gem5 Developers        panic("%d: Flattening into an unknown mode: reg:%#x mode:%#x\n",
49510037SARM gem5 Developers                curTick(), reg, mode);
49610037SARM gem5 Developers    }
49710037SARM gem5 Developers}
49810037SARM gem5 Developers
49910037SARM gem5 Developers
50010037SARM gem5 Developersstatic inline IntRegIndex
50110037SARM gem5 DevelopersmakeSP(IntRegIndex reg)
50210037SARM gem5 Developers{
50310037SARM gem5 Developers    if (reg == INTREG_X31)
50410037SARM gem5 Developers        reg = INTREG_SPX;
50510037SARM gem5 Developers    return reg;
50610037SARM gem5 Developers}
50710037SARM gem5 Developers
50810337SAndrew.Bardsley@arm.comstatic inline IntRegIndex
50910337SAndrew.Bardsley@arm.commakeZero(IntRegIndex reg)
51010337SAndrew.Bardsley@arm.com{
51110337SAndrew.Bardsley@arm.com    if (reg == INTREG_X31)
51210337SAndrew.Bardsley@arm.com        reg = INTREG_ZERO;
51310337SAndrew.Bardsley@arm.com    return reg;
51410337SAndrew.Bardsley@arm.com}
51510037SARM gem5 Developers
51610037SARM gem5 Developersstatic inline bool
51710037SARM gem5 DevelopersisSP(IntRegIndex reg)
51810037SARM gem5 Developers{
51910037SARM gem5 Developers    return reg == INTREG_SPX;
52010037SARM gem5 Developers}
52110037SARM gem5 Developers
5226717Sgblack@eecs.umich.edu}
5236717Sgblack@eecs.umich.edu
5246717Sgblack@eecs.umich.edu#endif
525