1 // RUN: not llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8.1a -show-encoding < %s 2> %t | FileCheck %s
2 // RUN: FileCheck --check-prefix=CHECK-ERROR < %t %s
6 sqrdmlah v0.4h, v1.4h, v2.4h
7 sqrdmlsh v0.4h, v1.4h, v2.4h
8 sqrdmlah v0.2s, v1.2s, v2.2s
9 sqrdmlsh v0.2s, v1.2s, v2.2s
10 sqrdmlah v0.4s, v1.4s, v2.4s
11 sqrdmlsh v0.4s, v1.4s, v2.4s
12 sqrdmlah v0.8h, v1.8h, v2.8h
13 sqrdmlsh v0.8h, v1.8h, v2.8h
14 // CHECK: sqrdmlah v0.4h, v1.4h, v2.4h // encoding: [0x20,0x84,0x42,0x2e]
15 // CHECK: sqrdmlsh v0.4h, v1.4h, v2.4h // encoding: [0x20,0x8c,0x42,0x2e]
16 // CHECK: sqrdmlah v0.2s, v1.2s, v2.2s // encoding: [0x20,0x84,0x82,0x2e]
17 // CHECK: sqrdmlsh v0.2s, v1.2s, v2.2s // encoding: [0x20,0x8c,0x82,0x2e]
18 // CHECK: sqrdmlah v0.4s, v1.4s, v2.4s // encoding: [0x20,0x84,0x82,0x6e]
19 // CHECK: sqrdmlsh v0.4s, v1.4s, v2.4s // encoding: [0x20,0x8c,0x82,0x6e]
20 // CHECK: sqrdmlah v0.8h, v1.8h, v2.8h // encoding: [0x20,0x84,0x42,0x6e]
21 // CHECK: sqrdmlsh v0.8h, v1.8h, v2.8h // encoding: [0x20,0x8c,0x42,0x6e]
23 sqrdmlah v0.2h, v1.2h, v2.2h
24 sqrdmlsh v0.2h, v1.2h, v2.2h
25 sqrdmlah v0.8s, v1.8s, v2.8s
26 sqrdmlsh v0.8s, v1.8s, v2.8s
27 sqrdmlah v0.2s, v1.4h, v2.8h
28 sqrdmlsh v0.4s, v1.8h, v2.2s
29 // CHECK-ERROR: error: invalid vector kind qualifier
30 // CHECK-ERROR: sqrdmlah v0.2h, v1.2h, v2.2h
32 // CHECK-ERROR: error: invalid vector kind qualifier
33 // CHECK-ERROR: sqrdmlah v0.2h, v1.2h, v2.2h
35 // CHECK-ERROR: error: invalid vector kind qualifier
36 // CHECK-ERROR: sqrdmlah v0.2h, v1.2h, v2.2h
38 // CHECK-ERROR: error: invalid operand for instruction
39 // CHECK-ERROR: sqrdmlah v0.2h, v1.2h, v2.2h
41 // CHECK-ERROR: error: invalid vector kind qualifier
42 // CHECK-ERROR: sqrdmlsh v0.2h, v1.2h, v2.2h
44 // CHECK-ERROR: error: invalid vector kind qualifier
45 // CHECK-ERROR: sqrdmlsh v0.2h, v1.2h, v2.2h
47 // CHECK-ERROR: error: invalid vector kind qualifier
48 // CHECK-ERROR: sqrdmlsh v0.2h, v1.2h, v2.2h
50 // CHECK-ERROR: error: invalid operand for instruction
51 // CHECK-ERROR: sqrdmlsh v0.2h, v1.2h, v2.2h
53 // CHECK-ERROR: error: invalid vector kind qualifier
54 // CHECK-ERROR: sqrdmlah v0.8s, v1.8s, v2.8s
56 // CHECK-ERROR: error: invalid vector kind qualifier
57 // CHECK-ERROR: sqrdmlah v0.8s, v1.8s, v2.8s
59 // CHECK-ERROR: error: invalid vector kind qualifier
60 // CHECK-ERROR: sqrdmlah v0.8s, v1.8s, v2.8s
62 // CHECK-ERROR: error: invalid operand for instruction
63 // CHECK-ERROR: sqrdmlah v0.8s, v1.8s, v2.8s
65 // CHECK-ERROR: error: invalid vector kind qualifier
66 // CHECK-ERROR: sqrdmlsh v0.8s, v1.8s, v2.8s
68 // CHECK-ERROR: error: invalid vector kind qualifier
69 // CHECK-ERROR: sqrdmlsh v0.8s, v1.8s, v2.8s
71 // CHECK-ERROR: error: invalid vector kind qualifier
72 // CHECK-ERROR: sqrdmlsh v0.8s, v1.8s, v2.8s
74 // CHECK-ERROR: error: invalid operand for instruction
75 // CHECK-ERROR: sqrdmlsh v0.8s, v1.8s, v2.8s
77 // CHECK-ERROR: error: invalid operand for instruction
78 // CHECK-ERROR: sqrdmlah v0.2s, v1.4h, v2.8h
80 // CHECK-ERROR: error: invalid operand for instruction
81 // CHECK-ERROR: sqrdmlsh v0.4s, v1.8h, v2.2s
89 // CHECK: sqrdmlah h0, h1, h2 // encoding: [0x20,0x84,0x42,0x7e]
90 // CHECK: sqrdmlsh h0, h1, h2 // encoding: [0x20,0x8c,0x42,0x7e]
91 // CHECK: sqrdmlah s0, s1, s2 // encoding: [0x20,0x84,0x82,0x7e]
92 // CHECK: sqrdmlsh s0, s1, s2 // encoding: [0x20,0x8c,0x82,0x7e]
94 //AdvSIMD RDMA vector by-element
95 sqrdmlah v0.4h, v1.4h, v2.h[3]
96 sqrdmlsh v0.4h, v1.4h, v2.h[3]
97 sqrdmlah v0.2s, v1.2s, v2.s[1]
98 sqrdmlsh v0.2s, v1.2s, v2.s[1]
99 sqrdmlah v0.8h, v1.8h, v2.h[3]
100 sqrdmlsh v0.8h, v1.8h, v2.h[3]
101 sqrdmlah v0.4s, v1.4s, v2.s[3]
102 sqrdmlsh v0.4s, v1.4s, v2.s[3]
103 // CHECK: sqrdmlah v0.4h, v1.4h, v2.h[3] // encoding: [0x20,0xd0,0x72,0x2f]
104 // CHECK: sqrdmlsh v0.4h, v1.4h, v2.h[3] // encoding: [0x20,0xf0,0x72,0x2f]
105 // CHECK: sqrdmlah v0.2s, v1.2s, v2.s[1] // encoding: [0x20,0xd0,0xa2,0x2f]
106 // CHECK: sqrdmlsh v0.2s, v1.2s, v2.s[1] // encoding: [0x20,0xf0,0xa2,0x2f]
107 // CHECK: sqrdmlah v0.8h, v1.8h, v2.h[3] // encoding: [0x20,0xd0,0x72,0x6f]
108 // CHECK: sqrdmlsh v0.8h, v1.8h, v2.h[3] // encoding: [0x20,0xf0,0x72,0x6f]
109 // CHECK: sqrdmlah v0.4s, v1.4s, v2.s[3] // encoding: [0x20,0xd8,0xa2,0x6f]
110 // CHECK: sqrdmlsh v0.4s, v1.4s, v2.s[3] // encoding: [0x20,0xf8,0xa2,0x6f]
112 sqrdmlah v0.4s, v1.2s, v2.s[1]
113 sqrdmlsh v0.2s, v1.2d, v2.s[1]
114 sqrdmlah v0.8h, v1.8h, v2.s[3]
115 sqrdmlsh v0.8h, v1.8h, v2.h[8]
116 // CHECK-ERROR: error: invalid operand for instruction
117 // CHECK-ERROR: sqrdmlah v0.4s, v1.2s, v2.s[1]
119 // CHECK-ERROR: error: invalid operand for instruction
120 // CHECK-ERROR: sqrdmlsh v0.2s, v1.2d, v2.s[1]
122 // CHECK-ERROR: error: invalid operand for instruction
123 // CHECK-ERROR: sqrdmlah v0.8h, v1.8h, v2.s[3]
125 // CHECK-ERROR: error: vector lane must be an integer in range [0, 7].
126 // CHECK-ERROR: sqrdmlsh v0.8h, v1.8h, v2.h[8]
129 //AdvSIMD RDMA scalar by-element
130 sqrdmlah h0, h1, v2.h[3]
131 sqrdmlsh h0, h1, v2.h[3]
132 sqrdmlah s0, s1, v2.s[3]
133 sqrdmlsh s0, s1, v2.s[3]
134 // CHECK: sqrdmlah h0, h1, v2.h[3] // encoding: [0x20,0xd0,0x72,0x7f]
135 // CHECK: sqrdmlsh h0, h1, v2.h[3] // encoding: [0x20,0xf0,0x72,0x7f]
136 // CHECK: sqrdmlah s0, s1, v2.s[3] // encoding: [0x20,0xd8,0xa2,0x7f]
137 // CHECK: sqrdmlsh s0, s1, v2.s[3] // encoding: [0x20,0xf8,0xa2,0x7f]
139 sqrdmlah b0, h1, v2.h[3]
140 sqrdmlah s0, d1, v2.s[3]
141 sqrdmlsh h0, h1, v2.s[3]
142 sqrdmlsh s0, s1, v2.s[4]
143 // CHECK-ERROR: error: invalid operand for instruction
144 // CHECK-ERROR: sqrdmlah b0, h1, v2.h[3]
146 // CHECK-ERROR: error: invalid operand for instruction
147 // CHECK-ERROR: sqrdmlah s0, d1, v2.s[3]
149 // CHECK-ERROR: error: invalid operand for instruction
150 // CHECK-ERROR: sqrdmlsh h0, h1, v2.s[3]
152 // CHECK-ERROR: error: vector lane must be an integer in range [0, 3].
153 // CHECK-ERROR: sqrdmlsh s0, s1, v2.s[4]