[llvm] r235314 - [AArch64] LORID_EL1 register must be treated as read-only
Vladimir Sukharev
vladimir.sukharev at arm.com
Mon Apr 20 09:54:37 PDT 2015
Author: vsukharev
Date: Mon Apr 20 11:54:37 2015
New Revision: 235314
URL: http://llvm.org/viewvc/llvm-project?rev=235314&view=rev
Log:
[AArch64] LORID_EL1 register must be treated as read-only
Patch by: John Brawn
Reviewers: jmolloy
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D9105
Modified:
llvm/trunk/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp
llvm/trunk/test/MC/AArch64/armv8.1a-lor.s
llvm/trunk/test/MC/Disassembler/AArch64/armv8.1a-lor.txt
Modified: llvm/trunk/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp?rev=235314&r1=235313&r2=235314&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp Mon Apr 20 11:54:37 2015
@@ -247,7 +247,10 @@ const AArch64NamedImmMapper::Mapping AAr
{"icc_rpr_el1", ICC_RPR_EL1, 0},
{"ich_vtr_el2", ICH_VTR_EL2, 0},
{"ich_eisr_el2", ICH_EISR_EL2, 0},
- {"ich_elsr_el2", ICH_ELSR_EL2, 0}
+ {"ich_elsr_el2", ICH_ELSR_EL2, 0},
+
+ // v8.1a "Limited Ordering Regions" extension-specific system registers
+ {"lorid_el1", LORID_EL1, AArch64::HasV8_1aOps},
};
AArch64SysReg::MRSMapper::MRSMapper() {
@@ -771,7 +774,6 @@ const AArch64NamedImmMapper::Mapping AAr
{"lorea_el1", LOREA_EL1, AArch64::HasV8_1aOps},
{"lorn_el1", LORN_EL1, AArch64::HasV8_1aOps},
{"lorc_el1", LORC_EL1, AArch64::HasV8_1aOps},
- {"lorid_el1", LORID_EL1, AArch64::HasV8_1aOps},
// v8.1a "Virtualization host extensions" system registers
{"ttbr1_el2", TTBR1_EL2, AArch64::HasV8_1aOps},
@@ -804,7 +806,7 @@ const AArch64NamedImmMapper::Mapping AAr
};
uint32_t
-AArch64SysReg::SysRegMapper::fromString(StringRef Name, uint64_t FeatureBits,
+AArch64SysReg::SysRegMapper::fromString(StringRef Name, uint64_t FeatureBits,
bool &Valid) const {
std::string NameLower = Name.lower();
Modified: llvm/trunk/test/MC/AArch64/armv8.1a-lor.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/armv8.1a-lor.s?rev=235314&r1=235313&r2=235314&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/armv8.1a-lor.s (original)
+++ llvm/trunk/test/MC/AArch64/armv8.1a-lor.s Mon Apr 20 11:54:37 2015
@@ -1,4 +1,5 @@
-// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.1a < %s | FileCheck %s
+// RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.1a < %s 2>%t | FileCheck %s
+// RUN: FileCheck --check-prefix=CHECK-ERROR %s <%t
//------------------------------------------------------------------------------
@@ -31,3 +32,48 @@
// CHECK: msr LORN_EL1, x0 // encoding: [0x40,0xa4,0x18,0xd5]
// CHECK: msr LORC_EL1, x0 // encoding: [0x60,0xa4,0x18,0xd5]
// CHECK: mrs x0, LORID_EL1 // encoding: [0xe0,0xa4,0x38,0xd5]
+
+ ldlarb w0,[w1]
+ ldlarh x0,[x1]
+ stllrb w0,[w1]
+ stllrh x0,[x1]
+ stllr w0,[w1]
+ msr LORSA_EL1, #0
+ msr LOREA_EL1, #0
+ msr LORN_EL1, #0
+ msr LORC_EL1, #0
+ msr LORID_EL1, x0
+ mrs LORID_EL1, #0
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: ldlarb w0,[w1]
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: ldlarh x0,[x1]
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: stllrb w0,[w1]
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: stllrh x0,[x1]
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: stllr w0,[w1]
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: msr LORSA_EL1, #0
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: msr LOREA_EL1, #0
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: msr LORN_EL1, #0
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: msr LORC_EL1, #0
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: expected writable system register or pstate
+// CHECK-ERROR: msr LORID_EL1, x0
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: mrs LORID_EL1, #0
+// CHECK-ERROR: ^
Modified: llvm/trunk/test/MC/Disassembler/AArch64/armv8.1a-lor.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Disassembler/AArch64/armv8.1a-lor.txt?rev=235314&r1=235313&r2=235314&view=diff
==============================================================================
--- llvm/trunk/test/MC/Disassembler/AArch64/armv8.1a-lor.txt (original)
+++ llvm/trunk/test/MC/Disassembler/AArch64/armv8.1a-lor.txt Mon Apr 20 11:54:37 2015
@@ -20,9 +20,19 @@
0x20,0xa4,0x18,0xd5
0x40,0xa4,0x18,0xd5
0x60,0xa4,0x18,0xd5
-0xe0,0xa4,0x38,0xd5
+0xe0,0xa4,0x18,0xd5
# CHECK: msr LORSA_EL1, x0
# CHECK: msr LOREA_EL1, x0
# CHECK: msr LORN_EL1, x0
# CHECK: msr LORC_EL1, x0
+# CHECK: msr S3_0_C10_C4_7, x0
+0x00,0xa4,0x38,0xd5
+0x20,0xa4,0x38,0xd5
+0x40,0xa4,0x38,0xd5
+0x60,0xa4,0x38,0xd5
+0xe0,0xa4,0x38,0xd5
+# CHECK: mrs x0, LORSA_EL1
+# CHECK: mrs x0, LOREA_EL1
+# CHECK: mrs x0, LORN_EL1
+# CHECK: mrs x0, LORC_EL1
# CHECK: mrs x0, LORID_EL1
More information about the llvm-commits
mailing list