1 // revisions: x86_64 i686
2 // assembly-output: emit-asm
3 //[x86_64] compile-flags: --target x86_64-unknown-linux-gnu
4 //[x86_64] needs-llvm-components: x86
5 //[i686] compile-flags: --target i686-unknown-linux-gnu
6 //[i686] needs-llvm-components: x86
7 // compile-flags: -C llvm-args=--x86-asm-syntax=intel
8 // compile-flags: -C target-feature=+avx512bw
10 #![feature(no_core, lang_items, rustc_attrs, repr_simd, asm_sym)]
11 #![crate_type = "rlib"]
13 #![allow(asm_sub_register, non_camel_case_types)]
15 #[rustc_builtin_macro]
19 #[rustc_builtin_macro]
23 #[rustc_builtin_macro]
24 macro_rules! stringify {
36 pub struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8);
38 pub struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
40 pub struct i32x4(i32, i32, i32, i32);
42 pub struct i64x2(i64, i64);
44 pub struct f32x4(f32, f32, f32, f32);
46 pub struct f64x2(f64, f64);
84 pub struct i16x16(i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16);
86 pub struct i32x8(i32, i32, i32, i32, i32, i32, i32, i32);
88 pub struct i64x4(i64, i64, i64, i64);
90 pub struct f32x8(f32, f32, f32, f32, f32, f32, f32, f32);
92 pub struct f64x4(f64, f64, f64, f64);
197 pub struct i32x16(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32);
199 pub struct i64x8(i64, i64, i64, i64, i64, i64, i64, i64);
201 pub struct f32x16(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32);
203 pub struct f64x8(f64, f64, f64, f64, f64, f64, f64, f64);
212 impl Copy for i8x16 {}
213 impl Copy for i16x8 {}
214 impl Copy for i32x4 {}
215 impl Copy for i64x2 {}
216 impl Copy for f32x4 {}
217 impl Copy for f64x2 {}
218 impl Copy for i8x32 {}
219 impl Copy for i16x16 {}
220 impl Copy for i32x8 {}
221 impl Copy for i64x4 {}
222 impl Copy for f32x8 {}
223 impl Copy for f64x4 {}
224 impl Copy for i8x64 {}
225 impl Copy for i16x32 {}
226 impl Copy for i32x16 {}
227 impl Copy for i64x8 {}
228 impl Copy for f32x16 {}
229 impl Copy for f64x8 {}
233 static extern_static: u8;
236 // CHECK-LABEL: sym_fn:
238 // CHECK: call extern_func
241 pub unsafe fn sym_fn() {
242 asm!("call {}", sym extern_func);
245 // CHECK-LABEL: sym_static:
247 // CHECK: mov al, byte ptr [extern_static]
250 pub unsafe fn sym_static() {
251 asm!("mov al, byte ptr [{}]", sym extern_static);
255 ($func:ident $ty:ident $class:ident $mov:literal) => {
257 pub unsafe fn $func(x: $ty) -> $ty {
258 // Hack to avoid function merging
260 fn dont_merge(s: &str);
262 dont_merge(stringify!($func));
265 asm!(concat!($mov, " {}, {}"), lateout($class) y, in($class) x);
271 macro_rules! check_reg {
272 ($func:ident $ty:ident $reg:tt $mov:literal) => {
274 pub unsafe fn $func(x: $ty) -> $ty {
275 // Hack to avoid function merging
277 fn dont_merge(s: &str);
279 dont_merge(stringify!($func));
282 asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x);
288 // CHECK-LABEL: reg_i16:
290 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
291 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
293 check!(reg_i16 i16 reg "mov");
295 // CHECK-LABEL: reg_i32:
297 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
298 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
300 check!(reg_i32 i32 reg "mov");
302 // CHECK-LABEL: reg_f32:
304 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
305 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
307 check!(reg_f32 f32 reg "mov");
309 // x86_64-LABEL: reg_i64:
311 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
314 check!(reg_i64 i64 reg "mov");
316 // x86_64-LABEL: reg_f64:
318 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
321 check!(reg_f64 f64 reg "mov");
323 // CHECK-LABEL: reg_ptr:
325 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
326 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
328 check!(reg_ptr ptr reg "mov");
330 // CHECK-LABEL: reg_abcd_i16:
332 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
333 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
335 check!(reg_abcd_i16 i16 reg_abcd "mov");
337 // CHECK-LABEL: reg_abcd_i32:
339 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
340 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
342 check!(reg_abcd_i32 i32 reg_abcd "mov");
344 // CHECK-LABEL: reg_abcd_f32:
346 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
347 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
349 check!(reg_abcd_f32 f32 reg_abcd "mov");
351 // x86_64-LABEL: reg_abcd_i64:
353 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
356 check!(reg_abcd_i64 i64 reg_abcd "mov");
358 // x86_64-LABEL: reg_abcd_f64:
360 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
363 check!(reg_abcd_f64 f64 reg_abcd "mov");
365 // CHECK-LABEL: reg_abcd_ptr:
367 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
368 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
370 check!(reg_abcd_ptr ptr reg_abcd "mov");
372 // CHECK-LABEL: reg_byte:
374 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
376 check!(reg_byte i8 reg_byte "mov");
378 // CHECK-LABEL: xmm_reg_i32:
380 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
382 check!(xmm_reg_i32 i32 xmm_reg "movaps");
384 // CHECK-LABEL: xmm_reg_f32:
386 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
388 check!(xmm_reg_f32 f32 xmm_reg "movaps");
390 // CHECK-LABEL: xmm_reg_i64:
392 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
394 check!(xmm_reg_i64 i64 xmm_reg "movaps");
396 // CHECK-LABEL: xmm_reg_f64:
398 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
400 check!(xmm_reg_f64 f64 xmm_reg "movaps");
402 // CHECK-LABEL: xmm_reg_ptr:
404 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
406 check!(xmm_reg_ptr ptr xmm_reg "movaps");
408 // CHECK-LABEL: xmm_reg_i8x16:
410 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
412 check!(xmm_reg_i8x16 i8x16 xmm_reg "movaps");
414 // CHECK-LABEL: xmm_reg_i16x8:
416 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
418 check!(xmm_reg_i16x8 i16x8 xmm_reg "movaps");
420 // CHECK-LABEL: xmm_reg_i32x4:
422 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
424 check!(xmm_reg_i32x4 i32x4 xmm_reg "movaps");
426 // CHECK-LABEL: xmm_reg_i64x2:
428 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
430 check!(xmm_reg_i64x2 i64x2 xmm_reg "movaps");
432 // CHECK-LABEL: xmm_reg_f32x4:
434 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
436 check!(xmm_reg_f32x4 f32x4 xmm_reg "movaps");
438 // CHECK-LABEL: xmm_reg_f64x2:
440 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
442 check!(xmm_reg_f64x2 f64x2 xmm_reg "movaps");
444 // CHECK-LABEL: ymm_reg_i32:
446 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
448 check!(ymm_reg_i32 i32 ymm_reg "vmovaps");
450 // CHECK-LABEL: ymm_reg_f32:
452 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
454 check!(ymm_reg_f32 f32 ymm_reg "vmovaps");
456 // CHECK-LABEL: ymm_reg_i64:
458 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
460 check!(ymm_reg_i64 i64 ymm_reg "vmovaps");
462 // CHECK-LABEL: ymm_reg_f64:
464 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
466 check!(ymm_reg_f64 f64 ymm_reg "vmovaps");
468 // CHECK-LABEL: ymm_reg_ptr:
470 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
472 check!(ymm_reg_ptr ptr ymm_reg "vmovaps");
474 // CHECK-LABEL: ymm_reg_i8x16:
476 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
478 check!(ymm_reg_i8x16 i8x16 ymm_reg "vmovaps");
480 // CHECK-LABEL: ymm_reg_i16x8:
482 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
484 check!(ymm_reg_i16x8 i16x8 ymm_reg "vmovaps");
486 // CHECK-LABEL: ymm_reg_i32x4:
488 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
490 check!(ymm_reg_i32x4 i32x4 ymm_reg "vmovaps");
492 // CHECK-LABEL: ymm_reg_i64x2:
494 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
496 check!(ymm_reg_i64x2 i64x2 ymm_reg "vmovaps");
498 // CHECK-LABEL: ymm_reg_f32x4:
500 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
502 check!(ymm_reg_f32x4 f32x4 ymm_reg "vmovaps");
504 // CHECK-LABEL: ymm_reg_f64x2:
506 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
508 check!(ymm_reg_f64x2 f64x2 ymm_reg "vmovaps");
510 // CHECK-LABEL: ymm_reg_i8x32:
512 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
514 check!(ymm_reg_i8x32 i8x32 ymm_reg "vmovaps");
516 // CHECK-LABEL: ymm_reg_i16x16:
518 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
520 check!(ymm_reg_i16x16 i16x16 ymm_reg "vmovaps");
522 // CHECK-LABEL: ymm_reg_i32x8:
524 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
526 check!(ymm_reg_i32x8 i32x8 ymm_reg "vmovaps");
528 // CHECK-LABEL: ymm_reg_i64x4:
530 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
532 check!(ymm_reg_i64x4 i64x4 ymm_reg "vmovaps");
534 // CHECK-LABEL: ymm_reg_f32x8:
536 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
538 check!(ymm_reg_f32x8 f32x8 ymm_reg "vmovaps");
540 // CHECK-LABEL: ymm_reg_f64x4:
542 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
544 check!(ymm_reg_f64x4 f64x4 ymm_reg "vmovaps");
546 // CHECK-LABEL: zmm_reg_i32:
548 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
550 check!(zmm_reg_i32 i32 zmm_reg "vmovaps");
552 // CHECK-LABEL: zmm_reg_f32:
554 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
556 check!(zmm_reg_f32 f32 zmm_reg "vmovaps");
558 // CHECK-LABEL: zmm_reg_i64:
560 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
562 check!(zmm_reg_i64 i64 zmm_reg "vmovaps");
564 // CHECK-LABEL: zmm_reg_f64:
566 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
568 check!(zmm_reg_f64 f64 zmm_reg "vmovaps");
570 // CHECK-LABEL: zmm_reg_ptr:
572 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
574 check!(zmm_reg_ptr ptr zmm_reg "vmovaps");
576 // CHECK-LABEL: zmm_reg_i8x16:
578 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
580 check!(zmm_reg_i8x16 i8x16 zmm_reg "vmovaps");
582 // CHECK-LABEL: zmm_reg_i16x8:
584 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
586 check!(zmm_reg_i16x8 i16x8 zmm_reg "vmovaps");
588 // CHECK-LABEL: zmm_reg_i32x4:
590 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
592 check!(zmm_reg_i32x4 i32x4 zmm_reg "vmovaps");
594 // CHECK-LABEL: zmm_reg_i64x2:
596 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
598 check!(zmm_reg_i64x2 i64x2 zmm_reg "vmovaps");
600 // CHECK-LABEL: zmm_reg_f32x4:
602 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
604 check!(zmm_reg_f32x4 f32x4 zmm_reg "vmovaps");
606 // CHECK-LABEL: zmm_reg_f64x2:
608 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
610 check!(zmm_reg_f64x2 f64x2 zmm_reg "vmovaps");
612 // CHECK-LABEL: zmm_reg_i8x32:
614 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
616 check!(zmm_reg_i8x32 i8x32 zmm_reg "vmovaps");
618 // CHECK-LABEL: zmm_reg_i16x16:
620 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
622 check!(zmm_reg_i16x16 i16x16 zmm_reg "vmovaps");
624 // CHECK-LABEL: zmm_reg_i32x8:
626 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
628 check!(zmm_reg_i32x8 i32x8 zmm_reg "vmovaps");
630 // CHECK-LABEL: zmm_reg_i64x4:
632 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
634 check!(zmm_reg_i64x4 i64x4 zmm_reg "vmovaps");
636 // CHECK-LABEL: zmm_reg_f32x8:
638 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
640 check!(zmm_reg_f32x8 f32x8 zmm_reg "vmovaps");
642 // CHECK-LABEL: zmm_reg_f64x4:
644 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
646 check!(zmm_reg_f64x4 f64x4 zmm_reg "vmovaps");
648 // CHECK-LABEL: zmm_reg_i8x64:
650 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
652 check!(zmm_reg_i8x64 i8x64 zmm_reg "vmovaps");
654 // CHECK-LABEL: zmm_reg_i16x32:
656 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
658 check!(zmm_reg_i16x32 i16x32 zmm_reg "vmovaps");
660 // CHECK-LABEL: zmm_reg_i32x16:
662 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
664 check!(zmm_reg_i32x16 i32x16 zmm_reg "vmovaps");
666 // CHECK-LABEL: zmm_reg_i64x8:
668 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
670 check!(zmm_reg_i64x8 i64x8 zmm_reg "vmovaps");
672 // CHECK-LABEL: zmm_reg_f32x16:
674 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
676 check!(zmm_reg_f32x16 f32x16 zmm_reg "vmovaps");
678 // CHECK-LABEL: zmm_reg_f64x8:
680 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
682 check!(zmm_reg_f64x8 f64x8 zmm_reg "vmovaps");
684 // CHECK-LABEL: kreg_i8:
686 // CHECK: kmovb k{{[0-9]+}}, k{{[0-9]+}}
688 check!(kreg_i8 i8 kreg "kmovb");
690 // CHECK-LABEL: kreg_i16:
692 // CHECK: kmovw k{{[0-9]+}}, k{{[0-9]+}}
694 check!(kreg_i16 i16 kreg "kmovw");
696 // CHECK-LABEL: kreg_i32:
698 // CHECK: kmovd k{{[0-9]+}}, k{{[0-9]+}}
700 check!(kreg_i32 i32 kreg "kmovd");
702 // CHECK-LABEL: kreg_i64:
704 // CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}}
706 check!(kreg_i64 i64 kreg "kmovq");
708 // CHECK-LABEL: kreg_ptr:
710 // CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}}
712 check!(kreg_ptr ptr kreg "kmovq");
714 // CHECK-LABEL: eax_i16:
716 // CHECK: mov eax, eax
718 check_reg!(eax_i16 i16 "eax" "mov");
720 // CHECK-LABEL: eax_i32:
722 // CHECK: mov eax, eax
724 check_reg!(eax_i32 i32 "eax" "mov");
726 // CHECK-LABEL: eax_f32:
728 // CHECK: mov eax, eax
730 check_reg!(eax_f32 f32 "eax" "mov");
732 // x86_64-LABEL: eax_i64:
734 // x86_64: mov eax, eax
737 check_reg!(eax_i64 i64 "eax" "mov");
739 // x86_64-LABEL: eax_f64:
741 // x86_64: mov eax, eax
744 check_reg!(eax_f64 f64 "eax" "mov");
746 // CHECK-LABEL: eax_ptr:
748 // CHECK: mov eax, eax
750 check_reg!(eax_ptr ptr "eax" "mov");
752 // i686-LABEL: ah_byte:
757 check_reg!(ah_byte i8 "ah" "mov");
759 // CHECK-LABEL: xmm0_i32:
761 // CHECK: movaps xmm0, xmm0
763 check_reg!(xmm0_i32 i32 "xmm0" "movaps");
765 // CHECK-LABEL: xmm0_f32:
767 // CHECK: movaps xmm0, xmm0
769 check_reg!(xmm0_f32 f32 "xmm0" "movaps");
771 // CHECK-LABEL: xmm0_i64:
773 // CHECK: movaps xmm0, xmm0
775 check_reg!(xmm0_i64 i64 "xmm0" "movaps");
777 // CHECK-LABEL: xmm0_f64:
779 // CHECK: movaps xmm0, xmm0
781 check_reg!(xmm0_f64 f64 "xmm0" "movaps");
783 // CHECK-LABEL: xmm0_ptr:
785 // CHECK: movaps xmm0, xmm0
787 check_reg!(xmm0_ptr ptr "xmm0" "movaps");
789 // CHECK-LABEL: xmm0_i8x16:
791 // CHECK: movaps xmm0, xmm0
793 check_reg!(xmm0_i8x16 i8x16 "xmm0" "movaps");
795 // CHECK-LABEL: xmm0_i16x8:
797 // CHECK: movaps xmm0, xmm0
799 check_reg!(xmm0_i16x8 i16x8 "xmm0" "movaps");
801 // CHECK-LABEL: xmm0_i32x4:
803 // CHECK: movaps xmm0, xmm0
805 check_reg!(xmm0_i32x4 i32x4 "xmm0" "movaps");
807 // CHECK-LABEL: xmm0_i64x2:
809 // CHECK: movaps xmm0, xmm0
811 check_reg!(xmm0_i64x2 i64x2 "xmm0" "movaps");
813 // CHECK-LABEL: xmm0_f32x4:
815 // CHECK: movaps xmm0, xmm0
817 check_reg!(xmm0_f32x4 f32x4 "xmm0" "movaps");
819 // CHECK-LABEL: xmm0_f64x2:
821 // CHECK: movaps xmm0, xmm0
823 check_reg!(xmm0_f64x2 f64x2 "xmm0" "movaps");
825 // CHECK-LABEL: ymm0_i32:
827 // CHECK: vmovaps ymm0, ymm0
829 check_reg!(ymm0_i32 i32 "ymm0" "vmovaps");
831 // CHECK-LABEL: ymm0_f32:
833 // CHECK: vmovaps ymm0, ymm0
835 check_reg!(ymm0_f32 f32 "ymm0" "vmovaps");
837 // CHECK-LABEL: ymm0_i64:
839 // CHECK: vmovaps ymm0, ymm0
841 check_reg!(ymm0_i64 i64 "ymm0" "vmovaps");
843 // CHECK-LABEL: ymm0_f64:
845 // CHECK: vmovaps ymm0, ymm0
847 check_reg!(ymm0_f64 f64 "ymm0" "vmovaps");
849 // CHECK-LABEL: ymm0_ptr:
851 // CHECK: vmovaps ymm0, ymm0
853 check_reg!(ymm0_ptr ptr "ymm0" "vmovaps");
855 // CHECK-LABEL: ymm0_i8x16:
857 // CHECK: vmovaps ymm0, ymm0
859 check_reg!(ymm0_i8x16 i8x16 "ymm0" "vmovaps");
861 // CHECK-LABEL: ymm0_i16x8:
863 // CHECK: vmovaps ymm0, ymm0
865 check_reg!(ymm0_i16x8 i16x8 "ymm0" "vmovaps");
867 // CHECK-LABEL: ymm0_i32x4:
869 // CHECK: vmovaps ymm0, ymm0
871 check_reg!(ymm0_i32x4 i32x4 "ymm0" "vmovaps");
873 // CHECK-LABEL: ymm0_i64x2:
875 // CHECK: vmovaps ymm0, ymm0
877 check_reg!(ymm0_i64x2 i64x2 "ymm0" "vmovaps");
879 // CHECK-LABEL: ymm0_f32x4:
881 // CHECK: vmovaps ymm0, ymm0
883 check_reg!(ymm0_f32x4 f32x4 "ymm0" "vmovaps");
885 // CHECK-LABEL: ymm0_f64x2:
887 // CHECK: vmovaps ymm0, ymm0
889 check_reg!(ymm0_f64x2 f64x2 "ymm0" "vmovaps");
891 // CHECK-LABEL: ymm0_i8x32:
893 // CHECK: vmovaps ymm0, ymm0
895 check_reg!(ymm0_i8x32 i8x32 "ymm0" "vmovaps");
897 // CHECK-LABEL: ymm0_i16x16:
899 // CHECK: vmovaps ymm0, ymm0
901 check_reg!(ymm0_i16x16 i16x16 "ymm0" "vmovaps");
903 // CHECK-LABEL: ymm0_i32x8:
905 // CHECK: vmovaps ymm0, ymm0
907 check_reg!(ymm0_i32x8 i32x8 "ymm0" "vmovaps");
909 // CHECK-LABEL: ymm0_i64x4:
911 // CHECK: vmovaps ymm0, ymm0
913 check_reg!(ymm0_i64x4 i64x4 "ymm0" "vmovaps");
915 // CHECK-LABEL: ymm0_f32x8:
917 // CHECK: vmovaps ymm0, ymm0
919 check_reg!(ymm0_f32x8 f32x8 "ymm0" "vmovaps");
921 // CHECK-LABEL: ymm0_f64x4:
923 // CHECK: vmovaps ymm0, ymm0
925 check_reg!(ymm0_f64x4 f64x4 "ymm0" "vmovaps");
927 // CHECK-LABEL: zmm0_i32:
929 // CHECK: vmovaps zmm0, zmm0
931 check_reg!(zmm0_i32 i32 "zmm0" "vmovaps");
933 // CHECK-LABEL: zmm0_f32:
935 // CHECK: vmovaps zmm0, zmm0
937 check_reg!(zmm0_f32 f32 "zmm0" "vmovaps");
939 // CHECK-LABEL: zmm0_i64:
941 // CHECK: vmovaps zmm0, zmm0
943 check_reg!(zmm0_i64 i64 "zmm0" "vmovaps");
945 // CHECK-LABEL: zmm0_f64:
947 // CHECK: vmovaps zmm0, zmm0
949 check_reg!(zmm0_f64 f64 "zmm0" "vmovaps");
951 // CHECK-LABEL: zmm0_ptr:
953 // CHECK: vmovaps zmm0, zmm0
955 check_reg!(zmm0_ptr ptr "zmm0" "vmovaps");
957 // CHECK-LABEL: zmm0_i8x16:
959 // CHECK: vmovaps zmm0, zmm0
961 check_reg!(zmm0_i8x16 i8x16 "zmm0" "vmovaps");
963 // CHECK-LABEL: zmm0_i16x8:
965 // CHECK: vmovaps zmm0, zmm0
967 check_reg!(zmm0_i16x8 i16x8 "zmm0" "vmovaps");
969 // CHECK-LABEL: zmm0_i32x4:
971 // CHECK: vmovaps zmm0, zmm0
973 check_reg!(zmm0_i32x4 i32x4 "zmm0" "vmovaps");
975 // CHECK-LABEL: zmm0_i64x2:
977 // CHECK: vmovaps zmm0, zmm0
979 check_reg!(zmm0_i64x2 i64x2 "zmm0" "vmovaps");
981 // CHECK-LABEL: zmm0_f32x4:
983 // CHECK: vmovaps zmm0, zmm0
985 check_reg!(zmm0_f32x4 f32x4 "zmm0" "vmovaps");
987 // CHECK-LABEL: zmm0_f64x2:
989 // CHECK: vmovaps zmm0, zmm0
991 check_reg!(zmm0_f64x2 f64x2 "zmm0" "vmovaps");
993 // CHECK-LABEL: zmm0_i8x32:
995 // CHECK: vmovaps zmm0, zmm0
997 check_reg!(zmm0_i8x32 i8x32 "zmm0" "vmovaps");
999 // CHECK-LABEL: zmm0_i16x16:
1001 // CHECK: vmovaps zmm0, zmm0
1003 check_reg!(zmm0_i16x16 i16x16 "zmm0" "vmovaps");
1005 // CHECK-LABEL: zmm0_i32x8:
1007 // CHECK: vmovaps zmm0, zmm0
1009 check_reg!(zmm0_i32x8 i32x8 "zmm0" "vmovaps");
1011 // CHECK-LABEL: zmm0_i64x4:
1013 // CHECK: vmovaps zmm0, zmm0
1015 check_reg!(zmm0_i64x4 i64x4 "zmm0" "vmovaps");
1017 // CHECK-LABEL: zmm0_f32x8:
1019 // CHECK: vmovaps zmm0, zmm0
1021 check_reg!(zmm0_f32x8 f32x8 "zmm0" "vmovaps");
1023 // CHECK-LABEL: zmm0_f64x4:
1025 // CHECK: vmovaps zmm0, zmm0
1027 check_reg!(zmm0_f64x4 f64x4 "zmm0" "vmovaps");
1029 // CHECK-LABEL: zmm0_i8x64:
1031 // CHECK: vmovaps zmm0, zmm0
1033 check_reg!(zmm0_i8x64 i8x64 "zmm0" "vmovaps");
1035 // CHECK-LABEL: zmm0_i16x32:
1037 // CHECK: vmovaps zmm0, zmm0
1039 check_reg!(zmm0_i16x32 i16x32 "zmm0" "vmovaps");
1041 // CHECK-LABEL: zmm0_i32x16:
1043 // CHECK: vmovaps zmm0, zmm0
1045 check_reg!(zmm0_i32x16 i32x16 "zmm0" "vmovaps");
1047 // CHECK-LABEL: zmm0_i64x8:
1049 // CHECK: vmovaps zmm0, zmm0
1051 check_reg!(zmm0_i64x8 i64x8 "zmm0" "vmovaps");
1053 // CHECK-LABEL: zmm0_f32x16:
1055 // CHECK: vmovaps zmm0, zmm0
1057 check_reg!(zmm0_f32x16 f32x16 "zmm0" "vmovaps");
1059 // CHECK-LABEL: zmm0_f64x8:
1061 // CHECK: vmovaps zmm0, zmm0
1063 check_reg!(zmm0_f64x8 f64x8 "zmm0" "vmovaps");
1065 // CHECK-LABEL: k1_i8:
1067 // CHECK: kmovb k1, k1
1069 check_reg!(k1_i8 i8 "k1" "kmovb");
1071 // CHECK-LABEL: k1_i16:
1073 // CHECK: kmovw k1, k1
1075 check_reg!(k1_i16 i16 "k1" "kmovw");
1077 // CHECK-LABEL: k1_i32:
1079 // CHECK: kmovd k1, k1
1081 check_reg!(k1_i32 i32 "k1" "kmovd");
1083 // CHECK-LABEL: k1_i64:
1085 // CHECK: kmovq k1, k1
1087 check_reg!(k1_i64 i64 "k1" "kmovq");
1089 // CHECK-LABEL: k1_ptr:
1091 // CHECK: kmovq k1, k1
1093 check_reg!(k1_ptr ptr "k1" "kmovq");