summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorJoey Gouly <joey.gouly@arm.com>2013-08-27 11:24:16 +0000
committerJoey Gouly <joey.gouly@arm.com>2013-08-27 11:24:16 +0000
commita710d810f51a215aa6232a5623b29e7b2378cf50 (patch)
treec3366a932d344831ad4594fb96207f9bbbae7c1c /llvm/test
parent0df16321b6c65daae85e160b6fc4b8ac4fd04bc1 (diff)
downloadbcm5719-llvm-a710d810f51a215aa6232a5623b29e7b2378cf50.tar.gz
bcm5719-llvm-a710d810f51a215aa6232a5623b29e7b2378cf50.zip
[ARMv8] Add some negative tests for the recent VFP/NEON instructions.
Fix two issues I found while writing these tests. llvm-svn: 189341
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/MC/ARM/invalid-neon-v8.s26
-rw-r--r--llvm/test/MC/ARM/invalid-v8fp.s85
2 files changed, 108 insertions, 3 deletions
diff --git a/llvm/test/MC/ARM/invalid-neon-v8.s b/llvm/test/MC/ARM/invalid-neon-v8.s
new file mode 100644
index 00000000000..bdcb6fbe779
--- /dev/null
+++ b/llvm/test/MC/ARM/invalid-neon-v8.s
@@ -0,0 +1,26 @@
+@ RUN: not llvm-mc -triple armv8 -mattr=+neon -show-encoding < %s 2>&1 | FileCheck %s
+
+vmaxnm.f32 s4, d5, q1
+@ CHECK: error: invalid operand for instruction
+vmaxnm.f64.f64 s4, d5, q1
+@ CHECK: error: invalid operand for instruction
+vmaxnmge.f64.f64 s4, d5, q1
+@ CHECK: error: instruction 'vmaxnm' is not predicable, but condition code specified
+
+vcvta.s32.f32 s1, s2
+@ CHECK: error: instruction requires: V8FP
+vcvtp.u32.f32 s1, d2
+@ CHECK: error: invalid operand for instruction
+vcvtp.f32.u32 d1, q2
+@ CHECK: error: invalid operand for instruction
+vcvtplo.f32.u32 s1, s2
+@ CHECK: error: instruction 'vcvtp' is not predicable, but condition code specified
+
+vrinta.f64.f64 s3, d12
+@ CHECK: error: invalid operand for instruction
+vrintn.f32 d3, q12
+@ CHECK: error: invalid operand for instruction
+vrintz.f32 d3, q12
+@ CHECK: error: invalid operand for instruction
+vrintmge.f32.f32 d3, d4
+@ CHECK: error: instruction 'vrintm' is not predicable, but condition code specified
diff --git a/llvm/test/MC/ARM/invalid-v8fp.s b/llvm/test/MC/ARM/invalid-v8fp.s
index 4dff188b8e5..b5d572e5b5f 100644
--- a/llvm/test/MC/ARM/invalid-v8fp.s
+++ b/llvm/test/MC/ARM/invalid-v8fp.s
@@ -1,10 +1,89 @@
-@ RUN: not llvm-mc -triple armv7 -show-encoding < %s | FileCheck %s
+@ RUN: not llvm-mc -triple armv8 -show-encoding -mattr=+v8fp < %s 2>&1 | FileCheck %s --check-prefix=V8
@ VCVT{B,T}
vcvtt.f64.f16 d3, s1
-@ CHECK-NOT: vcvtt.f64.f16 d3, s1 @ encoding: [0xe0,0x3b,0xb2,0xee]
+@ V7-NOT: vcvtt.f64.f16 d3, s1 @ encoding: [0xe0,0x3b,0xb2,0xee]
vcvtt.f16.f64 s5, d12
-@ CHECK-NOT: vcvtt.f16.f64 s5, d12 @ encoding: [0xcc,0x2b,0xf3,0xee]
+@ V7-NOT: vcvtt.f16.f64 s5, d12 @ encoding: [0xcc,0x2b,0xf3,0xee]
+ vsel.f32 s3, s4, s6
+@ V8: error: invalid instruction
+ vselne.f32 s3, s4, s6
+@ V8: error: invalid instruction
+ vselmi.f32 s3, s4, s6
+@ V8: error: invalid instruction
+ vselpl.f32 s3, s4, s6
+@ V8: error: invalid instruction
+ vselvc.f32 s3, s4, s6
+@ V8: error: invalid instruction
+ vselcs.f32 s3, s4, s6
+@ V8: error: invalid instruction
+ vselcc.f32 s3, s4, s6
+@ V8: error: invalid instruction
+ vselhs.f32 s3, s4, s6
+@ V8: error: invalid instruction
+ vsello.f32 s3, s4, s6
+@ V8: error: invalid instruction
+ vselhi.f32 s3, s4, s6
+@ V8: error: invalid instruction
+ vsells.f32 s3, s4, s6
+@ V8: error: invalid instruction
+ vsellt.f32 s3, s4, s6
+@ V8: error: invalid instruction
+ vselle.f32 s3, s4, s6
+@ V8: error: invalid instruction
+vseleq.f32 s0, d2, d1
+@ V8: error: invalid operand for instruction
+vselgt.f64 s3, s2, s1
+@ V8: error: invalid operand for instruction
+vselgt.f32 s0, q3, q1
+@ V8: error: invalid operand for instruction
+vselgt.f64 q0, s3, q1
+@ V8: error: invalid operand for instruction
+
+vmaxnm.f32 s0, d2, d1
+@ V8: error: invalid operand for instruction
+vminnm.f64 s3, s2, s1
+@ V8: error: invalid operand for instruction
+vmaxnm.f32 s0, q3, q1
+@ V8: error: invalid operand for instruction
+vmaxnm.f64 q0, s3, q1
+@ V8: error: invalid operand for instruction
+vmaxnmgt.f64 q0, s3, q1
+@ CHECK: error: instruction 'vmaxnm' is not predicable, but condition code specified
+
+vcvta.s32.f64 d3, s2
+@ V8: error: invalid operand for instruction
+vcvtp.s32.f32 d3, s2
+@ V8: error: invalid operand for instruction
+vcvtn.u32.f64 d3, s2
+@ V8: error: invalid operand for instruction
+vcvtm.u32.f32 d3, s2
+@ V8: error: invalid operand for instruction
+vcvtnge.u32.f64 d3, s2
+@ V8: error: instruction 'vcvtn' is not predicable, but condition code specified
+
+vcvtbgt.f64.f16 q0, d3
+@ V8: error: invalid operand for instruction
+vcvttlt.f64.f16 s0, s3
+@ V8: error: invalid operand for instruction
+vcvttvs.f16.f64 s0, s3
+@ V8: error: invalid operand for instruction
+vcvtthi.f16.f64 q0, d3
+@ V8: error: invalid operand for instruction
+
+vrintrlo.f32.f32 d3, q0
+@ V8: error: invalid operand for instruction
+vrintxcs.f32.f32 d3, d0
+@ V8: error: instruction requires: NEON
+
+vrinta.f64.f64 s3, q0
+@ V8: error: invalid operand for instruction
+vrintn.f32.f32 d3, d0
+@ V8: error: instruction requires: NEON
+vrintp.f32 q3, q0
+@ V8: error: instruction requires: NEON
+vrintmlt.f32 q3, q0
+@ V8: error: instruction 'vrintm' is not predicable, but condition code specified
OpenPOWER on IntegriCloud