| //===- ARCRegisterInfo.td - ARC Register defs --------------*- tablegen -*-===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| //===----------------------------------------------------------------------===// | |
| // Declarations that describe the ARC register file | |
| //===----------------------------------------------------------------------===// | |
| class ARCReg<string n, list<string> altNames> : Register<n, altNames> { | |
| field bits<6> HwEncoding; | |
| let Namespace = "ARC"; | |
| } | |
| // Registers are identified with 6-bit ID numbers. | |
| // Core - 32-bit core registers | |
| class Core<int num, string n, list<string>altNames=[]> : ARCReg<n, altNames> { | |
| let HWEncoding = num; | |
| } | |
| class Status<string n> : ARCReg<n, []> { | |
| } | |
| // Integer registers | |
| def R0 : Core< 0, "%r0">, DwarfRegNum<[0]>; | |
| def R1 : Core< 1, "%r1">, DwarfRegNum<[1]>; | |
| def R2 : Core< 2, "%r2">, DwarfRegNum<[2]>; | |
| def R3 : Core< 3, "%r3">, DwarfRegNum<[3]>; | |
| let CostPerUse=1 in { | |
| def R4 : Core< 4, "%r4">, DwarfRegNum<[4]>; | |
| def R5 : Core< 5, "%r5">, DwarfRegNum<[5]>; | |
| def R6 : Core< 6, "%r6">, DwarfRegNum<[6]>; | |
| def R7 : Core< 7, "%r7">, DwarfRegNum<[7]>; | |
| def R8 : Core< 8, "%r8">, DwarfRegNum<[8]>; | |
| def R9 : Core< 9, "%r9">, DwarfRegNum<[9]>; | |
| def R10 : Core<10, "%r10">, DwarfRegNum<[10]>; | |
| def R11 : Core<11, "%r11">, DwarfRegNum<[11]>; | |
| } | |
| def R12 : Core<12, "%r12">, DwarfRegNum<[12]>; | |
| def R13 : Core<13, "%r13">, DwarfRegNum<[13]>; | |
| def R14 : Core<14, "%r14">, DwarfRegNum<[14]>; | |
| def R15 : Core<15, "%r15">, DwarfRegNum<[15]>; | |
| let CostPerUse=1 in { | |
| def R16 : Core<16, "%r16">, DwarfRegNum<[16]>; | |
| def R17 : Core<17, "%r17">, DwarfRegNum<[17]>; | |
| def R18 : Core<18, "%r18">, DwarfRegNum<[18]>; | |
| def R19 : Core<19, "%r19">, DwarfRegNum<[19]>; | |
| def R20 : Core<20, "%r20">, DwarfRegNum<[20]>; | |
| def R21 : Core<21, "%r21">, DwarfRegNum<[21]>; | |
| def R22 : Core<22, "%r22">, DwarfRegNum<[22]>; | |
| def R23 : Core<23, "%r23">, DwarfRegNum<[23]>; | |
| def R24 : Core<24, "%r24">, DwarfRegNum<[24]>; | |
| def R25 : Core<25, "%r25">, DwarfRegNum<[25]>; | |
| def GP : Core<26, "%gp",["%r26"]>, DwarfRegNum<[26]>; | |
| def FP : Core<27, "%fp", ["%r27"]>, DwarfRegNum<[27]>; | |
| def SP : Core<28, "%sp", ["%r28"]>, DwarfRegNum<[28]>; | |
| def ILINK : Core<29, "%ilink">, DwarfRegNum<[29]>; | |
| def R30 : Core<30, "%r30">, DwarfRegNum<[30]>; | |
| def BLINK: Core<31, "%blink">, DwarfRegNum<[31]>; | |
| def STATUS32 : Status<"status32">, DwarfRegNum<[32]>; | |
| } | |
| // Register classes. | |
| // | |
| def GPR32: RegisterClass<"ARC", [i32], 32, | |
| (add R0, R1, R2, R3, | |
| R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, | |
| R20, R21, R22, R23, R24, R25, GP, FP, SP, ILINK, R30, BLINK)>; | |
| def SREG : RegisterClass<"ARC", [i32], 1, (add STATUS32)>; | |
| def GPR_S : RegisterClass<"ARC", [i32], 8, | |
| (add R0, R1, R2, R3, R12, R13, R14, R15)>; | |