//===- XtensaRegisterInfo.td - Xtensa Register defs --------*- tablegen -*-===// // // The LLVM Compiler Infrastructure // // 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 // //===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===// // Class definitions. //===----------------------------------------------------------------------===// class XtensaReg : Register { let Namespace = "Xtensa"; } class XtensaRegWithSubRegs subregs> : RegisterWithSubRegs { let Namespace = "Xtensa"; } //===----------------------------------------------------------------------===// // General-purpose registers //===----------------------------------------------------------------------===// // Xtensa general purpose regs class ARReg num, string n, list alt = []> : XtensaReg { let HWEncoding{3-0} = num; let AltNames = alt; } // Return Address def A0 : ARReg<0, "a0">, DwarfRegNum<[0]>; // Stack Pointer (callee-saved) def SP : ARReg<1, "a1", ["sp"]>, DwarfRegNum<[1]>; // Function Arguments def A2 : ARReg<2, "a2">, DwarfRegNum<[2]>; def A3 : ARReg<3, "a3">, DwarfRegNum<[3]>; def A4 : ARReg<4, "a4">, DwarfRegNum<[4]>; def A5 : ARReg<5, "a5">, DwarfRegNum<[5]>; def A6 : ARReg<6, "a6">, DwarfRegNum<[6]>; def A7 : ARReg<7, "a7">, DwarfRegNum<[7]>; // Static Chain def A8 : ARReg<8, "a8">, DwarfRegNum<[8]>; def A9 : ARReg<9, "a9">, DwarfRegNum<[9]>; def A10 : ARReg<10, "a10">, DwarfRegNum<[10]>; def A11 : ARReg<11, "a11">, DwarfRegNum<[11]>; // Callee-saved def A12 : ARReg<12, "a12">, DwarfRegNum<[12]>; def A13 : ARReg<13, "a13">, DwarfRegNum<[13]>; def A14 : ARReg<14, "a14">, DwarfRegNum<[14]>; // Stack-Frame Pointer (optional) - Callee-Saved def A15 : ARReg<15, "a15">, DwarfRegNum<[15]>; // Register class with allocation order def AR : RegisterClass<"Xtensa", [i32], 32, (add A8, A9, A10, A11, A12, A13, A14, A15, A7, A6, A5, A4, A3, A2, A0, SP)>; //===----------------------------------------------------------------------===// // Special-purpose registers //===----------------------------------------------------------------------===// class SRReg num, string n, list alt = []> : XtensaReg { let HWEncoding{7-0} = num; let AltNames = alt; } // Shift Amount Register def SAR : SRReg<3, "sar", ["SAR","3"]>; def SR : RegisterClass<"Xtensa", [i32], 32, (add SAR)>;