• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3  .text
4
5  //AdvSIMD RDMA vector
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]
22
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 operand for instruction
30// CHECK-ERROR:   sqrdmlah v0.2h, v1.2h, v2.2h
31// CHECK-ERROR:            ^
32// CHECK-ERROR: error: invalid operand for instruction
33// CHECK-ERROR:   sqrdmlsh v0.2h, v1.2h, v2.2h
34// CHECK-ERROR:            ^
35// CHECK-ERROR: error: invalid vector kind qualifier
36// CHECK-ERROR:   sqrdmlah v0.8s, v1.8s, v2.8s
37// CHECK-ERROR:            ^
38// CHECK-ERROR: error: invalid vector kind qualifier
39// CHECK-ERROR:   sqrdmlah v0.8s, v1.8s, v2.8s
40// CHECK-ERROR:                   ^
41// CHECK-ERROR: error: invalid vector kind qualifier
42// CHECK-ERROR:   sqrdmlah v0.8s, v1.8s, v2.8s
43// CHECK-ERROR:                          ^
44// CHECK-ERROR: error: invalid operand for instruction
45// CHECK-ERROR:   sqrdmlah v0.8s, v1.8s, v2.8s
46// CHECK-ERROR:            ^
47// CHECK-ERROR: error: invalid vector kind qualifier
48// CHECK-ERROR:   sqrdmlsh v0.8s, v1.8s, v2.8s
49// CHECK-ERROR:            ^
50// CHECK-ERROR: error: invalid vector kind qualifier
51// CHECK-ERROR:   sqrdmlsh v0.8s, v1.8s, v2.8s
52// CHECK-ERROR:                   ^
53// CHECK-ERROR: error: invalid vector kind qualifier
54// CHECK-ERROR:   sqrdmlsh v0.8s, v1.8s, v2.8s
55// CHECK-ERROR:                          ^
56// CHECK-ERROR: error: invalid operand for instruction
57// CHECK-ERROR:   sqrdmlsh v0.8s, v1.8s, v2.8s
58// CHECK-ERROR:            ^
59// CHECK-ERROR: error: invalid operand for instruction
60// CHECK-ERROR:   sqrdmlah v0.2s, v1.4h, v2.8h
61// CHECK-ERROR:                   ^
62// CHECK-ERROR: error: invalid operand for instruction
63// CHECK-ERROR:   sqrdmlsh v0.4s, v1.8h, v2.2s
64// CHECK-ERROR:                   ^
65
66  //AdvSIMD RDMA scalar
67  sqrdmlah h0, h1, h2
68  sqrdmlsh h0, h1, h2
69  sqrdmlah s0, s1, s2
70  sqrdmlsh s0, s1, s2
71// CHECK: sqrdmlah h0, h1, h2  // encoding: [0x20,0x84,0x42,0x7e]
72// CHECK: sqrdmlsh h0, h1, h2  // encoding: [0x20,0x8c,0x42,0x7e]
73// CHECK: sqrdmlah s0, s1, s2  // encoding: [0x20,0x84,0x82,0x7e]
74// CHECK: sqrdmlsh s0, s1, s2  // encoding: [0x20,0x8c,0x82,0x7e]
75
76  //AdvSIMD RDMA vector by-element
77  sqrdmlah v0.4h, v1.4h, v2.h[3]
78  sqrdmlsh v0.4h, v1.4h, v2.h[3]
79  sqrdmlah v0.2s, v1.2s, v2.s[1]
80  sqrdmlsh v0.2s, v1.2s, v2.s[1]
81  sqrdmlah v0.8h, v1.8h, v2.h[3]
82  sqrdmlsh v0.8h, v1.8h, v2.h[3]
83  sqrdmlah v0.4s, v1.4s, v2.s[3]
84  sqrdmlsh v0.4s, v1.4s, v2.s[3]
85// CHECK: sqrdmlah v0.4h, v1.4h, v2.h[3]  // encoding: [0x20,0xd0,0x72,0x2f]
86// CHECK: sqrdmlsh v0.4h, v1.4h, v2.h[3]  // encoding: [0x20,0xf0,0x72,0x2f]
87// CHECK: sqrdmlah v0.2s, v1.2s, v2.s[1]  // encoding: [0x20,0xd0,0xa2,0x2f]
88// CHECK: sqrdmlsh v0.2s, v1.2s, v2.s[1]  // encoding: [0x20,0xf0,0xa2,0x2f]
89// CHECK: sqrdmlah v0.8h, v1.8h, v2.h[3]  // encoding: [0x20,0xd0,0x72,0x6f]
90// CHECK: sqrdmlsh v0.8h, v1.8h, v2.h[3]  // encoding: [0x20,0xf0,0x72,0x6f]
91// CHECK: sqrdmlah v0.4s, v1.4s, v2.s[3]  // encoding: [0x20,0xd8,0xa2,0x6f]
92// CHECK: sqrdmlsh v0.4s, v1.4s, v2.s[3]  // encoding: [0x20,0xf8,0xa2,0x6f]
93
94  sqrdmlah v0.4s, v1.2s, v2.s[1]
95  sqrdmlsh v0.2s, v1.2d, v2.s[1]
96  sqrdmlah v0.8h, v1.8h, v2.s[3]
97  sqrdmlsh v0.8h, v1.8h, v2.h[8]
98// CHECK-ERROR: error: invalid operand for instruction
99// CHECK-ERROR:   sqrdmlah v0.4s, v1.2s, v2.s[1]
100// CHECK-ERROR:                   ^
101// CHECK-ERROR: error: invalid operand for instruction
102// CHECK-ERROR:   sqrdmlsh v0.2s, v1.2d, v2.s[1]
103// CHECK-ERROR:                   ^
104// CHECK-ERROR: error: invalid operand for instruction
105// CHECK-ERROR:   sqrdmlah v0.8h, v1.8h, v2.s[3]
106// CHECK-ERROR:                          ^
107// CHECK-ERROR: error: vector lane must be an integer in range [0, 7].
108// CHECK-ERROR:   sqrdmlsh v0.8h, v1.8h, v2.h[8]
109// CHECK-ERROR:                              ^
110
111  //AdvSIMD RDMA scalar by-element
112  sqrdmlah h0, h1, v2.h[3]
113  sqrdmlsh h0, h1, v2.h[3]
114  sqrdmlah s0, s1, v2.s[3]
115  sqrdmlsh s0, s1, v2.s[3]
116// CHECK: sqrdmlah h0, h1, v2.h[3]  // encoding: [0x20,0xd0,0x72,0x7f]
117// CHECK: sqrdmlsh h0, h1, v2.h[3]  // encoding: [0x20,0xf0,0x72,0x7f]
118// CHECK: sqrdmlah s0, s1, v2.s[3]  // encoding: [0x20,0xd8,0xa2,0x7f]
119// CHECK: sqrdmlsh s0, s1, v2.s[3]  // encoding: [0x20,0xf8,0xa2,0x7f]
120
121  sqrdmlah b0, h1, v2.h[3]
122  sqrdmlah s0, d1, v2.s[3]
123  sqrdmlsh h0, h1, v2.s[3]
124  sqrdmlsh s0, s1, v2.s[4]
125// CHECK-ERROR: error: invalid operand for instruction
126// CHECK-ERROR:   sqrdmlah b0, h1, v2.h[3]
127// CHECK-ERROR:            ^
128// CHECK-ERROR: error: invalid operand for instruction
129// CHECK-ERROR:   sqrdmlah s0, d1, v2.s[3]
130// CHECK-ERROR:                ^
131// CHECK-ERROR: error: invalid operand for instruction
132// CHECK-ERROR:   sqrdmlsh h0, h1, v2.s[3]
133// CHECK-ERROR:                    ^
134// CHECK-ERROR: error: vector lane must be an integer in range [0, 3].
135// CHECK-ERROR:   sqrdmlsh s0, s1, v2.s[4]
136// CHECK-ERROR:                        ^
137