summaryrefslogtreecommitdiff
path: root/test/MC/AArch64
diff options
context:
space:
mode:
authorKevin Qin <Kevin.Qin@arm.com>2013-10-11 02:33:55 +0000
committerKevin Qin <Kevin.Qin@arm.com>2013-10-11 02:33:55 +0000
commit767f816b926376bd850a62a28d35343ad0559c91 (patch)
tree93c1d07ecb87066792081ac1cbc72e278c655379 /test/MC/AArch64
parent6c066c044ed5b477cdec3eb3e95267783e6ce757 (diff)
downloadllvm-767f816b926376bd850a62a28d35343ad0559c91.tar.gz
llvm-767f816b926376bd850a62a28d35343ad0559c91.tar.bz2
llvm-767f816b926376bd850a62a28d35343ad0559c91.tar.xz
Implement aarch64 neon instruction set AdvSIMD (copy).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192410 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC/AArch64')
-rw-r--r--test/MC/AArch64/neon-diagnostics.s185
-rw-r--r--test/MC/AArch64/neon-simd-copy.s38
2 files changed, 223 insertions, 0 deletions
diff --git a/test/MC/AArch64/neon-diagnostics.s b/test/MC/AArch64/neon-diagnostics.s
index 086d4876e3..2af7798077 100644
--- a/test/MC/AArch64/neon-diagnostics.s
+++ b/test/MC/AArch64/neon-diagnostics.s
@@ -4101,3 +4101,188 @@
// CHECK-ERROR: error: invalid operand for instruction
// CHECK-ERROR: st4 {v31.2s-v1.2s}, [x31]
// CHECK-ERROR: ^
+
+ ins v2.b[16], w1
+ ins v7.h[8], w14
+ ins v20.s[5], w30
+ ins v1.d[2], x7
+ ins v2.b[3], b1
+ ins v7.h[2], h14
+ ins v20.s[1], s30
+ ins v1.d[0], d7
+
+// CHECK-ERROR: error: lane number incompatible with layout
+// CHECK-ERROR: ins v2.b[16], w1
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: lane number incompatible with layout
+// CHECK-ERROR: ins v7.h[8], w14
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: lane number incompatible with layout
+// CHECK-ERROR: ins v20.s[5], w30
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: lane number incompatible with layout
+// CHECK-ERROR: ins v1.d[2], x7
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: ins v2.b[3], b1
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: ins v7.h[2], h14
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: ins v20.s[1], s30
+// CHECK-ERROR: ^
+// CHECK-ERROR: error: invalid operand for instruction
+// CHECK-ERROR: ins v1.d[0], d7
+// CHECK-ERROR: ^
+
+ smov w1, v0.b[16]
+ smov w14, v6.h[8]
+ smov x1, v0.b[16]
+ smov x14, v6.h[8]
+ smov x20, v9.s[5]
+ smov w1, v0.d[0]
+ smov w14, v6.d[1]
+ smov x1, v0.d[0]
+ smov x14, v6.d[1]
+ smov x20, v9.d[0]
+
+// CHECK-ERROR error: lane number incompatible with layout
+// CHECK-ERROR smov w1, v0.b[16]
+// CHECK-ERROR ^
+// CHECK-ERROR error: lane number incompatible with layout
+// CHECK-ERROR smov w14, v6.h[8]
+// CHECK-ERROR ^
+// CHECK-ERROR error: lane number incompatible with layout
+// CHECK-ERROR smov x1, v0.b[16]
+// CHECK-ERROR ^
+// CHECK-ERROR error: lane number incompatible with layout
+// CHECK-ERROR smov x14, v6.h[8]
+// CHECK-ERROR ^
+// CHECK-ERROR error: lane number incompatible with layout
+// CHECK-ERROR smov x20, v9.s[5]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR smov w1, v0.d[0]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR smov w14, v6.d[1]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR smov x1, v0.d[0]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR smov x14, v6.d[1]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR smov x20, v9.d[0]
+// CHECK-ERROR ^
+
+ umov w1, v0.b[16]
+ umov w14, v6.h[8]
+ umov w20, v9.s[5]
+ umov x7, v18.d[3]
+ umov w1, v0.d[0]
+ umov s20, v9.s[2]
+ umov d7, v18.d[1]
+
+// CHECK-ERROR error: lane number incompatible with layout
+// CHECK-ERROR umov w1, v0.b[16]
+// CHECK-ERROR ^
+// CHECK-ERROR error: lane number incompatible with layout
+// CHECK-ERROR umov w14, v6.h[8]
+// CHECK-ERROR ^
+// CHECK-ERROR error: lane number incompatible with layout
+// CHECK-ERROR umov w20, v9.s[5]
+// CHECK-ERROR ^
+// CHECK-ERROR error: lane number incompatible with layout
+// CHECK-ERROR umov x7, v18.d[3]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR umov w1, v0.d[0]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR umov s20, v9.s[2]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR umov d7, v18.d[1]
+// CHECK-ERROR ^
+
+ Ins v1.h[2], v3.b[6]
+ Ins v6.h[7], v7.s[2]
+ Ins v15.d[0], v22.s[2]
+ Ins v0.d[0], v4.b[1]
+
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR Ins v1.h[2], v3.b[6]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR Ins v6.h[7], v7.s[2]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR Ins v15.d[0], v22.s[2]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR Ins v0.d[0], v4.b[1]
+// CHECK-ERROR ^
+
+ dup v1.8h, v2.b[2]
+ dup v11.4s, v7.h[7]
+ dup v17.2d, v20.s[0]
+ dup v1.16b, v2.h[2]
+ dup v11.8h, v7.s[3]
+ dup v17.4s, v20.d[0]
+ dup v5.2d, v1.b[1]
+
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR dup v1.8h, v2.b[2]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR dup v11.4s, v7.h[7]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR dup v17.2d, v20.s[0]
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR dup v1.16b, v2.h[2]
+// CHECK-ERROR ^
+// CHECK-ERROR invalid operand for instruction
+// CHECK-ERROR dup v11.8h, v7.s[3]
+// CHECK-ERROR ^
+// CHECK-ERROR invalid operand for instruction
+// CHECK-ERROR dup v17.4s, v20.d[0]
+// CHECK-ERROR ^
+// CHECK-ERROR invalid operand for instruction
+// CHECK-ERROR dup v5.2d, v1.b[1]
+// CHECK-ERROR ^
+
+ dup v1.8b, b1
+ dup v11.4h, h14
+ dup v17.2s, s30
+ dup v1.16b, d2
+ dup v11.8s, w16
+ dup v17.4d, w28
+ dup v5.2d, w0
+
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR dup v1.8b, b1
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR dup v11.4h, h14
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR dup v17.2s, s30
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR dup v1.16b, d2
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR dup v11.8s, w16
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR dup v17.4d, w28
+// CHECK-ERROR ^
+// CHECK-ERROR error: invalid operand for instruction
+// CHECK-ERROR dup v5.2d, w0
+// CHECK-ERROR ^
+
diff --git a/test/MC/AArch64/neon-simd-copy.s b/test/MC/AArch64/neon-simd-copy.s
index 44b502769c..7edcc1b2a2 100644
--- a/test/MC/AArch64/neon-simd-copy.s
+++ b/test/MC/AArch64/neon-simd-copy.s
@@ -60,6 +60,44 @@
// CHECK: ins v15.s[3], v22.s[2] // encoding: [0xcf,0x5e,0x1c,0x6e]
// CHECK: ins v0.d[0], v4.d[1] // encoding: [0x80,0x44,0x08,0x6e]
+//------------------------------------------------------------------------------
+// Duplicate to all lanes( vector, from element)
+//------------------------------------------------------------------------------
+ dup v1.8b, v2.b[2]
+ dup v11.4h, v7.h[7]
+ dup v17.2s, v20.s[0]
+ dup v1.16b, v2.b[2]
+ dup v11.8h, v7.h[7]
+ dup v17.4s, v20.s[0]
+ dup v5.2d, v1.d[1]
+
+// CHECK: dup v1.8b, v2.b[2] // encoding: [0x41,0x04,0x05,0x0e]
+// CHECK: dup v11.4h, v7.h[7] // encoding: [0xeb,0x04,0x1e,0x0e]
+// CHECK: dup v17.2s, v20.s[0] // encoding: [0x91,0x06,0x04,0x0e]
+// CHECK: dup v1.16b, v2.b[2] // encoding: [0x41,0x04,0x05,0x4e]
+// CHECK: dup v11.8h, v7.h[7] // encoding: [0xeb,0x04,0x1e,0x4e]
+// CHECK: dup v17.4s, v20.s[0] // encoding: [0x91,0x06,0x04,0x4e]
+// CHECK: dup v5.2d, v1.d[1] // encoding: [0x25,0x04,0x18,0x4e]
+
+//------------------------------------------------------------------------------
+// Duplicate to all lanes( vector, from main)
+//------------------------------------------------------------------------------
+ dup v1.8b, w1
+ dup v11.4h, w14
+ dup v17.2s, w30
+ dup v1.16b, w2
+ dup v11.8h, w16
+ dup v17.4s, w28
+ dup v5.2d, x0
+
+// CHECK: dup v1.8b, w1 // encoding: [0x21,0x0c,0x01,0x0e]
+// CHECK: dup v11.4h, w14 // encoding: [0xcb,0x0d,0x0a,0x0e]
+// CHECK: dup v17.2s, w30 // encoding: [0xd1,0x0f,0x14,0x0e]
+// CHECK: dup v1.16b, w2 // encoding: [0x41,0x0c,0x01,0x4e]
+// CHECK: dup v11.8h, w16 // encoding: [0x0b,0x0e,0x0a,0x4e]
+// CHECK: dup v17.4s, w28 // encoding: [0x91,0x0f,0x14,0x4e]
+// CHECK: dup v5.2d, x0 // encoding: [0x05,0x0c,0x08,0x4e]
+