| //===-- BPFRegisterInfo.td - BPF Register defs -------------*- tablegen -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| //===----------------------------------------------------------------------===// |
| // Declarations that describe the BPF register file |
| //===----------------------------------------------------------------------===// |
| |
| let Namespace = "BPF" in { |
| def sub_32 : SubRegIndex<32>; |
| } |
| |
| class Wi<bits<16> Enc, string n> : Register<n> { |
| let HWEncoding = Enc; |
| let Namespace = "BPF"; |
| } |
| |
| // Registers are identified with 4-bit ID numbers. |
| // Ri - 64-bit integer registers |
| class Ri<bits<16> Enc, string n, list<Register> subregs> |
| : RegisterWithSubRegs<n, subregs> { |
| let HWEncoding = Enc; |
| let Namespace = "BPF"; |
| let SubRegIndices = [sub_32]; |
| } |
| |
| foreach I = 0-11 in { |
| // 32-bit Integer (alias to low part of 64-bit register). |
| def W#I : Wi<I, "w"#I>, DwarfRegNum<[I]>; |
| // 64-bit Integer registers |
| def R#I : Ri<I, "r"#I, [!cast<Wi>("W"#I)]>, DwarfRegNum<[I]>; |
| } |
| |
| // Register classes. |
| def GPR32 : RegisterClass<"BPF", [i32], 32, (add |
| (sequence "W%u", 1, 9), |
| W0, // Return value |
| W11, // Stack Ptr |
| W10 // Frame Ptr |
| )>; |
| |
| def GPR : RegisterClass<"BPF", [i64], 64, (add |
| (sequence "R%u", 1, 9), |
| R0, // Return value |
| R11, // Stack Ptr |
| R10 // Frame Ptr |
| )>; |