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