]> git.proxmox.com Git - rustc.git/blob - src/test/assembly/asm/arm-types.rs
New upstream version 1.53.0+dfsg1
[rustc.git] / src / test / assembly / asm / arm-types.rs
1 // min-llvm-version: 10.0.1
2 // assembly-output: emit-asm
3 // compile-flags: --target armv7-unknown-linux-gnueabihf
4 // compile-flags: -C target-feature=+neon
5 // needs-llvm-components: arm
6
7 #![feature(no_core, lang_items, rustc_attrs, repr_simd)]
8 #![crate_type = "rlib"]
9 #![no_core]
10 #![allow(asm_sub_register, non_camel_case_types)]
11
12 #[rustc_builtin_macro]
13 macro_rules! asm {
14 () => {};
15 }
16 #[rustc_builtin_macro]
17 macro_rules! concat {
18 () => {};
19 }
20 #[rustc_builtin_macro]
21 macro_rules! stringify {
22 () => {};
23 }
24
25 #[lang = "sized"]
26 trait Sized {}
27 #[lang = "copy"]
28 trait Copy {}
29
30 type ptr = *mut u8;
31
32 #[repr(simd)]
33 pub struct i8x8(i8, i8, i8, i8, i8, i8, i8, i8);
34 #[repr(simd)]
35 pub struct i16x4(i16, i16, i16, i16);
36 #[repr(simd)]
37 pub struct i32x2(i32, i32);
38 #[repr(simd)]
39 pub struct i64x1(i64);
40 #[repr(simd)]
41 pub struct f32x2(f32, f32);
42 #[repr(simd)]
43 pub struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8);
44 #[repr(simd)]
45 pub struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
46 #[repr(simd)]
47 pub struct i32x4(i32, i32, i32, i32);
48 #[repr(simd)]
49 pub struct i64x2(i64, i64);
50 #[repr(simd)]
51 pub struct f32x4(f32, f32, f32, f32);
52
53 impl Copy for i8 {}
54 impl Copy for i16 {}
55 impl Copy for i32 {}
56 impl Copy for f32 {}
57 impl Copy for i64 {}
58 impl Copy for f64 {}
59 impl Copy for ptr {}
60 impl Copy for i8x8 {}
61 impl Copy for i16x4 {}
62 impl Copy for i32x2 {}
63 impl Copy for i64x1 {}
64 impl Copy for f32x2 {}
65 impl Copy for i8x16 {}
66 impl Copy for i16x8 {}
67 impl Copy for i32x4 {}
68 impl Copy for i64x2 {}
69 impl Copy for f32x4 {}
70
71 extern "C" {
72 fn extern_func();
73 static extern_static: u8;
74 }
75
76 // CHECK-LABEL: sym_fn:
77 // CHECK: @APP
78 // CHECK: bl extern_func
79 // CHECK: @NO_APP
80 #[no_mangle]
81 pub unsafe fn sym_fn() {
82 asm!("bl {}", sym extern_func);
83 }
84
85 // CHECK-LABEL: sym_static:
86 // CHECK: @APP
87 // CHECK: adr r0, extern_static
88 // CHECK: @NO_APP
89 #[no_mangle]
90 pub unsafe fn sym_static() {
91 asm!("adr r0, {}", sym extern_static);
92 }
93
94 // Regression test for #82052.
95 // CHECK-LABEL: issue_82052
96 // CHECK: push {{.*}}lr
97 // CHECK: @APP
98 // CHECK: @NO_APP
99 pub unsafe fn issue_82052() {
100 asm!("", out("r14") _);
101 }
102
103 macro_rules! check {
104 ($func:ident $ty:ident $class:ident $mov:literal) => {
105 #[no_mangle]
106 pub unsafe fn $func(x: $ty) -> $ty {
107 // Hack to avoid function merging
108 extern "Rust" {
109 fn dont_merge(s: &str);
110 }
111 dont_merge(stringify!($func));
112
113 let y;
114 asm!(concat!($mov, " {}, {}"), out($class) y, in($class) x);
115 y
116 }
117 };
118 }
119
120 macro_rules! check_reg {
121 ($func:ident $ty:ident $reg:tt $mov:literal) => {
122 #[no_mangle]
123 pub unsafe fn $func(x: $ty) -> $ty {
124 // Hack to avoid function merging
125 extern "Rust" {
126 fn dont_merge(s: &str);
127 }
128 dont_merge(stringify!($func));
129
130 let y;
131 asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x);
132 y
133 }
134 };
135 }
136
137 // CHECK-LABEL: reg_i8:
138 // CHECK: @APP
139 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
140 // CHECK: @NO_APP
141 check!(reg_i8 i8 reg "mov");
142
143 // CHECK-LABEL: reg_i16:
144 // CHECK: @APP
145 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
146 // CHECK: @NO_APP
147 check!(reg_i16 i16 reg "mov");
148
149 // CHECK-LABEL: reg_i32:
150 // CHECK: @APP
151 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
152 // CHECK: @NO_APP
153 check!(reg_i32 i32 reg "mov");
154
155 // CHECK-LABEL: reg_f32:
156 // CHECK: @APP
157 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
158 // CHECK: @NO_APP
159 check!(reg_f32 f32 reg "mov");
160
161 // CHECK-LABEL: reg_ptr:
162 // CHECK: @APP
163 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
164 // CHECK: @NO_APP
165 check!(reg_ptr ptr reg "mov");
166
167 // CHECK-LABEL: reg_thumb_i8:
168 // CHECK: @APP
169 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
170 // CHECK: @NO_APP
171 check!(reg_thumb_i8 i8 reg_thumb "mov");
172
173 // CHECK-LABEL: reg_thumb_i16:
174 // CHECK: @APP
175 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
176 // CHECK: @NO_APP
177 check!(reg_thumb_i16 i16 reg_thumb "mov");
178
179 // CHECK-LABEL: reg_thumb_i32:
180 // CHECK: @APP
181 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
182 // CHECK: @NO_APP
183 check!(reg_thumb_i32 i32 reg_thumb "mov");
184
185 // CHECK-LABEL: reg_thumb_f32:
186 // CHECK: @APP
187 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
188 // CHECK: @NO_APP
189 check!(reg_thumb_f32 f32 reg_thumb "mov");
190
191 // CHECK-LABEL: reg_thumb_ptr:
192 // CHECK: @APP
193 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
194 // CHECK: @NO_APP
195 check!(reg_thumb_ptr ptr reg_thumb "mov");
196
197 // CHECK-LABEL: sreg_i32:
198 // CHECK: @APP
199 // CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
200 // CHECK: @NO_APP
201 check!(sreg_i32 i32 sreg "vmov.f32");
202
203 // CHECK-LABEL: sreg_f32:
204 // CHECK: @APP
205 // CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
206 // CHECK: @NO_APP
207 check!(sreg_f32 f32 sreg "vmov.f32");
208
209 // CHECK-LABEL: sreg_ptr:
210 // CHECK: @APP
211 // CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
212 // CHECK: @NO_APP
213 check!(sreg_ptr ptr sreg "vmov.f32");
214
215 // CHECK-LABEL: sreg_low16_i32:
216 // CHECK: @APP
217 // CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
218 // CHECK: @NO_APP
219 check!(sreg_low16_i32 i32 sreg_low16 "vmov.f32");
220
221 // CHECK-LABEL: sreg_low16_f32:
222 // CHECK: @APP
223 // CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}}
224 // CHECK: @NO_APP
225 check!(sreg_low16_f32 f32 sreg_low16 "vmov.f32");
226
227 // CHECK-LABEL: dreg_i64:
228 // CHECK: @APP
229 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
230 // CHECK: @NO_APP
231 check!(dreg_i64 i64 dreg "vmov.f64");
232
233 // CHECK-LABEL: dreg_f64:
234 // CHECK: @APP
235 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
236 // CHECK: @NO_APP
237 check!(dreg_f64 f64 dreg "vmov.f64");
238
239 // CHECK-LABEL: dreg_i8x8:
240 // CHECK: @APP
241 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
242 // CHECK: @NO_APP
243 check!(dreg_i8x8 i8x8 dreg "vmov.f64");
244
245 // CHECK-LABEL: dreg_i16x4:
246 // CHECK: @APP
247 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
248 // CHECK: @NO_APP
249 check!(dreg_i16x4 i16x4 dreg "vmov.f64");
250
251 // CHECK-LABEL: dreg_i32x2:
252 // CHECK: @APP
253 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
254 // CHECK: @NO_APP
255 check!(dreg_i32x2 i32x2 dreg "vmov.f64");
256
257 // CHECK-LABEL: dreg_i64x1:
258 // CHECK: @APP
259 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
260 // CHECK: @NO_APP
261 check!(dreg_i64x1 i64x1 dreg "vmov.f64");
262
263 // CHECK-LABEL: dreg_f32x2:
264 // CHECK: @APP
265 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
266 // CHECK: @NO_APP
267 check!(dreg_f32x2 f32x2 dreg "vmov.f64");
268
269 // CHECK-LABEL: dreg_low16_i64:
270 // CHECK: @APP
271 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
272 // CHECK: @NO_APP
273 check!(dreg_low16_i64 i64 dreg_low16 "vmov.f64");
274
275 // CHECK-LABEL: dreg_low16_f64:
276 // CHECK: @APP
277 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
278 // CHECK: @NO_APP
279 check!(dreg_low16_f64 f64 dreg_low16 "vmov.f64");
280
281 // CHECK-LABEL: dreg_low16_i8x8:
282 // CHECK: @APP
283 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
284 // CHECK: @NO_APP
285 check!(dreg_low16_i8x8 i8x8 dreg_low16 "vmov.f64");
286
287 // CHECK-LABEL: dreg_low16_i16x4:
288 // CHECK: @APP
289 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
290 // CHECK: @NO_APP
291 check!(dreg_low16_i16x4 i16x4 dreg_low16 "vmov.f64");
292
293 // CHECK-LABEL: dreg_low16_i32x2:
294 // CHECK: @APP
295 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
296 // CHECK: @NO_APP
297 check!(dreg_low16_i32x2 i32x2 dreg_low16 "vmov.f64");
298
299 // CHECK-LABEL: dreg_low16_i64x1:
300 // CHECK: @APP
301 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
302 // CHECK: @NO_APP
303 check!(dreg_low16_i64x1 i64x1 dreg_low16 "vmov.f64");
304
305 // CHECK-LABEL: dreg_low16_f32x2:
306 // CHECK: @APP
307 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
308 // CHECK: @NO_APP
309 check!(dreg_low16_f32x2 f32x2 dreg_low16 "vmov.f64");
310
311 // CHECK-LABEL: dreg_low8_i64:
312 // CHECK: @APP
313 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
314 // CHECK: @NO_APP
315 check!(dreg_low8_i64 i64 dreg_low8 "vmov.f64");
316
317 // CHECK-LABEL: dreg_low8_f64:
318 // CHECK: @APP
319 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
320 // CHECK: @NO_APP
321 check!(dreg_low8_f64 f64 dreg_low8 "vmov.f64");
322
323 // CHECK-LABEL: dreg_low8_i8x8:
324 // CHECK: @APP
325 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
326 // CHECK: @NO_APP
327 check!(dreg_low8_i8x8 i8x8 dreg_low8 "vmov.f64");
328
329 // CHECK-LABEL: dreg_low8_i16x4:
330 // CHECK: @APP
331 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
332 // CHECK: @NO_APP
333 check!(dreg_low8_i16x4 i16x4 dreg_low8 "vmov.f64");
334
335 // CHECK-LABEL: dreg_low8_i32x2:
336 // CHECK: @APP
337 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
338 // CHECK: @NO_APP
339 check!(dreg_low8_i32x2 i32x2 dreg_low8 "vmov.f64");
340
341 // CHECK-LABEL: dreg_low8_i64x1:
342 // CHECK: @APP
343 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
344 // CHECK: @NO_APP
345 check!(dreg_low8_i64x1 i64x1 dreg_low8 "vmov.f64");
346
347 // CHECK-LABEL: dreg_low8_f32x2:
348 // CHECK: @APP
349 // CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}}
350 // CHECK: @NO_APP
351 check!(dreg_low8_f32x2 f32x2 dreg_low8 "vmov.f64");
352
353 // CHECK-LABEL: qreg_i8x16:
354 // CHECK: @APP
355 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
356 // CHECK: @NO_APP
357 check!(qreg_i8x16 i8x16 qreg "vmov");
358
359 // CHECK-LABEL: qreg_i16x8:
360 // CHECK: @APP
361 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
362 // CHECK: @NO_APP
363 check!(qreg_i16x8 i16x8 qreg "vmov");
364
365 // CHECK-LABEL: qreg_i32x4:
366 // CHECK: @APP
367 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
368 // CHECK: @NO_APP
369 check!(qreg_i32x4 i32x4 qreg "vmov");
370
371 // CHECK-LABEL: qreg_i64x2:
372 // CHECK: @APP
373 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
374 // CHECK: @NO_APP
375 check!(qreg_i64x2 i64x2 qreg "vmov");
376
377 // CHECK-LABEL: qreg_f32x4:
378 // CHECK: @APP
379 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
380 // CHECK: @NO_APP
381 check!(qreg_f32x4 f32x4 qreg "vmov");
382
383 // CHECK-LABEL: qreg_low8_i8x16:
384 // CHECK: @APP
385 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
386 // CHECK: @NO_APP
387 check!(qreg_low8_i8x16 i8x16 qreg_low8 "vmov");
388
389 // CHECK-LABEL: qreg_low8_i16x8:
390 // CHECK: @APP
391 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
392 // CHECK: @NO_APP
393 check!(qreg_low8_i16x8 i16x8 qreg_low8 "vmov");
394
395 // CHECK-LABEL: qreg_low8_i32x4:
396 // CHECK: @APP
397 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
398 // CHECK: @NO_APP
399 check!(qreg_low8_i32x4 i32x4 qreg_low8 "vmov");
400
401 // CHECK-LABEL: qreg_low8_i64x2:
402 // CHECK: @APP
403 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
404 // CHECK: @NO_APP
405 check!(qreg_low8_i64x2 i64x2 qreg_low8 "vmov");
406
407 // CHECK-LABEL: qreg_low8_f32x4:
408 // CHECK: @APP
409 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
410 // CHECK: @NO_APP
411 check!(qreg_low8_f32x4 f32x4 qreg_low8 "vmov");
412
413 // CHECK-LABEL: qreg_low4_i8x16:
414 // CHECK: @APP
415 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
416 // CHECK: @NO_APP
417 check!(qreg_low4_i8x16 i8x16 qreg_low4 "vmov");
418
419 // CHECK-LABEL: qreg_low4_i16x8:
420 // CHECK: @APP
421 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
422 // CHECK: @NO_APP
423 check!(qreg_low4_i16x8 i16x8 qreg_low4 "vmov");
424
425 // CHECK-LABEL: qreg_low4_i32x4:
426 // CHECK: @APP
427 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
428 // CHECK: @NO_APP
429 check!(qreg_low4_i32x4 i32x4 qreg_low4 "vmov");
430
431 // CHECK-LABEL: qreg_low4_i64x2:
432 // CHECK: @APP
433 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
434 // CHECK: @NO_APP
435 check!(qreg_low4_i64x2 i64x2 qreg_low4 "vmov");
436
437 // CHECK-LABEL: qreg_low4_f32x4:
438 // CHECK: @APP
439 // CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
440 // CHECK: @NO_APP
441 check!(qreg_low4_f32x4 f32x4 qreg_low4 "vmov");
442
443 // CHECK-LABEL: r0_i8:
444 // CHECK: @APP
445 // CHECK: mov r0, r0
446 // CHECK: @NO_APP
447 check_reg!(r0_i8 i8 "r0" "mov");
448
449 // CHECK-LABEL: r0_i16:
450 // CHECK: @APP
451 // CHECK: mov r0, r0
452 // CHECK: @NO_APP
453 check_reg!(r0_i16 i16 "r0" "mov");
454
455 // CHECK-LABEL: r0_i32:
456 // CHECK: @APP
457 // CHECK: mov r0, r0
458 // CHECK: @NO_APP
459 check_reg!(r0_i32 i32 "r0" "mov");
460
461 // CHECK-LABEL: r0_f32:
462 // CHECK: @APP
463 // CHECK: mov r0, r0
464 // CHECK: @NO_APP
465 check_reg!(r0_f32 f32 "r0" "mov");
466
467 // CHECK-LABEL: r0_ptr:
468 // CHECK: @APP
469 // CHECK: mov r0, r0
470 // CHECK: @NO_APP
471 check_reg!(r0_ptr ptr "r0" "mov");
472
473 // CHECK-LABEL: s0_i32:
474 // CHECK: @APP
475 // CHECK: vmov.f32 s0, s0
476 // CHECK: @NO_APP
477 check_reg!(s0_i32 i32 "s0" "vmov.f32");
478
479 // CHECK-LABEL: s0_f32:
480 // CHECK: @APP
481 // CHECK: vmov.f32 s0, s0
482 // CHECK: @NO_APP
483 check_reg!(s0_f32 f32 "s0" "vmov.f32");
484
485 // CHECK-LABEL: s0_ptr:
486 // CHECK: @APP
487 // CHECK: vmov.f32 s0, s0
488 // CHECK: @NO_APP
489 check_reg!(s0_ptr ptr "s0" "vmov.f32");
490
491 // CHECK-LABEL: d0_i64:
492 // CHECK: @APP
493 // CHECK: vmov.f64 d0, d0
494 // CHECK: @NO_APP
495 check_reg!(d0_i64 i64 "d0" "vmov.f64");
496
497 // CHECK-LABEL: d0_f64:
498 // CHECK: @APP
499 // CHECK: vmov.f64 d0, d0
500 // CHECK: @NO_APP
501 check_reg!(d0_f64 f64 "d0" "vmov.f64");
502
503 // CHECK-LABEL: d0_i8x8:
504 // CHECK: @APP
505 // CHECK: vmov.f64 d0, d0
506 // CHECK: @NO_APP
507 check_reg!(d0_i8x8 i8x8 "d0" "vmov.f64");
508
509 // CHECK-LABEL: d0_i16x4:
510 // CHECK: @APP
511 // CHECK: vmov.f64 d0, d0
512 // CHECK: @NO_APP
513 check_reg!(d0_i16x4 i16x4 "d0" "vmov.f64");
514
515 // CHECK-LABEL: d0_i32x2:
516 // CHECK: @APP
517 // CHECK: vmov.f64 d0, d0
518 // CHECK: @NO_APP
519 check_reg!(d0_i32x2 i32x2 "d0" "vmov.f64");
520
521 // CHECK-LABEL: d0_i64x1:
522 // CHECK: @APP
523 // CHECK: vmov.f64 d0, d0
524 // CHECK: @NO_APP
525 check_reg!(d0_i64x1 i64x1 "d0" "vmov.f64");
526
527 // CHECK-LABEL: d0_f32x2:
528 // CHECK: @APP
529 // CHECK: vmov.f64 d0, d0
530 // CHECK: @NO_APP
531 check_reg!(d0_f32x2 f32x2 "d0" "vmov.f64");
532
533 // CHECK-LABEL: q0_i8x16:
534 // CHECK: @APP
535 // CHECK: vorr q0, q0, q0
536 // CHECK: @NO_APP
537 check_reg!(q0_i8x16 i8x16 "q0" "vmov");
538
539 // CHECK-LABEL: q0_i16x8:
540 // CHECK: @APP
541 // CHECK: vorr q0, q0, q0
542 // CHECK: @NO_APP
543 check_reg!(q0_i16x8 i16x8 "q0" "vmov");
544
545 // CHECK-LABEL: q0_i32x4:
546 // CHECK: @APP
547 // CHECK: vorr q0, q0, q0
548 // CHECK: @NO_APP
549 check_reg!(q0_i32x4 i32x4 "q0" "vmov");
550
551 // CHECK-LABEL: q0_i64x2:
552 // CHECK: @APP
553 // CHECK: vorr q0, q0, q0
554 // CHECK: @NO_APP
555 check_reg!(q0_i64x2 i64x2 "q0" "vmov");
556
557 // CHECK-LABEL: q0_f32x4:
558 // CHECK: @APP
559 // CHECK: vorr q0, q0, q0
560 // CHECK: @NO_APP
561 check_reg!(q0_f32x4 f32x4 "q0" "vmov");