summaryrefslogtreecommitdiffstats
path: root/llvm/test/MC
diff options
context:
space:
mode:
authorSam Parker <sam.parker@arm.com>2017-08-22 11:08:21 +0000
committerSam Parker <sam.parker@arm.com>2017-08-22 11:08:21 +0000
commit6dc3fcb1c6cf88c693034cfa16a4e756d2d7ee37 (patch)
tree6e93c22d6ede4db62758c0a09b702a0633b1e2f9 /llvm/test/MC
parentc070c73d5ee4a3830b93fe303f8436ad4f0d972a (diff)
downloadbcm5719-llvm-6dc3fcb1c6cf88c693034cfa16a4e756d2d7ee37.tar.gz
bcm5719-llvm-6dc3fcb1c6cf88c693034cfa16a4e756d2d7ee37.zip
[ARM][AArch64] v8.3-A Javascript Conversion
Armv8.3-A adds instructions that convert a double-precision floating point number to a signed 32-bit integer with round towards zero, designed for improving Javascript performance. Differential Revision: https://reviews.llvm.org/D36785 llvm-svn: 311448
Diffstat (limited to 'llvm/test/MC')
-rw-r--r--llvm/test/MC/AArch64/armv8.3a-js.s10
-rw-r--r--llvm/test/MC/ARM/armv8.3a-js.s16
-rw-r--r--llvm/test/MC/Disassembler/AArch64/armv8.3a-js.txt3
-rw-r--r--llvm/test/MC/Disassembler/ARM/armv8.3a-js-arm.txt10
-rw-r--r--llvm/test/MC/Disassembler/ARM/armv8.3a-js-thumb.txt10
5 files changed, 49 insertions, 0 deletions
diff --git a/llvm/test/MC/AArch64/armv8.3a-js.s b/llvm/test/MC/AArch64/armv8.3a-js.s
new file mode 100644
index 00000000000..23572890338
--- /dev/null
+++ b/llvm/test/MC/AArch64/armv8.3a-js.s
@@ -0,0 +1,10 @@
+// RUN: llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.3a < %s 2>&1 | FileCheck %s
+// RUN: not llvm-mc -triple aarch64-none-linux-gnu < %s 2> %t
+// RUN: FileCheck --check-prefix=CHECK-REQ < %t %s
+// RUN: not llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8.3a,-fp-armv8 < %s 2> %t
+// RUN: FileCheck --check-prefix=CHECK-NOFP < %t %s
+
+ fjcvtzs w0, d0
+// CHECK: fjcvtzs w0, d0 // encoding: [0x00,0x00,0x7e,0x1e]
+// CHECK-REQ: error: instruction requires: armv8.3a
+// CHECK-NOFP: error: instruction requires: fp-armv8
diff --git a/llvm/test/MC/ARM/armv8.3a-js.s b/llvm/test/MC/ARM/armv8.3a-js.s
new file mode 100644
index 00000000000..fbbdd981864
--- /dev/null
+++ b/llvm/test/MC/ARM/armv8.3a-js.s
@@ -0,0 +1,16 @@
+// RUN: llvm-mc -triple arm-none-none-eabi -show-encoding -mattr=+v8.3a,+fp-armv8 < %s 2>&1 | FileCheck %s --check-prefix=ARM
+// RUN: llvm-mc -triple thumb-none-none-eabi -show-encoding -mattr=+v8.3a,+fp-armv8 < %s 2>&1 | FileCheck %s --check-prefix=THUMB
+// RUN: not llvm-mc -triple arm-none-none-eabi -show-encoding -mattr=+v8.2a,+fp-armv8 < %s 2>&1 | FileCheck --check-prefix=REQ-V83 %s
+// RUN: not llvm-mc -triple arm-none-none-eabi -show-encoding -mattr=+v8.3a,-fp-armv8 < %s 2>&1 | FileCheck --check-prefix=REQ-FP %s
+
+ vjcvt.s32.f64 s1, d2
+// ARM: vjcvt.s32.f64 s1, d2 @ encoding: [0xc2,0x0b,0xf9,0xee]
+// THUMB: vjcvt.s32.f64 s1, d2 @ encoding: [0xf9,0xee,0xc2,0x0b]
+// REQ-V83: error: instruction requires: armv8.3a
+// REQ-FP: error: instruction requires: FPARMv8
+
+ vjcvt.s32.f64 s17, d18
+// ARM: vjcvt.s32.f64 s17, d18 @ encoding: [0xe2,0x8b,0xf9,0xee]
+// THUMB: vjcvt.s32.f64 s17, d18 @ encoding: [0xf9,0xee,0xe2,0x8b]
+// REQ-V83: error: instruction requires: armv8.3a
+// REQ-FP: error: instruction requires: FPARMv8
diff --git a/llvm/test/MC/Disassembler/AArch64/armv8.3a-js.txt b/llvm/test/MC/Disassembler/AArch64/armv8.3a-js.txt
new file mode 100644
index 00000000000..a0d40b80584
--- /dev/null
+++ b/llvm/test/MC/Disassembler/AArch64/armv8.3a-js.txt
@@ -0,0 +1,3 @@
+# RUN: llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8.3a --disassemble < %s | FileCheck %s
+# CHECK: fjcvtzs w0, d0
+[0x00,0x00,0x7e,0x1e]
diff --git a/llvm/test/MC/Disassembler/ARM/armv8.3a-js-arm.txt b/llvm/test/MC/Disassembler/ARM/armv8.3a-js-arm.txt
new file mode 100644
index 00000000000..e8750036451
--- /dev/null
+++ b/llvm/test/MC/Disassembler/ARM/armv8.3a-js-arm.txt
@@ -0,0 +1,10 @@
+# RUN: llvm-mc -triple arm-none-eabi -mattr=+v8.3a,+fp-armv8 --disassemble < %s 2>&1 | FileCheck %s
+# RUN: not llvm-mc -triple arm-none-eabi -mattr=+v8.2a,+fp-armv8 --disassemble < %s 2>&1 | FileCheck %s --check-prefix=UNDEF
+# RUN: not llvm-mc -triple arm-none-eabi -mattr=+v8.3a,-fp-armv8 --disassemble < %s 2>&1 | FileCheck %s --check-prefix=UNDEF
+
+[0xc2,0x0b,0xf9,0xee]
+# CHECK: vjcvt.s32.f64 s1, d2
+# UNDEF: :[[@LINE-2]]:{{[0-9]+}}: warning: invalid instruction encoding
+[0xe2,0x8b,0xf9,0xee]
+# CHECK: vjcvt.s32.f64 s17, d18
+# UNDEF: :[[@LINE-2]]:{{[0-9]+}}: warning: invalid instruction encoding
diff --git a/llvm/test/MC/Disassembler/ARM/armv8.3a-js-thumb.txt b/llvm/test/MC/Disassembler/ARM/armv8.3a-js-thumb.txt
new file mode 100644
index 00000000000..b21f01232ba
--- /dev/null
+++ b/llvm/test/MC/Disassembler/ARM/armv8.3a-js-thumb.txt
@@ -0,0 +1,10 @@
+# RUN: llvm-mc -triple thumb-none-eabi -mattr=+v8.3a,+fp-armv8 --disassemble < %s 2>&1 | FileCheck %s
+# RUN: not llvm-mc -triple thumb-none-eabi -mattr=+v8.2a,+fp-armv8 --disassemble < %s 2>&1 | FileCheck %s --check-prefix=UNDEF
+# RUN: not llvm-mc -triple thumb-none-eabi -mattr=+v8.3a,-fp-armv8 --disassemble < %s 2>&1 | FileCheck %s --check-prefix=UNDEF
+
+[0xf9,0xee,0xc2,0x0b]
+# CHECK: vjcvt.s32.f64 s1, d2
+# UNDEF: :[[@LINE-2]]:{{[0-9]+}}: warning: invalid instruction encoding
+[0xf9,0xee,0xe2,0x8b]
+# CHECK: vjcvt.s32.f64 s17, d18
+# UNDEF: :[[@LINE-2]]:{{[0-9]+}}: warning: invalid instruction encoding
OpenPOWER on IntegriCloud