mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 02:33:06 +01:00
RISCV: add a few deprecated aliases for CSRs
This adds the {s,u,m}badaddr CSR aliases as well as the sptbr alias. These are for compatibility with binutils. Furthermore, these are used by the RISC-V Proxy Kernel and are required to enable building the Proxy Kernel with the LLVM IAS. The aliases here are deprecated. These are being introduced in order to provide a compatibility story for the existing GNU toolchain, which still supports the deprecated spelling in the assembler. However, in order to encourage the migration of existing coding, we provide warnings indicating that the aliased CSRs are deprecated and should be replaced. Differential Revision: https://reviews.llvm.org/D101919 Reviewed By: Craig Topper
This commit is contained in:
parent
586b51e638
commit
073c495f90
@ -1312,6 +1312,11 @@ RISCVAsmParser::parseCSRSystemRegister(OperandVector &Operands) {
|
||||
auto SysReg = RISCVSysReg::lookupSysRegByName(Identifier);
|
||||
if (!SysReg)
|
||||
SysReg = RISCVSysReg::lookupSysRegByAltName(Identifier);
|
||||
if (!SysReg)
|
||||
if ((SysReg = RISCVSysReg::lookupSysRegByDeprecatedName(Identifier)))
|
||||
Warning(S, "'" + Identifier + "' is a deprecated alias for '" +
|
||||
SysReg->Name + "'");
|
||||
|
||||
// Accept a named Sys Reg if the required features are present.
|
||||
if (SysReg) {
|
||||
if (!SysReg->haveRequiredFeatures(getSTI().getFeatureBits())) {
|
||||
|
@ -242,8 +242,9 @@ inline static bool isValidRoundingMode(unsigned Mode) {
|
||||
namespace RISCVSysReg {
|
||||
struct SysReg {
|
||||
const char *Name;
|
||||
unsigned Encoding;
|
||||
const char *AltName;
|
||||
const char *DeprecatedName;
|
||||
unsigned Encoding;
|
||||
// FIXME: add these additional fields when needed.
|
||||
// Privilege Access: Read, Write, Read-Only.
|
||||
// unsigned ReadWrite;
|
||||
|
@ -19,9 +19,13 @@ include "llvm/TableGen/SearchableTable.td"
|
||||
|
||||
class SysReg<string name, bits<12> op> {
|
||||
string Name = name;
|
||||
bits<12> Encoding = op;
|
||||
// A maximum of one alias is supported right now.
|
||||
string AltName = name;
|
||||
// A maximum of one deprecated name is supported right now. Unlike the
|
||||
// `AltName` alias, a `DeprecatedName` generates a diagnostic when the name is
|
||||
// used to encourage software to migrate away from the name.
|
||||
string DeprecatedName = "";
|
||||
bits<12> Encoding = op;
|
||||
// FIXME: add these additional fields when needed.
|
||||
// Privilege Access: Read and Write = 0, 1, 2; Read-Only = 3.
|
||||
// Privilege Mode: User = 0, System = 1 or Machine = 3.
|
||||
@ -38,7 +42,10 @@ class SysReg<string name, bits<12> op> {
|
||||
def SysRegsList : GenericTable {
|
||||
let FilterClass = "SysReg";
|
||||
// FIXME: add "ReadWrite", "Mode", "Extra", "Number" fields when needed.
|
||||
let Fields = [ "Name", "Encoding", "AltName", "FeaturesRequired", "isRV32Only" ];
|
||||
let Fields = [
|
||||
"Name", "AltName", "DeprecatedName", "Encoding", "FeaturesRequired",
|
||||
"isRV32Only",
|
||||
];
|
||||
|
||||
let PrimaryKey = [ "Encoding" ];
|
||||
let PrimaryKeyName = "lookupSysRegByEncoding";
|
||||
@ -54,6 +61,11 @@ def lookupSysRegByAltName : SearchIndex {
|
||||
let Key = [ "AltName" ];
|
||||
}
|
||||
|
||||
def lookupSysRegByDeprecatedName : SearchIndex {
|
||||
let Table = SysRegsList;
|
||||
let Key = [ "DeprecatedName" ];
|
||||
}
|
||||
|
||||
// The following CSR encodings match those given in Tables 2.2,
|
||||
// 2.3, 2.4 and 2.5 in the RISC-V Instruction Set Manual
|
||||
// Volume II: Privileged Architecture.
|
||||
@ -71,6 +83,7 @@ def : SysReg<"utvec", 0x005>;
|
||||
def : SysReg<"uscratch", 0x040>;
|
||||
def : SysReg<"uepc", 0x041>;
|
||||
def : SysReg<"ucause", 0x042>;
|
||||
let DeprecatedName = "ubadaddr" in
|
||||
def : SysReg<"utval", 0x043>;
|
||||
def : SysReg<"uip", 0x044>;
|
||||
|
||||
@ -171,12 +184,14 @@ def : SysReg<"scounteren", 0x106>;
|
||||
def : SysReg<"sscratch", 0x140>;
|
||||
def : SysReg<"sepc", 0x141>;
|
||||
def : SysReg<"scause", 0x142>;
|
||||
let DeprecatedName = "sbadaddr" in
|
||||
def : SysReg<"stval", 0x143>;
|
||||
def : SysReg<"sip", 0x144>;
|
||||
|
||||
//===-------------------------------------
|
||||
// Supervisor Protection and Translation
|
||||
//===-------------------------------------
|
||||
let DeprecatedName = "sptbr" in
|
||||
def : SysReg<"satp", 0x180>;
|
||||
|
||||
//===-----------------------------
|
||||
@ -205,6 +220,7 @@ def : SysReg<"mcounteren", 0x306>;
|
||||
def : SysReg<"mscratch", 0x340>;
|
||||
def : SysReg<"mepc", 0x341>;
|
||||
def : SysReg<"mcause", 0x342>;
|
||||
let DeprecatedName = "mbadaddr" in
|
||||
def : SysReg<"mtval", 0x343>;
|
||||
def : SysReg<"mip", 0x344>;
|
||||
|
||||
|
77
test/MC/RISCV/deprecated-csr-names.s
Normal file
77
test/MC/RISCV/deprecated-csr-names.s
Normal file
@ -0,0 +1,77 @@
|
||||
# RUN: llvm-mc -triple riscv32 -riscv-no-aliases -show-encoding %s \
|
||||
# RUN: | FileCheck -check-prefixes CHECK-INST,CHECK-ENC %s
|
||||
# RUN: llvm-mc -filetype obj -triple riscv32 %s \
|
||||
# RUN: | llvm-objdump -d - \
|
||||
# RUN: | FileCheck -check-prefix=CHECK-INST-ALIAS %s
|
||||
|
||||
# RUN: llvm-mc -triple riscv64 -riscv-no-aliases -show-encoding %s \
|
||||
# RUN: | FileCheck -check-prefixes CHECK-INST,CHECK-ENC %s
|
||||
# RUN: llvm-mc -filetype obj -triple riscv64 %s \
|
||||
# RUN: | llvm-objdump -d - \
|
||||
# RUN: | FileCheck -check-prefix=CHECK-INST-ALIAS %s
|
||||
|
||||
# RUN: llvm-mc -triple riscv32 %s 2>&1 | FileCheck -check-prefix CHECK-WARN %s
|
||||
|
||||
# sbadaddr
|
||||
# name
|
||||
# CHECK-INST: csrrw zero, stval, zero
|
||||
# CHECK-ENC: encoding: [0x73,0x10,0x30,0x14]
|
||||
# CHECK-INST-ALIAS: csrw stval, zero
|
||||
# uimm12
|
||||
# CHECK-INST: csrrw zero, stval, zero
|
||||
# CHECK-ENC: encoding: [0x73,0x10,0x30,0x14]
|
||||
# CHECK-INST-ALIAS: csrw stval, zero
|
||||
# name
|
||||
csrw sbadaddr, zero
|
||||
# uimm12
|
||||
csrrw zero, 0x143, zero
|
||||
|
||||
# CHECK-WARN: warning: 'sbadaddr' is a deprecated alias for 'stval'
|
||||
|
||||
# mbadaddr
|
||||
# name
|
||||
# CHECK-INST: csrrw zero, mtval, zero
|
||||
# CHECK-ENC: encoding: [0x73,0x10,0x30,0x34]
|
||||
# CHECK-INST-ALIAS: csrw mtval, zero
|
||||
# uimm12
|
||||
# CHECK-INST: csrrw zero, mtval, zero
|
||||
# CHECK-ENC: encoding: [0x73,0x10,0x30,0x34]
|
||||
# CHECK-INST-ALIAS: csrw mtval, zero
|
||||
# name
|
||||
csrw mbadaddr, zero
|
||||
# uimm12
|
||||
csrrw zero, 0x343, zero
|
||||
|
||||
# CHECK-WARN: warning: 'mbadaddr' is a deprecated alias for 'mtval'
|
||||
|
||||
# ubadaddr
|
||||
# name
|
||||
# CHECK-INST: csrrw zero, utval, zero
|
||||
# CHECK-ENC: encoding: [0x73,0x10,0x30,0x04]
|
||||
# CHECK-INST-ALIAS: csrw utval, zero
|
||||
# uimm12
|
||||
# CHECK-INST: csrrw zero, utval, zero
|
||||
# CHECK-ENC: encoding: [0x73,0x10,0x30,0x04]
|
||||
# CHECK-INST-ALIAS: csrw utval, zero
|
||||
# name
|
||||
csrw ubadaddr, zero
|
||||
# uimm12
|
||||
csrrw zero, 0x043, zero
|
||||
|
||||
# CHECK-WARN: warning: 'ubadaddr' is a deprecated alias for 'utval'
|
||||
|
||||
# sptbr
|
||||
# name
|
||||
# CHECK-INST: csrrw zero, satp, zero
|
||||
# CHECK-ENC: encoding: [0x73,0x10,0x00,0x18]
|
||||
# CHECK-INST-ALIAS: csrw satp, zero
|
||||
# uimm12
|
||||
# CHECK-INST: csrrw zero, satp, zero
|
||||
# CHECK-ENC: encoding: [0x73,0x10,0x00,0x18]
|
||||
# CHECK-INST-ALIAS: csrw satp, zero
|
||||
# name
|
||||
csrw sptbr, zero
|
||||
# uimm12
|
||||
csrrw zero, 0x180, zero
|
||||
|
||||
# CHECK-WARN: warning: 'sptbr' is a deprecated alias for 'satp'
|
Loading…
Reference in New Issue
Block a user