1283625Sdim//===-- BPFRegisterInfo.td - BPF Register defs -------------*- tablegen -*-===//
2283625Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6283625Sdim//
7283625Sdim//===----------------------------------------------------------------------===//
8283625Sdim
9283625Sdim//===----------------------------------------------------------------------===//
10283625Sdim//  Declarations that describe the BPF register file
11283625Sdim//===----------------------------------------------------------------------===//
12283625Sdim
13327952Sdimlet Namespace = "BPF" in {
14327952Sdim  def sub_32 : SubRegIndex<32>;
15327952Sdim}
16327952Sdim
17327952Sdimclass Wi<bits<16> Enc, string n> : Register<n> {
18327952Sdim  let HWEncoding = Enc;
19327952Sdim  let Namespace = "BPF";
20327952Sdim}
21327952Sdim
22283625Sdim// Registers are identified with 4-bit ID numbers.
23283625Sdim// Ri - 64-bit integer registers
24327952Sdimclass Ri<bits<16> Enc, string n, list<Register> subregs>
25327952Sdim  : RegisterWithSubRegs<n, subregs> {
26327952Sdim  let HWEncoding = Enc;
27283625Sdim  let Namespace = "BPF";
28327952Sdim  let SubRegIndices = [sub_32];
29283625Sdim}
30283625Sdim
31327952Sdimforeach I = 0-11 in {
32327952Sdim  // 32-bit Integer (alias to low part of 64-bit register).
33327952Sdim  def W#I  : Wi<I,  "w"#I>,  DwarfRegNum<[I]>;
34327952Sdim  // 64-bit Integer registers
35327952Sdim  def R#I  : Ri<I,  "r"#I,  [!cast<Wi>("W"#I)]>,  DwarfRegNum<[I]>;
36327952Sdim}
37283625Sdim
38283625Sdim// Register classes.
39327952Sdimdef GPR32 : RegisterClass<"BPF", [i32], 32, (add
40327952Sdim  (sequence "W%u", 1, 9),
41327952Sdim  W0, // Return value
42327952Sdim  W11, // Stack Ptr
43327952Sdim  W10  // Frame Ptr
44327952Sdim)>;
45327952Sdim
46327952Sdimdef GPR : RegisterClass<"BPF", [i64], 64, (add
47327952Sdim  (sequence "R%u", 1, 9),
48327952Sdim  R0, // Return value
49327952Sdim  R11, // Stack Ptr
50327952Sdim  R10  // Frame Ptr
51327952Sdim)>;
52