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 //[i686] compile-flags: --target i686-unknown-linux-gnu
6 // compile-flags: -C llvm-args=--x86-asm-syntax=intel
7 // compile-flags: -C target-feature=+avx512bw
9 #![feature(no_core, lang_items, rustc_attrs, repr_simd)]
10 #![crate_type = "rlib"]
12 #![allow(asm_sub_register, non_camel_case_types)]
14 #[rustc_builtin_macro]
18 #[rustc_builtin_macro]
22 #[rustc_builtin_macro]
23 macro_rules! stringify {
35 pub struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8);
37 pub struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
39 pub struct i32x4(i32, i32, i32, i32);
41 pub struct i64x2(i64, i64);
43 pub struct f32x4(f32, f32, f32, f32);
45 pub struct f64x2(f64, f64);
83 pub struct i16x16(i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16);
85 pub struct i32x8(i32, i32, i32, i32, i32, i32, i32, i32);
87 pub struct i64x4(i64, i64, i64, i64);
89 pub struct f32x8(f32, f32, f32, f32, f32, f32, f32, f32);
91 pub struct f64x4(f64, f64, f64, f64);
196 pub struct i32x16(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32);
198 pub struct i64x8(i64, i64, i64, i64, i64, i64, i64, i64);
200 pub struct f32x16(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32);
202 pub struct f64x8(f64, f64, f64, f64, f64, f64, f64, f64);
211 impl Copy for i8x16 {}
212 impl Copy for i16x8 {}
213 impl Copy for i32x4 {}
214 impl Copy for i64x2 {}
215 impl Copy for f32x4 {}
216 impl Copy for f64x2 {}
217 impl Copy for i8x32 {}
218 impl Copy for i16x16 {}
219 impl Copy for i32x8 {}
220 impl Copy for i64x4 {}
221 impl Copy for f32x8 {}
222 impl Copy for f64x4 {}
223 impl Copy for i8x64 {}
224 impl Copy for i16x32 {}
225 impl Copy for i32x16 {}
226 impl Copy for i64x8 {}
227 impl Copy for f32x16 {}
228 impl Copy for f64x8 {}
232 static extern_static: u8;
235 // CHECK-LABEL: sym_fn:
237 // CHECK: call extern_func
240 pub unsafe fn sym_fn() {
241 asm!("call {}", sym extern_func);
244 // CHECK-LABEL: sym_static:
246 // CHECK: mov al, byte ptr [extern_static]
249 pub unsafe fn sym_static() {
250 asm!("mov al, byte ptr [{}]", sym extern_static);
254 ($func:ident $ty:ident $class:ident $mov:literal) => {
256 pub unsafe fn $func(x: $ty) -> $ty {
257 // Hack to avoid function merging
259 fn dont_merge(s: &str);
261 dont_merge(stringify!($func));
264 asm!(concat!($mov, " {}, {}"), lateout($class) y, in($class) x);
270 macro_rules! check_reg {
271 ($func:ident $ty:ident $reg:tt $mov:literal) => {
273 pub unsafe fn $func(x: $ty) -> $ty {
274 // Hack to avoid function merging
276 fn dont_merge(s: &str);
278 dont_merge(stringify!($func));
281 asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x);
287 // CHECK-LABEL: reg_i16:
289 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
290 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
292 check!(reg_i16 i16 reg "mov");
294 // CHECK-LABEL: reg_i32:
296 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
297 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
299 check!(reg_i32 i32 reg "mov");
301 // CHECK-LABEL: reg_f32:
303 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
304 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
306 check!(reg_f32 f32 reg "mov");
308 // x86_64-LABEL: reg_i64:
310 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
313 check!(reg_i64 i64 reg "mov");
315 // x86_64-LABEL: reg_f64:
317 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
320 check!(reg_f64 f64 reg "mov");
322 // CHECK-LABEL: reg_ptr:
324 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
325 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
327 check!(reg_ptr ptr reg "mov");
329 // CHECK-LABEL: reg_abcd_i16:
331 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
332 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
334 check!(reg_abcd_i16 i16 reg_abcd "mov");
336 // CHECK-LABEL: reg_abcd_i32:
338 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
339 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
341 check!(reg_abcd_i32 i32 reg_abcd "mov");
343 // CHECK-LABEL: reg_abcd_f32:
345 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
346 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
348 check!(reg_abcd_f32 f32 reg_abcd "mov");
350 // x86_64-LABEL: reg_abcd_i64:
352 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
355 check!(reg_abcd_i64 i64 reg_abcd "mov");
357 // x86_64-LABEL: reg_abcd_f64:
359 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
362 check!(reg_abcd_f64 f64 reg_abcd "mov");
364 // CHECK-LABEL: reg_abcd_ptr:
366 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
367 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
369 check!(reg_abcd_ptr ptr reg_abcd "mov");
371 // CHECK-LABEL: reg_byte:
373 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
375 check!(reg_byte i8 reg_byte "mov");
377 // CHECK-LABEL: xmm_reg_i32:
379 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
381 check!(xmm_reg_i32 i32 xmm_reg "movaps");
383 // CHECK-LABEL: xmm_reg_f32:
385 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
387 check!(xmm_reg_f32 f32 xmm_reg "movaps");
389 // CHECK-LABEL: xmm_reg_i64:
391 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
393 check!(xmm_reg_i64 i64 xmm_reg "movaps");
395 // CHECK-LABEL: xmm_reg_f64:
397 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
399 check!(xmm_reg_f64 f64 xmm_reg "movaps");
401 // CHECK-LABEL: xmm_reg_ptr:
403 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
405 check!(xmm_reg_ptr ptr xmm_reg "movaps");
407 // CHECK-LABEL: xmm_reg_i8x16:
409 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
411 check!(xmm_reg_i8x16 i8x16 xmm_reg "movaps");
413 // CHECK-LABEL: xmm_reg_i16x8:
415 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
417 check!(xmm_reg_i16x8 i16x8 xmm_reg "movaps");
419 // CHECK-LABEL: xmm_reg_i32x4:
421 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
423 check!(xmm_reg_i32x4 i32x4 xmm_reg "movaps");
425 // CHECK-LABEL: xmm_reg_i64x2:
427 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
429 check!(xmm_reg_i64x2 i64x2 xmm_reg "movaps");
431 // CHECK-LABEL: xmm_reg_f32x4:
433 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
435 check!(xmm_reg_f32x4 f32x4 xmm_reg "movaps");
437 // CHECK-LABEL: xmm_reg_f64x2:
439 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
441 check!(xmm_reg_f64x2 f64x2 xmm_reg "movaps");
443 // CHECK-LABEL: ymm_reg_i32:
445 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
447 check!(ymm_reg_i32 i32 ymm_reg "vmovaps");
449 // CHECK-LABEL: ymm_reg_f32:
451 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
453 check!(ymm_reg_f32 f32 ymm_reg "vmovaps");
455 // CHECK-LABEL: ymm_reg_i64:
457 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
459 check!(ymm_reg_i64 i64 ymm_reg "vmovaps");
461 // CHECK-LABEL: ymm_reg_f64:
463 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
465 check!(ymm_reg_f64 f64 ymm_reg "vmovaps");
467 // CHECK-LABEL: ymm_reg_ptr:
469 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
471 check!(ymm_reg_ptr ptr ymm_reg "vmovaps");
473 // CHECK-LABEL: ymm_reg_i8x16:
475 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
477 check!(ymm_reg_i8x16 i8x16 ymm_reg "vmovaps");
479 // CHECK-LABEL: ymm_reg_i16x8:
481 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
483 check!(ymm_reg_i16x8 i16x8 ymm_reg "vmovaps");
485 // CHECK-LABEL: ymm_reg_i32x4:
487 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
489 check!(ymm_reg_i32x4 i32x4 ymm_reg "vmovaps");
491 // CHECK-LABEL: ymm_reg_i64x2:
493 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
495 check!(ymm_reg_i64x2 i64x2 ymm_reg "vmovaps");
497 // CHECK-LABEL: ymm_reg_f32x4:
499 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
501 check!(ymm_reg_f32x4 f32x4 ymm_reg "vmovaps");
503 // CHECK-LABEL: ymm_reg_f64x2:
505 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
507 check!(ymm_reg_f64x2 f64x2 ymm_reg "vmovaps");
509 // CHECK-LABEL: ymm_reg_i8x32:
511 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
513 check!(ymm_reg_i8x32 i8x32 ymm_reg "vmovaps");
515 // CHECK-LABEL: ymm_reg_i16x16:
517 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
519 check!(ymm_reg_i16x16 i16x16 ymm_reg "vmovaps");
521 // CHECK-LABEL: ymm_reg_i32x8:
523 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
525 check!(ymm_reg_i32x8 i32x8 ymm_reg "vmovaps");
527 // CHECK-LABEL: ymm_reg_i64x4:
529 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
531 check!(ymm_reg_i64x4 i64x4 ymm_reg "vmovaps");
533 // CHECK-LABEL: ymm_reg_f32x8:
535 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
537 check!(ymm_reg_f32x8 f32x8 ymm_reg "vmovaps");
539 // CHECK-LABEL: ymm_reg_f64x4:
541 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
543 check!(ymm_reg_f64x4 f64x4 ymm_reg "vmovaps");
545 // CHECK-LABEL: zmm_reg_i32:
547 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
549 check!(zmm_reg_i32 i32 zmm_reg "vmovaps");
551 // CHECK-LABEL: zmm_reg_f32:
553 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
555 check!(zmm_reg_f32 f32 zmm_reg "vmovaps");
557 // CHECK-LABEL: zmm_reg_i64:
559 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
561 check!(zmm_reg_i64 i64 zmm_reg "vmovaps");
563 // CHECK-LABEL: zmm_reg_f64:
565 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
567 check!(zmm_reg_f64 f64 zmm_reg "vmovaps");
569 // CHECK-LABEL: zmm_reg_ptr:
571 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
573 check!(zmm_reg_ptr ptr zmm_reg "vmovaps");
575 // CHECK-LABEL: zmm_reg_i8x16:
577 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
579 check!(zmm_reg_i8x16 i8x16 zmm_reg "vmovaps");
581 // CHECK-LABEL: zmm_reg_i16x8:
583 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
585 check!(zmm_reg_i16x8 i16x8 zmm_reg "vmovaps");
587 // CHECK-LABEL: zmm_reg_i32x4:
589 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
591 check!(zmm_reg_i32x4 i32x4 zmm_reg "vmovaps");
593 // CHECK-LABEL: zmm_reg_i64x2:
595 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
597 check!(zmm_reg_i64x2 i64x2 zmm_reg "vmovaps");
599 // CHECK-LABEL: zmm_reg_f32x4:
601 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
603 check!(zmm_reg_f32x4 f32x4 zmm_reg "vmovaps");
605 // CHECK-LABEL: zmm_reg_f64x2:
607 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
609 check!(zmm_reg_f64x2 f64x2 zmm_reg "vmovaps");
611 // CHECK-LABEL: zmm_reg_i8x32:
613 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
615 check!(zmm_reg_i8x32 i8x32 zmm_reg "vmovaps");
617 // CHECK-LABEL: zmm_reg_i16x16:
619 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
621 check!(zmm_reg_i16x16 i16x16 zmm_reg "vmovaps");
623 // CHECK-LABEL: zmm_reg_i32x8:
625 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
627 check!(zmm_reg_i32x8 i32x8 zmm_reg "vmovaps");
629 // CHECK-LABEL: zmm_reg_i64x4:
631 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
633 check!(zmm_reg_i64x4 i64x4 zmm_reg "vmovaps");
635 // CHECK-LABEL: zmm_reg_f32x8:
637 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
639 check!(zmm_reg_f32x8 f32x8 zmm_reg "vmovaps");
641 // CHECK-LABEL: zmm_reg_f64x4:
643 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
645 check!(zmm_reg_f64x4 f64x4 zmm_reg "vmovaps");
647 // CHECK-LABEL: zmm_reg_i8x64:
649 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
651 check!(zmm_reg_i8x64 i8x64 zmm_reg "vmovaps");
653 // CHECK-LABEL: zmm_reg_i16x32:
655 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
657 check!(zmm_reg_i16x32 i16x32 zmm_reg "vmovaps");
659 // CHECK-LABEL: zmm_reg_i32x16:
661 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
663 check!(zmm_reg_i32x16 i32x16 zmm_reg "vmovaps");
665 // CHECK-LABEL: zmm_reg_i64x8:
667 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
669 check!(zmm_reg_i64x8 i64x8 zmm_reg "vmovaps");
671 // CHECK-LABEL: zmm_reg_f32x16:
673 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
675 check!(zmm_reg_f32x16 f32x16 zmm_reg "vmovaps");
677 // CHECK-LABEL: zmm_reg_f64x8:
679 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
681 check!(zmm_reg_f64x8 f64x8 zmm_reg "vmovaps");
683 // CHECK-LABEL: kreg_i8:
685 // CHECK: kmovb k{{[0-9]+}}, k{{[0-9]+}}
687 check!(kreg_i8 i8 kreg "kmovb");
689 // CHECK-LABEL: kreg_i16:
691 // CHECK: kmovw k{{[0-9]+}}, k{{[0-9]+}}
693 check!(kreg_i16 i16 kreg "kmovw");
695 // CHECK-LABEL: kreg_i32:
697 // CHECK: kmovd k{{[0-9]+}}, k{{[0-9]+}}
699 check!(kreg_i32 i32 kreg "kmovd");
701 // CHECK-LABEL: kreg_i64:
703 // CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}}
705 check!(kreg_i64 i64 kreg "kmovq");
707 // CHECK-LABEL: kreg_ptr:
709 // CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}}
711 check!(kreg_ptr ptr kreg "kmovq");
713 // CHECK-LABEL: eax_i16:
715 // CHECK: mov eax, eax
717 check_reg!(eax_i16 i16 "eax" "mov");
719 // CHECK-LABEL: eax_i32:
721 // CHECK: mov eax, eax
723 check_reg!(eax_i32 i32 "eax" "mov");
725 // CHECK-LABEL: eax_f32:
727 // CHECK: mov eax, eax
729 check_reg!(eax_f32 f32 "eax" "mov");
731 // x86_64-LABEL: eax_i64:
733 // x86_64: mov eax, eax
736 check_reg!(eax_i64 i64 "eax" "mov");
738 // x86_64-LABEL: eax_f64:
740 // x86_64: mov eax, eax
743 check_reg!(eax_f64 f64 "eax" "mov");
745 // CHECK-LABEL: eax_ptr:
747 // CHECK: mov eax, eax
749 check_reg!(eax_ptr ptr "eax" "mov");
751 // CHECK-LABEL: ah_byte:
755 check_reg!(ah_byte i8 "ah" "mov");
757 // CHECK-LABEL: xmm0_i32:
759 // CHECK: movaps xmm0, xmm0
761 check_reg!(xmm0_i32 i32 "xmm0" "movaps");
763 // CHECK-LABEL: xmm0_f32:
765 // CHECK: movaps xmm0, xmm0
767 check_reg!(xmm0_f32 f32 "xmm0" "movaps");
769 // CHECK-LABEL: xmm0_i64:
771 // CHECK: movaps xmm0, xmm0
773 check_reg!(xmm0_i64 i64 "xmm0" "movaps");
775 // CHECK-LABEL: xmm0_f64:
777 // CHECK: movaps xmm0, xmm0
779 check_reg!(xmm0_f64 f64 "xmm0" "movaps");
781 // CHECK-LABEL: xmm0_ptr:
783 // CHECK: movaps xmm0, xmm0
785 check_reg!(xmm0_ptr ptr "xmm0" "movaps");
787 // CHECK-LABEL: xmm0_i8x16:
789 // CHECK: movaps xmm0, xmm0
791 check_reg!(xmm0_i8x16 i8x16 "xmm0" "movaps");
793 // CHECK-LABEL: xmm0_i16x8:
795 // CHECK: movaps xmm0, xmm0
797 check_reg!(xmm0_i16x8 i16x8 "xmm0" "movaps");
799 // CHECK-LABEL: xmm0_i32x4:
801 // CHECK: movaps xmm0, xmm0
803 check_reg!(xmm0_i32x4 i32x4 "xmm0" "movaps");
805 // CHECK-LABEL: xmm0_i64x2:
807 // CHECK: movaps xmm0, xmm0
809 check_reg!(xmm0_i64x2 i64x2 "xmm0" "movaps");
811 // CHECK-LABEL: xmm0_f32x4:
813 // CHECK: movaps xmm0, xmm0
815 check_reg!(xmm0_f32x4 f32x4 "xmm0" "movaps");
817 // CHECK-LABEL: xmm0_f64x2:
819 // CHECK: movaps xmm0, xmm0
821 check_reg!(xmm0_f64x2 f64x2 "xmm0" "movaps");
823 // CHECK-LABEL: ymm0_i32:
825 // CHECK: vmovaps ymm0, ymm0
827 check_reg!(ymm0_i32 i32 "ymm0" "vmovaps");
829 // CHECK-LABEL: ymm0_f32:
831 // CHECK: vmovaps ymm0, ymm0
833 check_reg!(ymm0_f32 f32 "ymm0" "vmovaps");
835 // CHECK-LABEL: ymm0_i64:
837 // CHECK: vmovaps ymm0, ymm0
839 check_reg!(ymm0_i64 i64 "ymm0" "vmovaps");
841 // CHECK-LABEL: ymm0_f64:
843 // CHECK: vmovaps ymm0, ymm0
845 check_reg!(ymm0_f64 f64 "ymm0" "vmovaps");
847 // CHECK-LABEL: ymm0_ptr:
849 // CHECK: vmovaps ymm0, ymm0
851 check_reg!(ymm0_ptr ptr "ymm0" "vmovaps");
853 // CHECK-LABEL: ymm0_i8x16:
855 // CHECK: vmovaps ymm0, ymm0
857 check_reg!(ymm0_i8x16 i8x16 "ymm0" "vmovaps");
859 // CHECK-LABEL: ymm0_i16x8:
861 // CHECK: vmovaps ymm0, ymm0
863 check_reg!(ymm0_i16x8 i16x8 "ymm0" "vmovaps");
865 // CHECK-LABEL: ymm0_i32x4:
867 // CHECK: vmovaps ymm0, ymm0
869 check_reg!(ymm0_i32x4 i32x4 "ymm0" "vmovaps");
871 // CHECK-LABEL: ymm0_i64x2:
873 // CHECK: vmovaps ymm0, ymm0
875 check_reg!(ymm0_i64x2 i64x2 "ymm0" "vmovaps");
877 // CHECK-LABEL: ymm0_f32x4:
879 // CHECK: vmovaps ymm0, ymm0
881 check_reg!(ymm0_f32x4 f32x4 "ymm0" "vmovaps");
883 // CHECK-LABEL: ymm0_f64x2:
885 // CHECK: vmovaps ymm0, ymm0
887 check_reg!(ymm0_f64x2 f64x2 "ymm0" "vmovaps");
889 // CHECK-LABEL: ymm0_i8x32:
891 // CHECK: vmovaps ymm0, ymm0
893 check_reg!(ymm0_i8x32 i8x32 "ymm0" "vmovaps");
895 // CHECK-LABEL: ymm0_i16x16:
897 // CHECK: vmovaps ymm0, ymm0
899 check_reg!(ymm0_i16x16 i16x16 "ymm0" "vmovaps");
901 // CHECK-LABEL: ymm0_i32x8:
903 // CHECK: vmovaps ymm0, ymm0
905 check_reg!(ymm0_i32x8 i32x8 "ymm0" "vmovaps");
907 // CHECK-LABEL: ymm0_i64x4:
909 // CHECK: vmovaps ymm0, ymm0
911 check_reg!(ymm0_i64x4 i64x4 "ymm0" "vmovaps");
913 // CHECK-LABEL: ymm0_f32x8:
915 // CHECK: vmovaps ymm0, ymm0
917 check_reg!(ymm0_f32x8 f32x8 "ymm0" "vmovaps");
919 // CHECK-LABEL: ymm0_f64x4:
921 // CHECK: vmovaps ymm0, ymm0
923 check_reg!(ymm0_f64x4 f64x4 "ymm0" "vmovaps");
925 // CHECK-LABEL: zmm0_i32:
927 // CHECK: vmovaps zmm0, zmm0
929 check_reg!(zmm0_i32 i32 "zmm0" "vmovaps");
931 // CHECK-LABEL: zmm0_f32:
933 // CHECK: vmovaps zmm0, zmm0
935 check_reg!(zmm0_f32 f32 "zmm0" "vmovaps");
937 // CHECK-LABEL: zmm0_i64:
939 // CHECK: vmovaps zmm0, zmm0
941 check_reg!(zmm0_i64 i64 "zmm0" "vmovaps");
943 // CHECK-LABEL: zmm0_f64:
945 // CHECK: vmovaps zmm0, zmm0
947 check_reg!(zmm0_f64 f64 "zmm0" "vmovaps");
949 // CHECK-LABEL: zmm0_ptr:
951 // CHECK: vmovaps zmm0, zmm0
953 check_reg!(zmm0_ptr ptr "zmm0" "vmovaps");
955 // CHECK-LABEL: zmm0_i8x16:
957 // CHECK: vmovaps zmm0, zmm0
959 check_reg!(zmm0_i8x16 i8x16 "zmm0" "vmovaps");
961 // CHECK-LABEL: zmm0_i16x8:
963 // CHECK: vmovaps zmm0, zmm0
965 check_reg!(zmm0_i16x8 i16x8 "zmm0" "vmovaps");
967 // CHECK-LABEL: zmm0_i32x4:
969 // CHECK: vmovaps zmm0, zmm0
971 check_reg!(zmm0_i32x4 i32x4 "zmm0" "vmovaps");
973 // CHECK-LABEL: zmm0_i64x2:
975 // CHECK: vmovaps zmm0, zmm0
977 check_reg!(zmm0_i64x2 i64x2 "zmm0" "vmovaps");
979 // CHECK-LABEL: zmm0_f32x4:
981 // CHECK: vmovaps zmm0, zmm0
983 check_reg!(zmm0_f32x4 f32x4 "zmm0" "vmovaps");
985 // CHECK-LABEL: zmm0_f64x2:
987 // CHECK: vmovaps zmm0, zmm0
989 check_reg!(zmm0_f64x2 f64x2 "zmm0" "vmovaps");
991 // CHECK-LABEL: zmm0_i8x32:
993 // CHECK: vmovaps zmm0, zmm0
995 check_reg!(zmm0_i8x32 i8x32 "zmm0" "vmovaps");
997 // CHECK-LABEL: zmm0_i16x16:
999 // CHECK: vmovaps zmm0, zmm0
1001 check_reg!(zmm0_i16x16 i16x16 "zmm0" "vmovaps");
1003 // CHECK-LABEL: zmm0_i32x8:
1005 // CHECK: vmovaps zmm0, zmm0
1007 check_reg!(zmm0_i32x8 i32x8 "zmm0" "vmovaps");
1009 // CHECK-LABEL: zmm0_i64x4:
1011 // CHECK: vmovaps zmm0, zmm0
1013 check_reg!(zmm0_i64x4 i64x4 "zmm0" "vmovaps");
1015 // CHECK-LABEL: zmm0_f32x8:
1017 // CHECK: vmovaps zmm0, zmm0
1019 check_reg!(zmm0_f32x8 f32x8 "zmm0" "vmovaps");
1021 // CHECK-LABEL: zmm0_f64x4:
1023 // CHECK: vmovaps zmm0, zmm0
1025 check_reg!(zmm0_f64x4 f64x4 "zmm0" "vmovaps");
1027 // CHECK-LABEL: zmm0_i8x64:
1029 // CHECK: vmovaps zmm0, zmm0
1031 check_reg!(zmm0_i8x64 i8x64 "zmm0" "vmovaps");
1033 // CHECK-LABEL: zmm0_i16x32:
1035 // CHECK: vmovaps zmm0, zmm0
1037 check_reg!(zmm0_i16x32 i16x32 "zmm0" "vmovaps");
1039 // CHECK-LABEL: zmm0_i32x16:
1041 // CHECK: vmovaps zmm0, zmm0
1043 check_reg!(zmm0_i32x16 i32x16 "zmm0" "vmovaps");
1045 // CHECK-LABEL: zmm0_i64x8:
1047 // CHECK: vmovaps zmm0, zmm0
1049 check_reg!(zmm0_i64x8 i64x8 "zmm0" "vmovaps");
1051 // CHECK-LABEL: zmm0_f32x16:
1053 // CHECK: vmovaps zmm0, zmm0
1055 check_reg!(zmm0_f32x16 f32x16 "zmm0" "vmovaps");
1057 // CHECK-LABEL: zmm0_f64x8:
1059 // CHECK: vmovaps zmm0, zmm0
1061 check_reg!(zmm0_f64x8 f64x8 "zmm0" "vmovaps");
1063 // CHECK-LABEL: k1_i8:
1065 // CHECK: kmovb k1, k1
1067 check_reg!(k1_i8 i8 "k1" "kmovb");
1069 // CHECK-LABEL: k1_i16:
1071 // CHECK: kmovw k1, k1
1073 check_reg!(k1_i16 i16 "k1" "kmovw");
1075 // CHECK-LABEL: k1_i32:
1077 // CHECK: kmovd k1, k1
1079 check_reg!(k1_i32 i32 "k1" "kmovd");
1081 // CHECK-LABEL: k1_i64:
1083 // CHECK: kmovq k1, k1
1085 check_reg!(k1_i64 i64 "k1" "kmovq");
1087 // CHECK-LABEL: k1_ptr:
1089 // CHECK: kmovq k1, k1
1091 check_reg!(k1_ptr ptr "k1" "kmovq");