• 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// CHECK-ERROR: [[@LINE-1]]:12: error: invalid operand for instruction
25  sqrdmlsh v0.2h, v1.2h, v2.2h
26// CHECK-ERROR: [[@LINE-1]]:12: error: invalid operand for instruction
27  sqrdmlah v0.8s, v1.8s, v2.8s
28// CHECK-ERROR: [[@LINE-1]]:12: error: invalid vector kind qualifier
29// CHECK-ERROR: [[@LINE-2]]:19: error: invalid vector kind qualifier
30// CHECK-ERROR: [[@LINE-3]]:26: error: invalid vector kind qualifier
31  sqrdmlsh v0.8s, v1.8s, v2.8s
32// CHECK-ERROR: [[@LINE-1]]:12: error: invalid vector kind qualifier
33// CHECK-ERROR: [[@LINE-2]]:19: error: invalid vector kind qualifier
34// CHECK-ERROR: [[@LINE-3]]:26: error: invalid vector kind qualifier
35  sqrdmlah v0.2s, v1.4h, v2.8h
36// CHECK-ERROR: [[@LINE-1]]:19: error: invalid operand for instruction
37  sqrdmlsh v0.4s, v1.8h, v2.2s
38// CHECK-ERROR: [[@LINE-1]]:19: error: invalid operand for instruction
39
40  //AdvSIMD RDMA scalar
41  sqrdmlah h0, h1, h2
42  sqrdmlsh h0, h1, h2
43  sqrdmlah s0, s1, s2
44  sqrdmlsh s0, s1, s2
45// CHECK: sqrdmlah h0, h1, h2  // encoding: [0x20,0x84,0x42,0x7e]
46// CHECK: sqrdmlsh h0, h1, h2  // encoding: [0x20,0x8c,0x42,0x7e]
47// CHECK: sqrdmlah s0, s1, s2  // encoding: [0x20,0x84,0x82,0x7e]
48// CHECK: sqrdmlsh s0, s1, s2  // encoding: [0x20,0x8c,0x82,0x7e]
49
50  //AdvSIMD RDMA vector by-element
51  sqrdmlah v0.4h, v1.4h, v2.h[3]
52  sqrdmlsh v0.4h, v1.4h, v2.h[3]
53  sqrdmlah v0.2s, v1.2s, v2.s[1]
54  sqrdmlsh v0.2s, v1.2s, v2.s[1]
55  sqrdmlah v0.8h, v1.8h, v2.h[3]
56  sqrdmlsh v0.8h, v1.8h, v2.h[3]
57  sqrdmlah v0.4s, v1.4s, v2.s[3]
58  sqrdmlsh v0.4s, v1.4s, v2.s[3]
59// CHECK: sqrdmlah v0.4h, v1.4h, v2.h[3]  // encoding: [0x20,0xd0,0x72,0x2f]
60// CHECK: sqrdmlsh v0.4h, v1.4h, v2.h[3]  // encoding: [0x20,0xf0,0x72,0x2f]
61// CHECK: sqrdmlah v0.2s, v1.2s, v2.s[1]  // encoding: [0x20,0xd0,0xa2,0x2f]
62// CHECK: sqrdmlsh v0.2s, v1.2s, v2.s[1]  // encoding: [0x20,0xf0,0xa2,0x2f]
63// CHECK: sqrdmlah v0.8h, v1.8h, v2.h[3]  // encoding: [0x20,0xd0,0x72,0x6f]
64// CHECK: sqrdmlsh v0.8h, v1.8h, v2.h[3]  // encoding: [0x20,0xf0,0x72,0x6f]
65// CHECK: sqrdmlah v0.4s, v1.4s, v2.s[3]  // encoding: [0x20,0xd8,0xa2,0x6f]
66// CHECK: sqrdmlsh v0.4s, v1.4s, v2.s[3]  // encoding: [0x20,0xf8,0xa2,0x6f]
67
68  sqrdmlah v0.4s, v1.2s, v2.s[1]
69  sqrdmlsh v0.2s, v1.2d, v2.s[1]
70  sqrdmlah v0.8h, v1.8h, v2.s[3]
71  sqrdmlsh v0.8h, v1.8h, v2.h[8]
72// CHECK-ERROR: error: invalid operand for instruction
73// CHECK-ERROR:   sqrdmlah v0.4s, v1.2s, v2.s[1]
74// CHECK-ERROR:                   ^
75// CHECK-ERROR: error: invalid operand for instruction
76// CHECK-ERROR:   sqrdmlsh v0.2s, v1.2d, v2.s[1]
77// CHECK-ERROR:                   ^
78// CHECK-ERROR: error: invalid operand for instruction
79// CHECK-ERROR:   sqrdmlah v0.8h, v1.8h, v2.s[3]
80// CHECK-ERROR:                          ^
81// CHECK-ERROR: error: vector lane must be an integer in range [0, 7].
82// CHECK-ERROR:   sqrdmlsh v0.8h, v1.8h, v2.h[8]
83// CHECK-ERROR:                              ^
84
85  //AdvSIMD RDMA scalar by-element
86  sqrdmlah h0, h1, v2.h[3]
87  sqrdmlsh h0, h1, v2.h[3]
88  sqrdmlah s0, s1, v2.s[3]
89  sqrdmlsh s0, s1, v2.s[3]
90// CHECK: sqrdmlah h0, h1, v2.h[3]  // encoding: [0x20,0xd0,0x72,0x7f]
91// CHECK: sqrdmlsh h0, h1, v2.h[3]  // encoding: [0x20,0xf0,0x72,0x7f]
92// CHECK: sqrdmlah s0, s1, v2.s[3]  // encoding: [0x20,0xd8,0xa2,0x7f]
93// CHECK: sqrdmlsh s0, s1, v2.s[3]  // encoding: [0x20,0xf8,0xa2,0x7f]
94
95  sqrdmlah b0, h1, v2.h[3]
96  sqrdmlah s0, d1, v2.s[3]
97  sqrdmlsh h0, h1, v2.s[3]
98  sqrdmlsh s0, s1, v2.s[4]
99// CHECK-ERROR: error: invalid operand for instruction
100// CHECK-ERROR:   sqrdmlah b0, h1, v2.h[3]
101// CHECK-ERROR:            ^
102// CHECK-ERROR: error: invalid operand for instruction
103// CHECK-ERROR:   sqrdmlah s0, d1, v2.s[3]
104// CHECK-ERROR:                ^
105// CHECK-ERROR: error: invalid operand for instruction
106// CHECK-ERROR:   sqrdmlsh h0, h1, v2.s[3]
107// CHECK-ERROR:                    ^
108// CHECK-ERROR: error: vector lane must be an integer in range [0, 3].
109// CHECK-ERROR:   sqrdmlsh s0, s1, v2.s[4]
110// CHECK-ERROR:                        ^
111