10b57cec5SDimitry Andric//===-- BPFRegisterInfo.td - BPF Register defs -------------*- tablegen -*-===// 20b57cec5SDimitry Andric// 30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric// 70b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric 90b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 100b57cec5SDimitry Andric// Declarations that describe the BPF register file 110b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andriclet Namespace = "BPF" in { 140b57cec5SDimitry Andric def sub_32 : SubRegIndex<32>; 150b57cec5SDimitry Andric} 160b57cec5SDimitry Andric 170b57cec5SDimitry Andricclass Wi<bits<16> Enc, string n> : Register<n> { 180b57cec5SDimitry Andric let HWEncoding = Enc; 190b57cec5SDimitry Andric let Namespace = "BPF"; 200b57cec5SDimitry Andric} 210b57cec5SDimitry Andric 220b57cec5SDimitry Andric// Registers are identified with 4-bit ID numbers. 230b57cec5SDimitry Andric// Ri - 64-bit integer registers 240b57cec5SDimitry Andricclass Ri<bits<16> Enc, string n, list<Register> subregs> 250b57cec5SDimitry Andric : RegisterWithSubRegs<n, subregs> { 260b57cec5SDimitry Andric let HWEncoding = Enc; 270b57cec5SDimitry Andric let Namespace = "BPF"; 280b57cec5SDimitry Andric let SubRegIndices = [sub_32]; 290b57cec5SDimitry Andric} 300b57cec5SDimitry Andric 310b57cec5SDimitry Andricforeach I = 0-11 in { 320b57cec5SDimitry Andric // 32-bit Integer (alias to low part of 64-bit register). 330b57cec5SDimitry Andric def W#I : Wi<I, "w"#I>, DwarfRegNum<[I]>; 340b57cec5SDimitry Andric // 64-bit Integer registers 350b57cec5SDimitry Andric def R#I : Ri<I, "r"#I, [!cast<Wi>("W"#I)]>, DwarfRegNum<[I]>; 360b57cec5SDimitry Andric} 370b57cec5SDimitry Andric 380b57cec5SDimitry Andric// Register classes. 39*349cc55cSDimitry Andricdef GPR32 : RegisterClass<"BPF", [i32], 64, (add 400b57cec5SDimitry Andric (sequence "W%u", 1, 9), 410b57cec5SDimitry Andric W0, // Return value 420b57cec5SDimitry Andric W11, // Stack Ptr 430b57cec5SDimitry Andric W10 // Frame Ptr 440b57cec5SDimitry Andric)>; 450b57cec5SDimitry Andric 460b57cec5SDimitry Andricdef GPR : RegisterClass<"BPF", [i64], 64, (add 470b57cec5SDimitry Andric (sequence "R%u", 1, 9), 480b57cec5SDimitry Andric R0, // Return value 490b57cec5SDimitry Andric R11, // Stack Ptr 500b57cec5SDimitry Andric R10 // Frame Ptr 510b57cec5SDimitry Andric)>; 52