[ARM] Better OR's for MVE compares
[llvm-core.git] / test / MC / AArch64 / armv8.1a-atomic.s
blobbcfd3e7d166a5e18406417cfe76d1a9c3ca6367e
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
5 //8 bits
6 casb w0, w1, [x2]
7 casab w0, w1, [x2]
8 caslb w0, w1, [x2]
9 casalb w0, w1, [x2]
11 //CHECK: casb w0, w1, [x2] // encoding: [0x41,0x7c,0xa0,0x08]
12 //CHECK: casab w0, w1, [x2] // encoding: [0x41,0x7c,0xe0,0x08]
13 //CHECK: caslb w0, w1, [x2] // encoding: [0x41,0xfc,0xa0,0x08]
14 //CHECK: casalb w0, w1, [x2] // encoding: [0x41,0xfc,0xe0,0x08]
16 casb w0, w1, [w2]
17 casalb x0, x1, [x2]
18 //CHECK-ERROR: error: invalid operand for instruction
19 //CHECK-ERROR: casb w0, w1, [w2]
20 //CHECK-ERROR: ^
21 //CHECK-ERROR: error: invalid operand for instruction
22 //CHECK-ERROR: casalb x0, x1, [x2]
23 //CHECK-ERROR: ^
25 //16 bits
26 cash w0, w1, [x2]
27 casah w0, w1, [x2]
28 caslh w0, w1, [x2]
29 casalh w0, w1, [x2]
31 //CHECK: cash w0, w1, [x2] // encoding: [0x41,0x7c,0xa0,0x48]
32 //CHECK: casah w0, w1, [x2] // encoding: [0x41,0x7c,0xe0,0x48]
33 //CHECK: caslh w0, w1, [x2] // encoding: [0x41,0xfc,0xa0,0x48]
34 //CHECK: casalh w0, w1, [x2] // encoding: [0x41,0xfc,0xe0,0x48]
36 //32 bits
37 cas w0, w1, [x2]
38 casa w0, w1, [x2]
39 casl w0, w1, [x2]
40 casal w0, w1, [x2]
42 //CHECK: cas w0, w1, [x2] // encoding: [0x41,0x7c,0xa0,0x88]
43 //CHECK: casa w0, w1, [x2] // encoding: [0x41,0x7c,0xe0,0x88]
44 //CHECK: casl w0, w1, [x2] // encoding: [0x41,0xfc,0xa0,0x88]
45 //CHECK: casal w0, w1, [x2] // encoding: [0x41,0xfc,0xe0,0x88]
47 cas w0, w1, [w2]
48 casl w0, x1, [x2]
50 //CHECK-ERROR: error: invalid operand for instruction
51 //CHECK-ERROR: cas w0, w1, [w2]
52 //CHECK-ERROR: ^
53 //CHECK-ERROR: error: invalid operand for instruction
54 //CHECK-ERROR: casl w0, x1, [x2]
55 //CHECK-ERROR: ^
57 //64 bits
58 cas x0, x1, [x2]
59 casa x0, x1, [x2]
60 casl x0, x1, [x2]
61 casal x0, x1, [x2]
63 //CHECK: cas x0, x1, [x2] // encoding: [0x41,0x7c,0xa0,0xc8]
64 //CHECK: casa x0, x1, [x2] // encoding: [0x41,0x7c,0xe0,0xc8]
65 //CHECK: casl x0, x1, [x2] // encoding: [0x41,0xfc,0xa0,0xc8]
66 //CHECK: casal x0, x1, [x2] // encoding: [0x41,0xfc,0xe0,0xc8]
68 casa x0, x1, [w2]
69 casal x0, w1, [x2]
71 //CHECK-ERROR: error: invalid operand for instruction
72 //CHECK-ERROR: casa x0, x1, [w2]
73 //CHECK-ERROR: ^
74 //CHECK-ERROR: error: invalid operand for instruction
75 //CHECK-ERROR: casal x0, w1, [x2]
76 //CHECK-ERROR: ^
78 // LD<OP> intructions
79 ldadda x0, x1, [x2]
80 ldclrl x0, x1, [x2]
81 ldeoral x0, x1, [x2]
82 ldset x0, x1, [x2]
83 ldsmaxa w0, w1, [x2]
84 ldsminlb w0, w1, [x2]
85 ldumaxalh w0, w1, [x2]
86 ldumin w0, w1, [x2]
87 ldsminb w2, w3, [x5]
88 //CHECK: ldadda x0, x1, [x2] // encoding: [0x41,0x00,0xa0,0xf8]
89 //CHECK: ldclrl x0, x1, [x2] // encoding: [0x41,0x10,0x60,0xf8]
90 //CHECK: ldeoral x0, x1, [x2] // encoding: [0x41,0x20,0xe0,0xf8]
91 //CHECK: ldset x0, x1, [x2] // encoding: [0x41,0x30,0x20,0xf8]
92 //CHECK: ldsmaxa w0, w1, [x2] // encoding: [0x41,0x40,0xa0,0xb8]
93 //CHECK: ldsminlb w0, w1, [x2] // encoding: [0x41,0x50,0x60,0x38]
94 //CHECK: ldumaxalh w0, w1, [x2] // encoding: [0x41,0x60,0xe0,0x78]
95 //CHECK: ldumin w0, w1, [x2] // encoding: [0x41,0x70,0x20,0xb8]
96 //CHECK: ldsminb w2, w3, [x5] // encoding: [0xa3,0x50,0x22,0x38]
98 // ST<OP> intructions: aliases to LD<OP>
99 stADDlb w0, [x2]
100 stclrlh w0, [x2]
101 steorl w0, [x2]
102 stsetl x0, [x2]
103 stsmaxb w0, [x2]
104 stsminh w0, [x2]
105 stumax w0, [x2]
106 stumin x0, [x2]
107 stsminl x29, [sp]
108 //CHECK: staddlb w0, [x2] // encoding: [0x5f,0x00,0x60,0x38]
109 //CHECK: stclrlh w0, [x2] // encoding: [0x5f,0x10,0x60,0x78]
110 //CHECK: steorl w0, [x2] // encoding: [0x5f,0x20,0x60,0xb8]
111 //CHECK: stsetl x0, [x2] // encoding: [0x5f,0x30,0x60,0xf8]
112 //CHECK: stsmaxb w0, [x2] // encoding: [0x5f,0x40,0x20,0x38]
113 //CHECK: stsminh w0, [x2] // encoding: [0x5f,0x50,0x20,0x78]
114 //CHECK: stumax w0, [x2] // encoding: [0x5f,0x60,0x20,0xb8]
115 //CHECK: stumin x0, [x2] // encoding: [0x5f,0x70,0x20,0xf8]
116 //CHECK: stsminl x29, [sp] // encoding: [0xff,0x53,0x7d,0xf8]
119 ldsmax x0, x1, [w2]
120 ldeorl w0, w1, [w2]
121 //CHECK-ERROR: error: invalid operand for instruction
122 //CHECK-ERROR: ldsmax x0, x1, [w2]
123 //CHECK-ERROR: ^
124 //CHECK-ERROR: error: invalid operand for instruction
125 //CHECK-ERROR: ldeorl w0, w1, [w2]
126 //CHECK-ERROR: ^
128 //SWP instruction
129 swp x0, x1, [x2]
130 swpb w0, w1, [x2]
131 swplh w0, w1, [x2]
132 swpal x0, x1, [sp]
133 //CHECK: swp x0, x1, [x2] // encoding: [0x41,0x80,0x20,0xf8]
134 //CHECK: swpb w0, w1, [x2] // encoding: [0x41,0x80,0x20,0x38]
135 //CHECK: swplh w0, w1, [x2] // encoding: [0x41,0x80,0x60,0x78]
136 //CHECK: swpal x0, x1, [sp] // encoding: [0xe1,0x83,0xe0,0xf8]
138 swp x0, x1, [w2]
139 swp x0, x1, [xzr]
140 //CHECK-ERROR: error: invalid operand for instruction
141 //CHECK-ERROR: swp x0, x1, [w2]
142 //CHECK-ERROR: ^
143 //CHECK-ERROR: error: invalid operand for instruction
144 //CHECK-ERROR: swp x0, x1, [xzr]
145 //CHECK-ERROR: ^
147 //CASP instruction
148 casp x0, x1, x2, x3, [x4]
149 casp w0, w1, w2, w3, [x4]
150 //CHECK: casp x0, x1, x2, x3, [x4] // encoding: [0x82,0x7c,0x20,0x48]
151 //CHECK: casp w0, w1, w2, w3, [x4] // encoding: [0x82,0x7c,0x20,0x08]
153 casp x1, x2, x4, x5, [x6]
154 casp x0, x1, x3, x4, [x5]
155 casp x0, x2, x4, x5, [x6]
156 casp x0, x1, x2, x4, [x5]
157 casp x0, w1, x2, x3, [x5]
158 casp w0, x1, x2, x3, [x5]
159 casp w0, x1, w2, w3, [x5]
160 casp x0, x1, w2, w3, [x5]
161 //CHECK-ERROR: error: expected first even register of a consecutive same-size even/odd register pair
162 //CHECK-ERROR: casp x1, x2, x4, x5, [x6]
163 //CHECK-ERROR: ^
164 //CHECK-ERROR: error: expected first even register of a consecutive same-size even/odd register pair
165 //CHECK-ERROR: casp x0, x1, x3, x4, [x5]
166 //CHECK-ERROR: ^
167 //CHECK-ERROR: error: expected second odd register of a consecutive same-size even/odd register pair
168 //CHECK-ERROR: casp x0, x2, x4, x5, [x6]
169 //CHECK-ERROR: ^
170 //CHECK-ERROR: error: expected second odd register of a consecutive same-size even/odd register pair
171 //CHECK-ERROR: casp x0, x1, x2, x4, [x5]
172 //CHECK-ERROR: ^
173 //CHECK-ERROR: error: expected second odd register of a consecutive same-size even/odd register pair
174 //CHECK-ERROR: casp x0, w1, x2, x3, [x5]
175 //CHECK-ERROR: ^
176 //CHECK-ERROR: error: expected second odd register of a consecutive same-size even/odd register pair
177 //CHECK-ERROR: casp w0, x1, x2, x3, [x5]
178 //CHECK-ERROR: ^
179 //CHECK-ERROR: error: expected second odd register of a consecutive same-size even/odd register pair
180 //CHECK-ERROR: casp w0, x1, w2, w3, [x5]
181 //CHECK-ERROR: ^
182 //CHECK-ERROR: error: invalid operand for instruction
183 //CHECK-ERROR: casp x0, x1, w2, w3, [x5]
184 //CHECK-ERROR: ^