Difference between revisions of "NaplesPURegisterInfo.td"
From NaplesPU Documentation
m (Francesco moved page NuPlusRegisterInfo.td to NaplesPURegisterInfo.td) |
|
(No difference)
|
Revision as of 15:41, 21 June 2019
The NuPlusRegisterInfo.td is used to define the nu+ hw registers and the nu+ register classes.
//===-- NuPlusRegisterInfo.td - NuPlus 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 NuPlus register file
//===----------------------------------------------------------------------===//
let Namespace = "NuPlus" in {
def sub_even : SubRegIndex<32>;
def sub_odd : SubRegIndex<32, 32>;
}
class NuPlusReg<bits<16> Enc, string n> : Register<n> {
let HWEncoding = Enc;
let Namespace = "NuPlus";
}
class NuPlusRegWithSubRegs<bits<16> Enc, string n, list<Register> subregs>
: RegisterWithSubRegs<n, subregs> {
let HWEncoding = Enc;
let Namespace = "NuPlus";
}
// NuPlus 32-bit registers
class NuPlusGPRReg<bits<16> Enc, string n> : NuPlusReg<Enc, n>;
//===----------------------------------------------------------------------===//
// Registers
//===----------------------------------------------------------------------===//
// General Purpose scalar registers
foreach i = 0-57 in {
def S#i : NuPlusGPRReg<i, "s"#i>, DwarfRegNum<[i]>;
}
//trap register
def TR_REG : NuPlusGPRReg<58, "tr">, DwarfRegNum<[58]>;
//mask register
def MR_REG : NuPlusGPRReg<59, "rm">, DwarfRegNum<[59]>;
//frame pointer
def FP_REG : NuPlusGPRReg<60, "fp">, DwarfRegNum<[60]>;
//stack pointer
def SP_REG : NuPlusGPRReg<61, "sp">, DwarfRegNum<[61]>;
//return address
def RA_REG : NuPlusGPRReg<62, "ra">, DwarfRegNum<[62]>;
//PC
def PC_REG : NuPlusGPRReg<63, "pc">, DwarfRegNum<[63]>;
// General Purpose vectorial registers
foreach i = 0-63 in {
def V#i : NuPlusGPRReg<i, "v"#i>, DwarfRegNum<[!add(i, 64)]>;
}
//===----------------------------------------------------------------------===//
// Register Classes
//===----------------------------------------------------------------------===//
// This register class should not be used to hold i64/f64 values, use the GPR64
// register class for that. The i64/f64 type is included here to allow i64/f64
// patterns using the instructions.
def GPR32 : RegisterClass<"NuPlus", [i32, f32], 32, (add (sequence "S%u", 0, 57),
TR_REG, MR_REG, FP_REG, SP_REG, RA_REG, PC_REG)>
def VR512W : RegisterClass<"NuPlus", [v16i32, v16f32, v16i8, v16i16], 512, (sequence "V%u", 0, 63)>;