]> git.lizzy.rs Git - rust.git/blob - src/test/assembly/asm/x86-types.rs
Pin panic-in-drop=abort test to old pass manager
[rust.git] / src / test / assembly / asm / x86-types.rs
1 // min-llvm-version: 10.0.1
2 // revisions: x86_64 i686
3 // assembly-output: emit-asm
4 //[x86_64] compile-flags: --target x86_64-unknown-linux-gnu
5 //[x86_64] needs-llvm-components: x86
6 //[i686] compile-flags: --target i686-unknown-linux-gnu
7 //[i686] needs-llvm-components: x86
8 // compile-flags: -C llvm-args=--x86-asm-syntax=intel
9 // compile-flags: -C target-feature=+avx512bw
10
11 #![feature(no_core, lang_items, rustc_attrs, repr_simd)]
12 #![crate_type = "rlib"]
13 #![no_core]
14 #![allow(asm_sub_register, non_camel_case_types)]
15
16 #[rustc_builtin_macro]
17 macro_rules! asm {
18     () => {};
19 }
20 #[rustc_builtin_macro]
21 macro_rules! concat {
22     () => {};
23 }
24 #[rustc_builtin_macro]
25 macro_rules! stringify {
26     () => {};
27 }
28
29 #[lang = "sized"]
30 trait Sized {}
31 #[lang = "copy"]
32 trait Copy {}
33
34 type ptr = *mut u8;
35
36 #[repr(simd)]
37 pub struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8);
38 #[repr(simd)]
39 pub struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
40 #[repr(simd)]
41 pub struct i32x4(i32, i32, i32, i32);
42 #[repr(simd)]
43 pub struct i64x2(i64, i64);
44 #[repr(simd)]
45 pub struct f32x4(f32, f32, f32, f32);
46 #[repr(simd)]
47 pub struct f64x2(f64, f64);
48
49 #[repr(simd)]
50 pub struct i8x32(
51     i8,
52     i8,
53     i8,
54     i8,
55     i8,
56     i8,
57     i8,
58     i8,
59     i8,
60     i8,
61     i8,
62     i8,
63     i8,
64     i8,
65     i8,
66     i8,
67     i8,
68     i8,
69     i8,
70     i8,
71     i8,
72     i8,
73     i8,
74     i8,
75     i8,
76     i8,
77     i8,
78     i8,
79     i8,
80     i8,
81     i8,
82     i8,
83 );
84 #[repr(simd)]
85 pub struct i16x16(i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16);
86 #[repr(simd)]
87 pub struct i32x8(i32, i32, i32, i32, i32, i32, i32, i32);
88 #[repr(simd)]
89 pub struct i64x4(i64, i64, i64, i64);
90 #[repr(simd)]
91 pub struct f32x8(f32, f32, f32, f32, f32, f32, f32, f32);
92 #[repr(simd)]
93 pub struct f64x4(f64, f64, f64, f64);
94
95 #[repr(simd)]
96 pub struct i8x64(
97     i8,
98     i8,
99     i8,
100     i8,
101     i8,
102     i8,
103     i8,
104     i8,
105     i8,
106     i8,
107     i8,
108     i8,
109     i8,
110     i8,
111     i8,
112     i8,
113     i8,
114     i8,
115     i8,
116     i8,
117     i8,
118     i8,
119     i8,
120     i8,
121     i8,
122     i8,
123     i8,
124     i8,
125     i8,
126     i8,
127     i8,
128     i8,
129     i8,
130     i8,
131     i8,
132     i8,
133     i8,
134     i8,
135     i8,
136     i8,
137     i8,
138     i8,
139     i8,
140     i8,
141     i8,
142     i8,
143     i8,
144     i8,
145     i8,
146     i8,
147     i8,
148     i8,
149     i8,
150     i8,
151     i8,
152     i8,
153     i8,
154     i8,
155     i8,
156     i8,
157     i8,
158     i8,
159     i8,
160     i8,
161 );
162 #[repr(simd)]
163 pub struct i16x32(
164     i16,
165     i16,
166     i16,
167     i16,
168     i16,
169     i16,
170     i16,
171     i16,
172     i16,
173     i16,
174     i16,
175     i16,
176     i16,
177     i16,
178     i16,
179     i16,
180     i16,
181     i16,
182     i16,
183     i16,
184     i16,
185     i16,
186     i16,
187     i16,
188     i16,
189     i16,
190     i16,
191     i16,
192     i16,
193     i16,
194     i16,
195     i16,
196 );
197 #[repr(simd)]
198 pub struct i32x16(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32);
199 #[repr(simd)]
200 pub struct i64x8(i64, i64, i64, i64, i64, i64, i64, i64);
201 #[repr(simd)]
202 pub struct f32x16(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32);
203 #[repr(simd)]
204 pub struct f64x8(f64, f64, f64, f64, f64, f64, f64, f64);
205
206 impl Copy for i8 {}
207 impl Copy for i16 {}
208 impl Copy for i32 {}
209 impl Copy for f32 {}
210 impl Copy for i64 {}
211 impl Copy for f64 {}
212 impl Copy for ptr {}
213 impl Copy for i8x16 {}
214 impl Copy for i16x8 {}
215 impl Copy for i32x4 {}
216 impl Copy for i64x2 {}
217 impl Copy for f32x4 {}
218 impl Copy for f64x2 {}
219 impl Copy for i8x32 {}
220 impl Copy for i16x16 {}
221 impl Copy for i32x8 {}
222 impl Copy for i64x4 {}
223 impl Copy for f32x8 {}
224 impl Copy for f64x4 {}
225 impl Copy for i8x64 {}
226 impl Copy for i16x32 {}
227 impl Copy for i32x16 {}
228 impl Copy for i64x8 {}
229 impl Copy for f32x16 {}
230 impl Copy for f64x8 {}
231
232 extern "C" {
233     fn extern_func();
234     static extern_static: u8;
235 }
236
237 // CHECK-LABEL: sym_fn:
238 // CHECK: #APP
239 // CHECK: call extern_func
240 // CHECK: #NO_APP
241 #[no_mangle]
242 pub unsafe fn sym_fn() {
243     asm!("call {}", sym extern_func);
244 }
245
246 // CHECK-LABEL: sym_static:
247 // CHECK: #APP
248 // CHECK: mov al, byte ptr [extern_static]
249 // CHECK: #NO_APP
250 #[no_mangle]
251 pub unsafe fn sym_static() {
252     asm!("mov al, byte ptr [{}]", sym extern_static);
253 }
254
255 macro_rules! check {
256     ($func:ident $ty:ident $class:ident $mov:literal) => {
257         #[no_mangle]
258         pub unsafe fn $func(x: $ty) -> $ty {
259             // Hack to avoid function merging
260             extern "Rust" {
261                 fn dont_merge(s: &str);
262             }
263             dont_merge(stringify!($func));
264
265             let y;
266             asm!(concat!($mov, " {}, {}"), lateout($class) y, in($class) x);
267             y
268         }
269     };
270 }
271
272 macro_rules! check_reg {
273     ($func:ident $ty:ident $reg:tt $mov:literal) => {
274         #[no_mangle]
275         pub unsafe fn $func(x: $ty) -> $ty {
276             // Hack to avoid function merging
277             extern "Rust" {
278                 fn dont_merge(s: &str);
279             }
280             dont_merge(stringify!($func));
281
282             let y;
283             asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x);
284             y
285         }
286     };
287 }
288
289 // CHECK-LABEL: reg_i16:
290 // CHECK: #APP
291 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
292 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
293 // CHECK: #NO_APP
294 check!(reg_i16 i16 reg "mov");
295
296 // CHECK-LABEL: reg_i32:
297 // CHECK: #APP
298 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
299 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
300 // CHECK: #NO_APP
301 check!(reg_i32 i32 reg "mov");
302
303 // CHECK-LABEL: reg_f32:
304 // CHECK: #APP
305 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
306 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
307 // CHECK: #NO_APP
308 check!(reg_f32 f32 reg "mov");
309
310 // x86_64-LABEL: reg_i64:
311 // x86_64: #APP
312 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
313 // x86_64: #NO_APP
314 #[cfg(x86_64)]
315 check!(reg_i64 i64 reg "mov");
316
317 // x86_64-LABEL: reg_f64:
318 // x86_64: #APP
319 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
320 // x86_64: #NO_APP
321 #[cfg(x86_64)]
322 check!(reg_f64 f64 reg "mov");
323
324 // CHECK-LABEL: reg_ptr:
325 // CHECK: #APP
326 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
327 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
328 // CHECK: #NO_APP
329 check!(reg_ptr ptr reg "mov");
330
331 // CHECK-LABEL: reg_abcd_i16:
332 // CHECK: #APP
333 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
334 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
335 // CHECK: #NO_APP
336 check!(reg_abcd_i16 i16 reg_abcd "mov");
337
338 // CHECK-LABEL: reg_abcd_i32:
339 // CHECK: #APP
340 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
341 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
342 // CHECK: #NO_APP
343 check!(reg_abcd_i32 i32 reg_abcd "mov");
344
345 // CHECK-LABEL: reg_abcd_f32:
346 // CHECK: #APP
347 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
348 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
349 // CHECK: #NO_APP
350 check!(reg_abcd_f32 f32 reg_abcd "mov");
351
352 // x86_64-LABEL: reg_abcd_i64:
353 // x86_64: #APP
354 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
355 // x86_64: #NO_APP
356 #[cfg(x86_64)]
357 check!(reg_abcd_i64 i64 reg_abcd "mov");
358
359 // x86_64-LABEL: reg_abcd_f64:
360 // x86_64: #APP
361 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
362 // x86_64: #NO_APP
363 #[cfg(x86_64)]
364 check!(reg_abcd_f64 f64 reg_abcd "mov");
365
366 // CHECK-LABEL: reg_abcd_ptr:
367 // CHECK: #APP
368 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
369 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
370 // CHECK: #NO_APP
371 check!(reg_abcd_ptr ptr reg_abcd "mov");
372
373 // CHECK-LABEL: reg_byte:
374 // CHECK: #APP
375 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
376 // CHECK: #NO_APP
377 check!(reg_byte i8 reg_byte "mov");
378
379 // CHECK-LABEL: xmm_reg_i32:
380 // CHECK: #APP
381 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
382 // CHECK: #NO_APP
383 check!(xmm_reg_i32 i32 xmm_reg "movaps");
384
385 // CHECK-LABEL: xmm_reg_f32:
386 // CHECK: #APP
387 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
388 // CHECK: #NO_APP
389 check!(xmm_reg_f32 f32 xmm_reg "movaps");
390
391 // CHECK-LABEL: xmm_reg_i64:
392 // CHECK: #APP
393 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
394 // CHECK: #NO_APP
395 check!(xmm_reg_i64 i64 xmm_reg "movaps");
396
397 // CHECK-LABEL: xmm_reg_f64:
398 // CHECK: #APP
399 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
400 // CHECK: #NO_APP
401 check!(xmm_reg_f64 f64 xmm_reg "movaps");
402
403 // CHECK-LABEL: xmm_reg_ptr:
404 // CHECK: #APP
405 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
406 // CHECK: #NO_APP
407 check!(xmm_reg_ptr ptr xmm_reg "movaps");
408
409 // CHECK-LABEL: xmm_reg_i8x16:
410 // CHECK: #APP
411 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
412 // CHECK: #NO_APP
413 check!(xmm_reg_i8x16 i8x16 xmm_reg "movaps");
414
415 // CHECK-LABEL: xmm_reg_i16x8:
416 // CHECK: #APP
417 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
418 // CHECK: #NO_APP
419 check!(xmm_reg_i16x8 i16x8 xmm_reg "movaps");
420
421 // CHECK-LABEL: xmm_reg_i32x4:
422 // CHECK: #APP
423 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
424 // CHECK: #NO_APP
425 check!(xmm_reg_i32x4 i32x4 xmm_reg "movaps");
426
427 // CHECK-LABEL: xmm_reg_i64x2:
428 // CHECK: #APP
429 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
430 // CHECK: #NO_APP
431 check!(xmm_reg_i64x2 i64x2 xmm_reg "movaps");
432
433 // CHECK-LABEL: xmm_reg_f32x4:
434 // CHECK: #APP
435 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
436 // CHECK: #NO_APP
437 check!(xmm_reg_f32x4 f32x4 xmm_reg "movaps");
438
439 // CHECK-LABEL: xmm_reg_f64x2:
440 // CHECK: #APP
441 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
442 // CHECK: #NO_APP
443 check!(xmm_reg_f64x2 f64x2 xmm_reg "movaps");
444
445 // CHECK-LABEL: ymm_reg_i32:
446 // CHECK: #APP
447 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
448 // CHECK: #NO_APP
449 check!(ymm_reg_i32 i32 ymm_reg "vmovaps");
450
451 // CHECK-LABEL: ymm_reg_f32:
452 // CHECK: #APP
453 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
454 // CHECK: #NO_APP
455 check!(ymm_reg_f32 f32 ymm_reg "vmovaps");
456
457 // CHECK-LABEL: ymm_reg_i64:
458 // CHECK: #APP
459 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
460 // CHECK: #NO_APP
461 check!(ymm_reg_i64 i64 ymm_reg "vmovaps");
462
463 // CHECK-LABEL: ymm_reg_f64:
464 // CHECK: #APP
465 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
466 // CHECK: #NO_APP
467 check!(ymm_reg_f64 f64 ymm_reg "vmovaps");
468
469 // CHECK-LABEL: ymm_reg_ptr:
470 // CHECK: #APP
471 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
472 // CHECK: #NO_APP
473 check!(ymm_reg_ptr ptr ymm_reg "vmovaps");
474
475 // CHECK-LABEL: ymm_reg_i8x16:
476 // CHECK: #APP
477 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
478 // CHECK: #NO_APP
479 check!(ymm_reg_i8x16 i8x16 ymm_reg "vmovaps");
480
481 // CHECK-LABEL: ymm_reg_i16x8:
482 // CHECK: #APP
483 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
484 // CHECK: #NO_APP
485 check!(ymm_reg_i16x8 i16x8 ymm_reg "vmovaps");
486
487 // CHECK-LABEL: ymm_reg_i32x4:
488 // CHECK: #APP
489 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
490 // CHECK: #NO_APP
491 check!(ymm_reg_i32x4 i32x4 ymm_reg "vmovaps");
492
493 // CHECK-LABEL: ymm_reg_i64x2:
494 // CHECK: #APP
495 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
496 // CHECK: #NO_APP
497 check!(ymm_reg_i64x2 i64x2 ymm_reg "vmovaps");
498
499 // CHECK-LABEL: ymm_reg_f32x4:
500 // CHECK: #APP
501 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
502 // CHECK: #NO_APP
503 check!(ymm_reg_f32x4 f32x4 ymm_reg "vmovaps");
504
505 // CHECK-LABEL: ymm_reg_f64x2:
506 // CHECK: #APP
507 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
508 // CHECK: #NO_APP
509 check!(ymm_reg_f64x2 f64x2 ymm_reg "vmovaps");
510
511 // CHECK-LABEL: ymm_reg_i8x32:
512 // CHECK: #APP
513 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
514 // CHECK: #NO_APP
515 check!(ymm_reg_i8x32 i8x32 ymm_reg "vmovaps");
516
517 // CHECK-LABEL: ymm_reg_i16x16:
518 // CHECK: #APP
519 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
520 // CHECK: #NO_APP
521 check!(ymm_reg_i16x16 i16x16 ymm_reg "vmovaps");
522
523 // CHECK-LABEL: ymm_reg_i32x8:
524 // CHECK: #APP
525 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
526 // CHECK: #NO_APP
527 check!(ymm_reg_i32x8 i32x8 ymm_reg "vmovaps");
528
529 // CHECK-LABEL: ymm_reg_i64x4:
530 // CHECK: #APP
531 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
532 // CHECK: #NO_APP
533 check!(ymm_reg_i64x4 i64x4 ymm_reg "vmovaps");
534
535 // CHECK-LABEL: ymm_reg_f32x8:
536 // CHECK: #APP
537 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
538 // CHECK: #NO_APP
539 check!(ymm_reg_f32x8 f32x8 ymm_reg "vmovaps");
540
541 // CHECK-LABEL: ymm_reg_f64x4:
542 // CHECK: #APP
543 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
544 // CHECK: #NO_APP
545 check!(ymm_reg_f64x4 f64x4 ymm_reg "vmovaps");
546
547 // CHECK-LABEL: zmm_reg_i32:
548 // CHECK: #APP
549 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
550 // CHECK: #NO_APP
551 check!(zmm_reg_i32 i32 zmm_reg "vmovaps");
552
553 // CHECK-LABEL: zmm_reg_f32:
554 // CHECK: #APP
555 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
556 // CHECK: #NO_APP
557 check!(zmm_reg_f32 f32 zmm_reg "vmovaps");
558
559 // CHECK-LABEL: zmm_reg_i64:
560 // CHECK: #APP
561 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
562 // CHECK: #NO_APP
563 check!(zmm_reg_i64 i64 zmm_reg "vmovaps");
564
565 // CHECK-LABEL: zmm_reg_f64:
566 // CHECK: #APP
567 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
568 // CHECK: #NO_APP
569 check!(zmm_reg_f64 f64 zmm_reg "vmovaps");
570
571 // CHECK-LABEL: zmm_reg_ptr:
572 // CHECK: #APP
573 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
574 // CHECK: #NO_APP
575 check!(zmm_reg_ptr ptr zmm_reg "vmovaps");
576
577 // CHECK-LABEL: zmm_reg_i8x16:
578 // CHECK: #APP
579 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
580 // CHECK: #NO_APP
581 check!(zmm_reg_i8x16 i8x16 zmm_reg "vmovaps");
582
583 // CHECK-LABEL: zmm_reg_i16x8:
584 // CHECK: #APP
585 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
586 // CHECK: #NO_APP
587 check!(zmm_reg_i16x8 i16x8 zmm_reg "vmovaps");
588
589 // CHECK-LABEL: zmm_reg_i32x4:
590 // CHECK: #APP
591 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
592 // CHECK: #NO_APP
593 check!(zmm_reg_i32x4 i32x4 zmm_reg "vmovaps");
594
595 // CHECK-LABEL: zmm_reg_i64x2:
596 // CHECK: #APP
597 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
598 // CHECK: #NO_APP
599 check!(zmm_reg_i64x2 i64x2 zmm_reg "vmovaps");
600
601 // CHECK-LABEL: zmm_reg_f32x4:
602 // CHECK: #APP
603 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
604 // CHECK: #NO_APP
605 check!(zmm_reg_f32x4 f32x4 zmm_reg "vmovaps");
606
607 // CHECK-LABEL: zmm_reg_f64x2:
608 // CHECK: #APP
609 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
610 // CHECK: #NO_APP
611 check!(zmm_reg_f64x2 f64x2 zmm_reg "vmovaps");
612
613 // CHECK-LABEL: zmm_reg_i8x32:
614 // CHECK: #APP
615 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
616 // CHECK: #NO_APP
617 check!(zmm_reg_i8x32 i8x32 zmm_reg "vmovaps");
618
619 // CHECK-LABEL: zmm_reg_i16x16:
620 // CHECK: #APP
621 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
622 // CHECK: #NO_APP
623 check!(zmm_reg_i16x16 i16x16 zmm_reg "vmovaps");
624
625 // CHECK-LABEL: zmm_reg_i32x8:
626 // CHECK: #APP
627 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
628 // CHECK: #NO_APP
629 check!(zmm_reg_i32x8 i32x8 zmm_reg "vmovaps");
630
631 // CHECK-LABEL: zmm_reg_i64x4:
632 // CHECK: #APP
633 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
634 // CHECK: #NO_APP
635 check!(zmm_reg_i64x4 i64x4 zmm_reg "vmovaps");
636
637 // CHECK-LABEL: zmm_reg_f32x8:
638 // CHECK: #APP
639 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
640 // CHECK: #NO_APP
641 check!(zmm_reg_f32x8 f32x8 zmm_reg "vmovaps");
642
643 // CHECK-LABEL: zmm_reg_f64x4:
644 // CHECK: #APP
645 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
646 // CHECK: #NO_APP
647 check!(zmm_reg_f64x4 f64x4 zmm_reg "vmovaps");
648
649 // CHECK-LABEL: zmm_reg_i8x64:
650 // CHECK: #APP
651 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
652 // CHECK: #NO_APP
653 check!(zmm_reg_i8x64 i8x64 zmm_reg "vmovaps");
654
655 // CHECK-LABEL: zmm_reg_i16x32:
656 // CHECK: #APP
657 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
658 // CHECK: #NO_APP
659 check!(zmm_reg_i16x32 i16x32 zmm_reg "vmovaps");
660
661 // CHECK-LABEL: zmm_reg_i32x16:
662 // CHECK: #APP
663 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
664 // CHECK: #NO_APP
665 check!(zmm_reg_i32x16 i32x16 zmm_reg "vmovaps");
666
667 // CHECK-LABEL: zmm_reg_i64x8:
668 // CHECK: #APP
669 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
670 // CHECK: #NO_APP
671 check!(zmm_reg_i64x8 i64x8 zmm_reg "vmovaps");
672
673 // CHECK-LABEL: zmm_reg_f32x16:
674 // CHECK: #APP
675 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
676 // CHECK: #NO_APP
677 check!(zmm_reg_f32x16 f32x16 zmm_reg "vmovaps");
678
679 // CHECK-LABEL: zmm_reg_f64x8:
680 // CHECK: #APP
681 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
682 // CHECK: #NO_APP
683 check!(zmm_reg_f64x8 f64x8 zmm_reg "vmovaps");
684
685 // CHECK-LABEL: kreg_i8:
686 // CHECK: #APP
687 // CHECK: kmovb k{{[0-9]+}}, k{{[0-9]+}}
688 // CHECK: #NO_APP
689 check!(kreg_i8 i8 kreg "kmovb");
690
691 // CHECK-LABEL: kreg_i16:
692 // CHECK: #APP
693 // CHECK: kmovw k{{[0-9]+}}, k{{[0-9]+}}
694 // CHECK: #NO_APP
695 check!(kreg_i16 i16 kreg "kmovw");
696
697 // CHECK-LABEL: kreg_i32:
698 // CHECK: #APP
699 // CHECK: kmovd k{{[0-9]+}}, k{{[0-9]+}}
700 // CHECK: #NO_APP
701 check!(kreg_i32 i32 kreg "kmovd");
702
703 // CHECK-LABEL: kreg_i64:
704 // CHECK: #APP
705 // CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}}
706 // CHECK: #NO_APP
707 check!(kreg_i64 i64 kreg "kmovq");
708
709 // CHECK-LABEL: kreg_ptr:
710 // CHECK: #APP
711 // CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}}
712 // CHECK: #NO_APP
713 check!(kreg_ptr ptr kreg "kmovq");
714
715 // CHECK-LABEL: eax_i16:
716 // CHECK: #APP
717 // CHECK: mov eax, eax
718 // CHECK: #NO_APP
719 check_reg!(eax_i16 i16 "eax" "mov");
720
721 // CHECK-LABEL: eax_i32:
722 // CHECK: #APP
723 // CHECK: mov eax, eax
724 // CHECK: #NO_APP
725 check_reg!(eax_i32 i32 "eax" "mov");
726
727 // CHECK-LABEL: eax_f32:
728 // CHECK: #APP
729 // CHECK: mov eax, eax
730 // CHECK: #NO_APP
731 check_reg!(eax_f32 f32 "eax" "mov");
732
733 // x86_64-LABEL: eax_i64:
734 // x86_64: #APP
735 // x86_64: mov eax, eax
736 // x86_64: #NO_APP
737 #[cfg(x86_64)]
738 check_reg!(eax_i64 i64 "eax" "mov");
739
740 // x86_64-LABEL: eax_f64:
741 // x86_64: #APP
742 // x86_64: mov eax, eax
743 // x86_64: #NO_APP
744 #[cfg(x86_64)]
745 check_reg!(eax_f64 f64 "eax" "mov");
746
747 // CHECK-LABEL: eax_ptr:
748 // CHECK: #APP
749 // CHECK: mov eax, eax
750 // CHECK: #NO_APP
751 check_reg!(eax_ptr ptr "eax" "mov");
752
753 // i686-LABEL: ah_byte:
754 // i686: #APP
755 // i686: mov ah, ah
756 // i686: #NO_APP
757 #[cfg(i686)]
758 check_reg!(ah_byte i8 "ah" "mov");
759
760 // CHECK-LABEL: xmm0_i32:
761 // CHECK: #APP
762 // CHECK: movaps xmm0, xmm0
763 // CHECK: #NO_APP
764 check_reg!(xmm0_i32 i32 "xmm0" "movaps");
765
766 // CHECK-LABEL: xmm0_f32:
767 // CHECK: #APP
768 // CHECK: movaps xmm0, xmm0
769 // CHECK: #NO_APP
770 check_reg!(xmm0_f32 f32 "xmm0" "movaps");
771
772 // CHECK-LABEL: xmm0_i64:
773 // CHECK: #APP
774 // CHECK: movaps xmm0, xmm0
775 // CHECK: #NO_APP
776 check_reg!(xmm0_i64 i64 "xmm0" "movaps");
777
778 // CHECK-LABEL: xmm0_f64:
779 // CHECK: #APP
780 // CHECK: movaps xmm0, xmm0
781 // CHECK: #NO_APP
782 check_reg!(xmm0_f64 f64 "xmm0" "movaps");
783
784 // CHECK-LABEL: xmm0_ptr:
785 // CHECK: #APP
786 // CHECK: movaps xmm0, xmm0
787 // CHECK: #NO_APP
788 check_reg!(xmm0_ptr ptr "xmm0" "movaps");
789
790 // CHECK-LABEL: xmm0_i8x16:
791 // CHECK: #APP
792 // CHECK: movaps xmm0, xmm0
793 // CHECK: #NO_APP
794 check_reg!(xmm0_i8x16 i8x16 "xmm0" "movaps");
795
796 // CHECK-LABEL: xmm0_i16x8:
797 // CHECK: #APP
798 // CHECK: movaps xmm0, xmm0
799 // CHECK: #NO_APP
800 check_reg!(xmm0_i16x8 i16x8 "xmm0" "movaps");
801
802 // CHECK-LABEL: xmm0_i32x4:
803 // CHECK: #APP
804 // CHECK: movaps xmm0, xmm0
805 // CHECK: #NO_APP
806 check_reg!(xmm0_i32x4 i32x4 "xmm0" "movaps");
807
808 // CHECK-LABEL: xmm0_i64x2:
809 // CHECK: #APP
810 // CHECK: movaps xmm0, xmm0
811 // CHECK: #NO_APP
812 check_reg!(xmm0_i64x2 i64x2 "xmm0" "movaps");
813
814 // CHECK-LABEL: xmm0_f32x4:
815 // CHECK: #APP
816 // CHECK: movaps xmm0, xmm0
817 // CHECK: #NO_APP
818 check_reg!(xmm0_f32x4 f32x4 "xmm0" "movaps");
819
820 // CHECK-LABEL: xmm0_f64x2:
821 // CHECK: #APP
822 // CHECK: movaps xmm0, xmm0
823 // CHECK: #NO_APP
824 check_reg!(xmm0_f64x2 f64x2 "xmm0" "movaps");
825
826 // CHECK-LABEL: ymm0_i32:
827 // CHECK: #APP
828 // CHECK: vmovaps ymm0, ymm0
829 // CHECK: #NO_APP
830 check_reg!(ymm0_i32 i32 "ymm0" "vmovaps");
831
832 // CHECK-LABEL: ymm0_f32:
833 // CHECK: #APP
834 // CHECK: vmovaps ymm0, ymm0
835 // CHECK: #NO_APP
836 check_reg!(ymm0_f32 f32 "ymm0" "vmovaps");
837
838 // CHECK-LABEL: ymm0_i64:
839 // CHECK: #APP
840 // CHECK: vmovaps ymm0, ymm0
841 // CHECK: #NO_APP
842 check_reg!(ymm0_i64 i64 "ymm0" "vmovaps");
843
844 // CHECK-LABEL: ymm0_f64:
845 // CHECK: #APP
846 // CHECK: vmovaps ymm0, ymm0
847 // CHECK: #NO_APP
848 check_reg!(ymm0_f64 f64 "ymm0" "vmovaps");
849
850 // CHECK-LABEL: ymm0_ptr:
851 // CHECK: #APP
852 // CHECK: vmovaps ymm0, ymm0
853 // CHECK: #NO_APP
854 check_reg!(ymm0_ptr ptr "ymm0" "vmovaps");
855
856 // CHECK-LABEL: ymm0_i8x16:
857 // CHECK: #APP
858 // CHECK: vmovaps ymm0, ymm0
859 // CHECK: #NO_APP
860 check_reg!(ymm0_i8x16 i8x16 "ymm0" "vmovaps");
861
862 // CHECK-LABEL: ymm0_i16x8:
863 // CHECK: #APP
864 // CHECK: vmovaps ymm0, ymm0
865 // CHECK: #NO_APP
866 check_reg!(ymm0_i16x8 i16x8 "ymm0" "vmovaps");
867
868 // CHECK-LABEL: ymm0_i32x4:
869 // CHECK: #APP
870 // CHECK: vmovaps ymm0, ymm0
871 // CHECK: #NO_APP
872 check_reg!(ymm0_i32x4 i32x4 "ymm0" "vmovaps");
873
874 // CHECK-LABEL: ymm0_i64x2:
875 // CHECK: #APP
876 // CHECK: vmovaps ymm0, ymm0
877 // CHECK: #NO_APP
878 check_reg!(ymm0_i64x2 i64x2 "ymm0" "vmovaps");
879
880 // CHECK-LABEL: ymm0_f32x4:
881 // CHECK: #APP
882 // CHECK: vmovaps ymm0, ymm0
883 // CHECK: #NO_APP
884 check_reg!(ymm0_f32x4 f32x4 "ymm0" "vmovaps");
885
886 // CHECK-LABEL: ymm0_f64x2:
887 // CHECK: #APP
888 // CHECK: vmovaps ymm0, ymm0
889 // CHECK: #NO_APP
890 check_reg!(ymm0_f64x2 f64x2 "ymm0" "vmovaps");
891
892 // CHECK-LABEL: ymm0_i8x32:
893 // CHECK: #APP
894 // CHECK: vmovaps ymm0, ymm0
895 // CHECK: #NO_APP
896 check_reg!(ymm0_i8x32 i8x32 "ymm0" "vmovaps");
897
898 // CHECK-LABEL: ymm0_i16x16:
899 // CHECK: #APP
900 // CHECK: vmovaps ymm0, ymm0
901 // CHECK: #NO_APP
902 check_reg!(ymm0_i16x16 i16x16 "ymm0" "vmovaps");
903
904 // CHECK-LABEL: ymm0_i32x8:
905 // CHECK: #APP
906 // CHECK: vmovaps ymm0, ymm0
907 // CHECK: #NO_APP
908 check_reg!(ymm0_i32x8 i32x8 "ymm0" "vmovaps");
909
910 // CHECK-LABEL: ymm0_i64x4:
911 // CHECK: #APP
912 // CHECK: vmovaps ymm0, ymm0
913 // CHECK: #NO_APP
914 check_reg!(ymm0_i64x4 i64x4 "ymm0" "vmovaps");
915
916 // CHECK-LABEL: ymm0_f32x8:
917 // CHECK: #APP
918 // CHECK: vmovaps ymm0, ymm0
919 // CHECK: #NO_APP
920 check_reg!(ymm0_f32x8 f32x8 "ymm0" "vmovaps");
921
922 // CHECK-LABEL: ymm0_f64x4:
923 // CHECK: #APP
924 // CHECK: vmovaps ymm0, ymm0
925 // CHECK: #NO_APP
926 check_reg!(ymm0_f64x4 f64x4 "ymm0" "vmovaps");
927
928 // CHECK-LABEL: zmm0_i32:
929 // CHECK: #APP
930 // CHECK: vmovaps zmm0, zmm0
931 // CHECK: #NO_APP
932 check_reg!(zmm0_i32 i32 "zmm0" "vmovaps");
933
934 // CHECK-LABEL: zmm0_f32:
935 // CHECK: #APP
936 // CHECK: vmovaps zmm0, zmm0
937 // CHECK: #NO_APP
938 check_reg!(zmm0_f32 f32 "zmm0" "vmovaps");
939
940 // CHECK-LABEL: zmm0_i64:
941 // CHECK: #APP
942 // CHECK: vmovaps zmm0, zmm0
943 // CHECK: #NO_APP
944 check_reg!(zmm0_i64 i64 "zmm0" "vmovaps");
945
946 // CHECK-LABEL: zmm0_f64:
947 // CHECK: #APP
948 // CHECK: vmovaps zmm0, zmm0
949 // CHECK: #NO_APP
950 check_reg!(zmm0_f64 f64 "zmm0" "vmovaps");
951
952 // CHECK-LABEL: zmm0_ptr:
953 // CHECK: #APP
954 // CHECK: vmovaps zmm0, zmm0
955 // CHECK: #NO_APP
956 check_reg!(zmm0_ptr ptr "zmm0" "vmovaps");
957
958 // CHECK-LABEL: zmm0_i8x16:
959 // CHECK: #APP
960 // CHECK: vmovaps zmm0, zmm0
961 // CHECK: #NO_APP
962 check_reg!(zmm0_i8x16 i8x16 "zmm0" "vmovaps");
963
964 // CHECK-LABEL: zmm0_i16x8:
965 // CHECK: #APP
966 // CHECK: vmovaps zmm0, zmm0
967 // CHECK: #NO_APP
968 check_reg!(zmm0_i16x8 i16x8 "zmm0" "vmovaps");
969
970 // CHECK-LABEL: zmm0_i32x4:
971 // CHECK: #APP
972 // CHECK: vmovaps zmm0, zmm0
973 // CHECK: #NO_APP
974 check_reg!(zmm0_i32x4 i32x4 "zmm0" "vmovaps");
975
976 // CHECK-LABEL: zmm0_i64x2:
977 // CHECK: #APP
978 // CHECK: vmovaps zmm0, zmm0
979 // CHECK: #NO_APP
980 check_reg!(zmm0_i64x2 i64x2 "zmm0" "vmovaps");
981
982 // CHECK-LABEL: zmm0_f32x4:
983 // CHECK: #APP
984 // CHECK: vmovaps zmm0, zmm0
985 // CHECK: #NO_APP
986 check_reg!(zmm0_f32x4 f32x4 "zmm0" "vmovaps");
987
988 // CHECK-LABEL: zmm0_f64x2:
989 // CHECK: #APP
990 // CHECK: vmovaps zmm0, zmm0
991 // CHECK: #NO_APP
992 check_reg!(zmm0_f64x2 f64x2 "zmm0" "vmovaps");
993
994 // CHECK-LABEL: zmm0_i8x32:
995 // CHECK: #APP
996 // CHECK: vmovaps zmm0, zmm0
997 // CHECK: #NO_APP
998 check_reg!(zmm0_i8x32 i8x32 "zmm0" "vmovaps");
999
1000 // CHECK-LABEL: zmm0_i16x16:
1001 // CHECK: #APP
1002 // CHECK: vmovaps zmm0, zmm0
1003 // CHECK: #NO_APP
1004 check_reg!(zmm0_i16x16 i16x16 "zmm0" "vmovaps");
1005
1006 // CHECK-LABEL: zmm0_i32x8:
1007 // CHECK: #APP
1008 // CHECK: vmovaps zmm0, zmm0
1009 // CHECK: #NO_APP
1010 check_reg!(zmm0_i32x8 i32x8 "zmm0" "vmovaps");
1011
1012 // CHECK-LABEL: zmm0_i64x4:
1013 // CHECK: #APP
1014 // CHECK: vmovaps zmm0, zmm0
1015 // CHECK: #NO_APP
1016 check_reg!(zmm0_i64x4 i64x4 "zmm0" "vmovaps");
1017
1018 // CHECK-LABEL: zmm0_f32x8:
1019 // CHECK: #APP
1020 // CHECK: vmovaps zmm0, zmm0
1021 // CHECK: #NO_APP
1022 check_reg!(zmm0_f32x8 f32x8 "zmm0" "vmovaps");
1023
1024 // CHECK-LABEL: zmm0_f64x4:
1025 // CHECK: #APP
1026 // CHECK: vmovaps zmm0, zmm0
1027 // CHECK: #NO_APP
1028 check_reg!(zmm0_f64x4 f64x4 "zmm0" "vmovaps");
1029
1030 // CHECK-LABEL: zmm0_i8x64:
1031 // CHECK: #APP
1032 // CHECK: vmovaps zmm0, zmm0
1033 // CHECK: #NO_APP
1034 check_reg!(zmm0_i8x64 i8x64 "zmm0" "vmovaps");
1035
1036 // CHECK-LABEL: zmm0_i16x32:
1037 // CHECK: #APP
1038 // CHECK: vmovaps zmm0, zmm0
1039 // CHECK: #NO_APP
1040 check_reg!(zmm0_i16x32 i16x32 "zmm0" "vmovaps");
1041
1042 // CHECK-LABEL: zmm0_i32x16:
1043 // CHECK: #APP
1044 // CHECK: vmovaps zmm0, zmm0
1045 // CHECK: #NO_APP
1046 check_reg!(zmm0_i32x16 i32x16 "zmm0" "vmovaps");
1047
1048 // CHECK-LABEL: zmm0_i64x8:
1049 // CHECK: #APP
1050 // CHECK: vmovaps zmm0, zmm0
1051 // CHECK: #NO_APP
1052 check_reg!(zmm0_i64x8 i64x8 "zmm0" "vmovaps");
1053
1054 // CHECK-LABEL: zmm0_f32x16:
1055 // CHECK: #APP
1056 // CHECK: vmovaps zmm0, zmm0
1057 // CHECK: #NO_APP
1058 check_reg!(zmm0_f32x16 f32x16 "zmm0" "vmovaps");
1059
1060 // CHECK-LABEL: zmm0_f64x8:
1061 // CHECK: #APP
1062 // CHECK: vmovaps zmm0, zmm0
1063 // CHECK: #NO_APP
1064 check_reg!(zmm0_f64x8 f64x8 "zmm0" "vmovaps");
1065
1066 // CHECK-LABEL: k1_i8:
1067 // CHECK: #APP
1068 // CHECK: kmovb k1, k1
1069 // CHECK: #NO_APP
1070 check_reg!(k1_i8 i8 "k1" "kmovb");
1071
1072 // CHECK-LABEL: k1_i16:
1073 // CHECK: #APP
1074 // CHECK: kmovw k1, k1
1075 // CHECK: #NO_APP
1076 check_reg!(k1_i16 i16 "k1" "kmovw");
1077
1078 // CHECK-LABEL: k1_i32:
1079 // CHECK: #APP
1080 // CHECK: kmovd k1, k1
1081 // CHECK: #NO_APP
1082 check_reg!(k1_i32 i32 "k1" "kmovd");
1083
1084 // CHECK-LABEL: k1_i64:
1085 // CHECK: #APP
1086 // CHECK: kmovq k1, k1
1087 // CHECK: #NO_APP
1088 check_reg!(k1_i64 i64 "k1" "kmovq");
1089
1090 // CHECK-LABEL: k1_ptr:
1091 // CHECK: #APP
1092 // CHECK: kmovq k1, k1
1093 // CHECK: #NO_APP
1094 check_reg!(k1_ptr ptr "k1" "kmovq");