summaryrefslogtreecommitdiffstats
path: root/llvm/test/MC
diff options
context:
space:
mode:
authorOliver Stannard <oliver.stannard@arm.com>2018-09-27 13:47:40 +0000
committerOliver Stannard <oliver.stannard@arm.com>2018-09-27 13:47:40 +0000
commit224428c06a24303b2200aa98d719f080570fcb9f (patch)
tree25c0c4961fc15264a0047b3832c0956337f57404 /llvm/test/MC
parent382c935c4231eaf7b820cb207c9fbd0c50505181 (diff)
downloadbcm5719-llvm-224428c06a24303b2200aa98d719f080570fcb9f.tar.gz
bcm5719-llvm-224428c06a24303b2200aa98d719f080570fcb9f.zip
[AArch64][v8.5A] Add prediction invalidation instructions to AArch64
This adds new system instructions which act as barriers to speculative execution based on earlier execution within a particular execution context. Patch by Pablo Barrio! Differential revision: https://reviews.llvm.org/D52479 llvm-svn: 343214
Diffstat (limited to 'llvm/test/MC')
-rw-r--r--llvm/test/MC/AArch64/armv8.5a-predctrl-error.s20
-rw-r--r--llvm/test/MC/AArch64/armv8.5a-predctrl.s18
-rw-r--r--llvm/test/MC/Disassembler/AArch64/armv8.5a-predctrl.txt15
3 files changed, 53 insertions, 0 deletions
diff --git a/llvm/test/MC/AArch64/armv8.5a-predctrl-error.s b/llvm/test/MC/AArch64/armv8.5a-predctrl-error.s
new file mode 100644
index 00000000000..0fd49b02bee
--- /dev/null
+++ b/llvm/test/MC/AArch64/armv8.5a-predctrl-error.s
@@ -0,0 +1,20 @@
+// RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+predctrl < %s 2>&1| FileCheck %s
+
+cfp rctx
+dvp rctx
+cpp rctx
+
+// CHECK: specified cfp op requires a register
+// CHECK: specified dvp op requires a register
+// CHECK: specified cpp op requires a register
+
+cfp x0, x1
+dvp x1, x2
+cpp x2, x3
+
+// CHECK: invalid operand for prediction restriction instruction
+// CHECK-NEXT: cfp
+// CHECK: invalid operand for prediction restriction instruction
+// CHECK-NEXT: dvp
+// CHECK: invalid operand for prediction restriction instruction
+// CHECK-NEXT: cpp
diff --git a/llvm/test/MC/AArch64/armv8.5a-predctrl.s b/llvm/test/MC/AArch64/armv8.5a-predctrl.s
new file mode 100644
index 00000000000..af7dda76862
--- /dev/null
+++ b/llvm/test/MC/AArch64/armv8.5a-predctrl.s
@@ -0,0 +1,18 @@
+// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+predctrl < %s | FileCheck %s
+// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.5a < %s | FileCheck %s
+// RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=-predctrl < %s 2>&1 | FileCheck %s --check-prefix=NOPREDCTRL
+
+cfp rctx, x0
+dvp rctx, x1
+cpp rctx, x2
+
+// CHECK: cfp rctx, x0 // encoding: [0x80,0x73,0x0b,0xd5]
+// CHECK: dvp rctx, x1 // encoding: [0xa1,0x73,0x0b,0xd5]
+// CHECK: cpp rctx, x2 // encoding: [0xe2,0x73,0x0b,0xd5]
+
+// NOPREDCTRL: CFPRCTX requires predctrl
+// NOPREDCTRL-NEXT: cfp
+// NOPREDCTRL: DVPRCTX requires predctrl
+// NOPREDCTRL-NEXT: dvp
+// NOPREDCTRL: CPPRCTX requires predctrl
+// NOPREDCTRL-NEXT: cpp
diff --git a/llvm/test/MC/Disassembler/AArch64/armv8.5a-predctrl.txt b/llvm/test/MC/Disassembler/AArch64/armv8.5a-predctrl.txt
new file mode 100644
index 00000000000..ecfdeec86f1
--- /dev/null
+++ b/llvm/test/MC/Disassembler/AArch64/armv8.5a-predctrl.txt
@@ -0,0 +1,15 @@
+# RUN: llvm-mc -triple=aarch64 -mattr=+predctrl -disassemble < %s | FileCheck %s
+# RUN: llvm-mc -triple=aarch64 -mattr=+v8.5a -disassemble < %s | FileCheck %s
+# RUN: llvm-mc -triple=aarch64 -mattr=-predctrl -disassemble < %s 2>&1 | FileCheck %s --check-prefix=NOSB
+
+[0x80 0x73 0x0b 0xd5]
+[0xa1 0x73 0x0b 0xd5]
+[0xe2 0x73 0x0b 0xd5]
+
+# CHECK: cfp rctx, x0
+# CHECK: dvp rctx, x1
+# CHECK: cpp rctx, x2
+
+# NOSB: sys #3, c7, c3, #4, x0
+# NOSB: sys #3, c7, c3, #5, x1
+# NOSB: sys #3, c7, c3, #7, x2
OpenPOWER on IntegriCloud