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
11 #![feature(no_core, lang_items, rustc_attrs, repr_simd)]
12 #![crate_type = "rlib"]
14 #![allow(asm_sub_register, non_camel_case_types)]
16 #[rustc_builtin_macro]
20 #[rustc_builtin_macro]
24 #[rustc_builtin_macro]
25 macro_rules! stringify {
37 pub struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8);
39 pub struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
41 pub struct i32x4(i32, i32, i32, i32);
43 pub struct i64x2(i64, i64);
45 pub struct f32x4(f32, f32, f32, f32);
47 pub struct f64x2(f64, f64);
85 pub struct i16x16(i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16);
87 pub struct i32x8(i32, i32, i32, i32, i32, i32, i32, i32);
89 pub struct i64x4(i64, i64, i64, i64);
91 pub struct f32x8(f32, f32, f32, f32, f32, f32, f32, f32);
93 pub struct f64x4(f64, f64, f64, f64);
198 pub struct i32x16(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32);
200 pub struct i64x8(i64, i64, i64, i64, i64, i64, i64, i64);
202 pub struct f32x16(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32);
204 pub struct f64x8(f64, f64, f64, f64, f64, f64, f64, f64);
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 {}
234 static extern_static: u8;
237 // CHECK-LABEL: sym_fn:
239 // CHECK: call extern_func
242 pub unsafe fn sym_fn() {
243 asm!("call {}", sym extern_func);
246 // CHECK-LABEL: sym_static:
248 // CHECK: mov al, byte ptr [extern_static]
251 pub unsafe fn sym_static() {
252 asm!("mov al, byte ptr [{}]", sym extern_static);
256 ($func:ident $ty:ident $class:ident $mov:literal) => {
258 pub unsafe fn $func(x: $ty) -> $ty {
259 // Hack to avoid function merging
261 fn dont_merge(s: &str);
263 dont_merge(stringify!($func));
266 asm!(concat!($mov, " {}, {}"), lateout($class) y, in($class) x);
272 macro_rules! check_reg {
273 ($func:ident $ty:ident $reg:tt $mov:literal) => {
275 pub unsafe fn $func(x: $ty) -> $ty {
276 // Hack to avoid function merging
278 fn dont_merge(s: &str);
280 dont_merge(stringify!($func));
283 asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x);
289 // CHECK-LABEL: reg_i16:
291 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
292 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
294 check!(reg_i16 i16 reg "mov");
296 // CHECK-LABEL: reg_i32:
298 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
299 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
301 check!(reg_i32 i32 reg "mov");
303 // CHECK-LABEL: reg_f32:
305 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
306 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
308 check!(reg_f32 f32 reg "mov");
310 // x86_64-LABEL: reg_i64:
312 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
315 check!(reg_i64 i64 reg "mov");
317 // x86_64-LABEL: reg_f64:
319 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
322 check!(reg_f64 f64 reg "mov");
324 // CHECK-LABEL: reg_ptr:
326 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
327 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
329 check!(reg_ptr ptr reg "mov");
331 // CHECK-LABEL: reg_abcd_i16:
333 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
334 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
336 check!(reg_abcd_i16 i16 reg_abcd "mov");
338 // CHECK-LABEL: reg_abcd_i32:
340 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
341 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
343 check!(reg_abcd_i32 i32 reg_abcd "mov");
345 // CHECK-LABEL: reg_abcd_f32:
347 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
348 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
350 check!(reg_abcd_f32 f32 reg_abcd "mov");
352 // x86_64-LABEL: reg_abcd_i64:
354 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
357 check!(reg_abcd_i64 i64 reg_abcd "mov");
359 // x86_64-LABEL: reg_abcd_f64:
361 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
364 check!(reg_abcd_f64 f64 reg_abcd "mov");
366 // CHECK-LABEL: reg_abcd_ptr:
368 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
369 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
371 check!(reg_abcd_ptr ptr reg_abcd "mov");
373 // CHECK-LABEL: reg_byte:
375 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
377 check!(reg_byte i8 reg_byte "mov");
379 // CHECK-LABEL: xmm_reg_i32:
381 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
383 check!(xmm_reg_i32 i32 xmm_reg "movaps");
385 // CHECK-LABEL: xmm_reg_f32:
387 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
389 check!(xmm_reg_f32 f32 xmm_reg "movaps");
391 // CHECK-LABEL: xmm_reg_i64:
393 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
395 check!(xmm_reg_i64 i64 xmm_reg "movaps");
397 // CHECK-LABEL: xmm_reg_f64:
399 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
401 check!(xmm_reg_f64 f64 xmm_reg "movaps");
403 // CHECK-LABEL: xmm_reg_ptr:
405 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
407 check!(xmm_reg_ptr ptr xmm_reg "movaps");
409 // CHECK-LABEL: xmm_reg_i8x16:
411 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
413 check!(xmm_reg_i8x16 i8x16 xmm_reg "movaps");
415 // CHECK-LABEL: xmm_reg_i16x8:
417 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
419 check!(xmm_reg_i16x8 i16x8 xmm_reg "movaps");
421 // CHECK-LABEL: xmm_reg_i32x4:
423 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
425 check!(xmm_reg_i32x4 i32x4 xmm_reg "movaps");
427 // CHECK-LABEL: xmm_reg_i64x2:
429 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
431 check!(xmm_reg_i64x2 i64x2 xmm_reg "movaps");
433 // CHECK-LABEL: xmm_reg_f32x4:
435 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
437 check!(xmm_reg_f32x4 f32x4 xmm_reg "movaps");
439 // CHECK-LABEL: xmm_reg_f64x2:
441 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
443 check!(xmm_reg_f64x2 f64x2 xmm_reg "movaps");
445 // CHECK-LABEL: ymm_reg_i32:
447 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
449 check!(ymm_reg_i32 i32 ymm_reg "vmovaps");
451 // CHECK-LABEL: ymm_reg_f32:
453 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
455 check!(ymm_reg_f32 f32 ymm_reg "vmovaps");
457 // CHECK-LABEL: ymm_reg_i64:
459 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
461 check!(ymm_reg_i64 i64 ymm_reg "vmovaps");
463 // CHECK-LABEL: ymm_reg_f64:
465 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
467 check!(ymm_reg_f64 f64 ymm_reg "vmovaps");
469 // CHECK-LABEL: ymm_reg_ptr:
471 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
473 check!(ymm_reg_ptr ptr ymm_reg "vmovaps");
475 // CHECK-LABEL: ymm_reg_i8x16:
477 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
479 check!(ymm_reg_i8x16 i8x16 ymm_reg "vmovaps");
481 // CHECK-LABEL: ymm_reg_i16x8:
483 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
485 check!(ymm_reg_i16x8 i16x8 ymm_reg "vmovaps");
487 // CHECK-LABEL: ymm_reg_i32x4:
489 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
491 check!(ymm_reg_i32x4 i32x4 ymm_reg "vmovaps");
493 // CHECK-LABEL: ymm_reg_i64x2:
495 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
497 check!(ymm_reg_i64x2 i64x2 ymm_reg "vmovaps");
499 // CHECK-LABEL: ymm_reg_f32x4:
501 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
503 check!(ymm_reg_f32x4 f32x4 ymm_reg "vmovaps");
505 // CHECK-LABEL: ymm_reg_f64x2:
507 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
509 check!(ymm_reg_f64x2 f64x2 ymm_reg "vmovaps");
511 // CHECK-LABEL: ymm_reg_i8x32:
513 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
515 check!(ymm_reg_i8x32 i8x32 ymm_reg "vmovaps");
517 // CHECK-LABEL: ymm_reg_i16x16:
519 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
521 check!(ymm_reg_i16x16 i16x16 ymm_reg "vmovaps");
523 // CHECK-LABEL: ymm_reg_i32x8:
525 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
527 check!(ymm_reg_i32x8 i32x8 ymm_reg "vmovaps");
529 // CHECK-LABEL: ymm_reg_i64x4:
531 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
533 check!(ymm_reg_i64x4 i64x4 ymm_reg "vmovaps");
535 // CHECK-LABEL: ymm_reg_f32x8:
537 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
539 check!(ymm_reg_f32x8 f32x8 ymm_reg "vmovaps");
541 // CHECK-LABEL: ymm_reg_f64x4:
543 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
545 check!(ymm_reg_f64x4 f64x4 ymm_reg "vmovaps");
547 // CHECK-LABEL: zmm_reg_i32:
549 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
551 check!(zmm_reg_i32 i32 zmm_reg "vmovaps");
553 // CHECK-LABEL: zmm_reg_f32:
555 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
557 check!(zmm_reg_f32 f32 zmm_reg "vmovaps");
559 // CHECK-LABEL: zmm_reg_i64:
561 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
563 check!(zmm_reg_i64 i64 zmm_reg "vmovaps");
565 // CHECK-LABEL: zmm_reg_f64:
567 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
569 check!(zmm_reg_f64 f64 zmm_reg "vmovaps");
571 // CHECK-LABEL: zmm_reg_ptr:
573 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
575 check!(zmm_reg_ptr ptr zmm_reg "vmovaps");
577 // CHECK-LABEL: zmm_reg_i8x16:
579 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
581 check!(zmm_reg_i8x16 i8x16 zmm_reg "vmovaps");
583 // CHECK-LABEL: zmm_reg_i16x8:
585 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
587 check!(zmm_reg_i16x8 i16x8 zmm_reg "vmovaps");
589 // CHECK-LABEL: zmm_reg_i32x4:
591 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
593 check!(zmm_reg_i32x4 i32x4 zmm_reg "vmovaps");
595 // CHECK-LABEL: zmm_reg_i64x2:
597 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
599 check!(zmm_reg_i64x2 i64x2 zmm_reg "vmovaps");
601 // CHECK-LABEL: zmm_reg_f32x4:
603 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
605 check!(zmm_reg_f32x4 f32x4 zmm_reg "vmovaps");
607 // CHECK-LABEL: zmm_reg_f64x2:
609 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
611 check!(zmm_reg_f64x2 f64x2 zmm_reg "vmovaps");
613 // CHECK-LABEL: zmm_reg_i8x32:
615 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
617 check!(zmm_reg_i8x32 i8x32 zmm_reg "vmovaps");
619 // CHECK-LABEL: zmm_reg_i16x16:
621 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
623 check!(zmm_reg_i16x16 i16x16 zmm_reg "vmovaps");
625 // CHECK-LABEL: zmm_reg_i32x8:
627 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
629 check!(zmm_reg_i32x8 i32x8 zmm_reg "vmovaps");
631 // CHECK-LABEL: zmm_reg_i64x4:
633 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
635 check!(zmm_reg_i64x4 i64x4 zmm_reg "vmovaps");
637 // CHECK-LABEL: zmm_reg_f32x8:
639 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
641 check!(zmm_reg_f32x8 f32x8 zmm_reg "vmovaps");
643 // CHECK-LABEL: zmm_reg_f64x4:
645 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
647 check!(zmm_reg_f64x4 f64x4 zmm_reg "vmovaps");
649 // CHECK-LABEL: zmm_reg_i8x64:
651 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
653 check!(zmm_reg_i8x64 i8x64 zmm_reg "vmovaps");
655 // CHECK-LABEL: zmm_reg_i16x32:
657 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
659 check!(zmm_reg_i16x32 i16x32 zmm_reg "vmovaps");
661 // CHECK-LABEL: zmm_reg_i32x16:
663 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
665 check!(zmm_reg_i32x16 i32x16 zmm_reg "vmovaps");
667 // CHECK-LABEL: zmm_reg_i64x8:
669 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
671 check!(zmm_reg_i64x8 i64x8 zmm_reg "vmovaps");
673 // CHECK-LABEL: zmm_reg_f32x16:
675 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
677 check!(zmm_reg_f32x16 f32x16 zmm_reg "vmovaps");
679 // CHECK-LABEL: zmm_reg_f64x8:
681 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
683 check!(zmm_reg_f64x8 f64x8 zmm_reg "vmovaps");
685 // CHECK-LABEL: kreg_i8:
687 // CHECK: kmovb k{{[0-9]+}}, k{{[0-9]+}}
689 check!(kreg_i8 i8 kreg "kmovb");
691 // CHECK-LABEL: kreg_i16:
693 // CHECK: kmovw k{{[0-9]+}}, k{{[0-9]+}}
695 check!(kreg_i16 i16 kreg "kmovw");
697 // CHECK-LABEL: kreg_i32:
699 // CHECK: kmovd k{{[0-9]+}}, k{{[0-9]+}}
701 check!(kreg_i32 i32 kreg "kmovd");
703 // CHECK-LABEL: kreg_i64:
705 // CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}}
707 check!(kreg_i64 i64 kreg "kmovq");
709 // CHECK-LABEL: kreg_ptr:
711 // CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}}
713 check!(kreg_ptr ptr kreg "kmovq");
715 // CHECK-LABEL: eax_i16:
717 // CHECK: mov eax, eax
719 check_reg!(eax_i16 i16 "eax" "mov");
721 // CHECK-LABEL: eax_i32:
723 // CHECK: mov eax, eax
725 check_reg!(eax_i32 i32 "eax" "mov");
727 // CHECK-LABEL: eax_f32:
729 // CHECK: mov eax, eax
731 check_reg!(eax_f32 f32 "eax" "mov");
733 // x86_64-LABEL: eax_i64:
735 // x86_64: mov eax, eax
738 check_reg!(eax_i64 i64 "eax" "mov");
740 // x86_64-LABEL: eax_f64:
742 // x86_64: mov eax, eax
745 check_reg!(eax_f64 f64 "eax" "mov");
747 // CHECK-LABEL: eax_ptr:
749 // CHECK: mov eax, eax
751 check_reg!(eax_ptr ptr "eax" "mov");
753 // i686-LABEL: ah_byte:
758 check_reg!(ah_byte i8 "ah" "mov");
760 // CHECK-LABEL: xmm0_i32:
762 // CHECK: movaps xmm0, xmm0
764 check_reg!(xmm0_i32 i32 "xmm0" "movaps");
766 // CHECK-LABEL: xmm0_f32:
768 // CHECK: movaps xmm0, xmm0
770 check_reg!(xmm0_f32 f32 "xmm0" "movaps");
772 // CHECK-LABEL: xmm0_i64:
774 // CHECK: movaps xmm0, xmm0
776 check_reg!(xmm0_i64 i64 "xmm0" "movaps");
778 // CHECK-LABEL: xmm0_f64:
780 // CHECK: movaps xmm0, xmm0
782 check_reg!(xmm0_f64 f64 "xmm0" "movaps");
784 // CHECK-LABEL: xmm0_ptr:
786 // CHECK: movaps xmm0, xmm0
788 check_reg!(xmm0_ptr ptr "xmm0" "movaps");
790 // CHECK-LABEL: xmm0_i8x16:
792 // CHECK: movaps xmm0, xmm0
794 check_reg!(xmm0_i8x16 i8x16 "xmm0" "movaps");
796 // CHECK-LABEL: xmm0_i16x8:
798 // CHECK: movaps xmm0, xmm0
800 check_reg!(xmm0_i16x8 i16x8 "xmm0" "movaps");
802 // CHECK-LABEL: xmm0_i32x4:
804 // CHECK: movaps xmm0, xmm0
806 check_reg!(xmm0_i32x4 i32x4 "xmm0" "movaps");
808 // CHECK-LABEL: xmm0_i64x2:
810 // CHECK: movaps xmm0, xmm0
812 check_reg!(xmm0_i64x2 i64x2 "xmm0" "movaps");
814 // CHECK-LABEL: xmm0_f32x4:
816 // CHECK: movaps xmm0, xmm0
818 check_reg!(xmm0_f32x4 f32x4 "xmm0" "movaps");
820 // CHECK-LABEL: xmm0_f64x2:
822 // CHECK: movaps xmm0, xmm0
824 check_reg!(xmm0_f64x2 f64x2 "xmm0" "movaps");
826 // CHECK-LABEL: ymm0_i32:
828 // CHECK: vmovaps ymm0, ymm0
830 check_reg!(ymm0_i32 i32 "ymm0" "vmovaps");
832 // CHECK-LABEL: ymm0_f32:
834 // CHECK: vmovaps ymm0, ymm0
836 check_reg!(ymm0_f32 f32 "ymm0" "vmovaps");
838 // CHECK-LABEL: ymm0_i64:
840 // CHECK: vmovaps ymm0, ymm0
842 check_reg!(ymm0_i64 i64 "ymm0" "vmovaps");
844 // CHECK-LABEL: ymm0_f64:
846 // CHECK: vmovaps ymm0, ymm0
848 check_reg!(ymm0_f64 f64 "ymm0" "vmovaps");
850 // CHECK-LABEL: ymm0_ptr:
852 // CHECK: vmovaps ymm0, ymm0
854 check_reg!(ymm0_ptr ptr "ymm0" "vmovaps");
856 // CHECK-LABEL: ymm0_i8x16:
858 // CHECK: vmovaps ymm0, ymm0
860 check_reg!(ymm0_i8x16 i8x16 "ymm0" "vmovaps");
862 // CHECK-LABEL: ymm0_i16x8:
864 // CHECK: vmovaps ymm0, ymm0
866 check_reg!(ymm0_i16x8 i16x8 "ymm0" "vmovaps");
868 // CHECK-LABEL: ymm0_i32x4:
870 // CHECK: vmovaps ymm0, ymm0
872 check_reg!(ymm0_i32x4 i32x4 "ymm0" "vmovaps");
874 // CHECK-LABEL: ymm0_i64x2:
876 // CHECK: vmovaps ymm0, ymm0
878 check_reg!(ymm0_i64x2 i64x2 "ymm0" "vmovaps");
880 // CHECK-LABEL: ymm0_f32x4:
882 // CHECK: vmovaps ymm0, ymm0
884 check_reg!(ymm0_f32x4 f32x4 "ymm0" "vmovaps");
886 // CHECK-LABEL: ymm0_f64x2:
888 // CHECK: vmovaps ymm0, ymm0
890 check_reg!(ymm0_f64x2 f64x2 "ymm0" "vmovaps");
892 // CHECK-LABEL: ymm0_i8x32:
894 // CHECK: vmovaps ymm0, ymm0
896 check_reg!(ymm0_i8x32 i8x32 "ymm0" "vmovaps");
898 // CHECK-LABEL: ymm0_i16x16:
900 // CHECK: vmovaps ymm0, ymm0
902 check_reg!(ymm0_i16x16 i16x16 "ymm0" "vmovaps");
904 // CHECK-LABEL: ymm0_i32x8:
906 // CHECK: vmovaps ymm0, ymm0
908 check_reg!(ymm0_i32x8 i32x8 "ymm0" "vmovaps");
910 // CHECK-LABEL: ymm0_i64x4:
912 // CHECK: vmovaps ymm0, ymm0
914 check_reg!(ymm0_i64x4 i64x4 "ymm0" "vmovaps");
916 // CHECK-LABEL: ymm0_f32x8:
918 // CHECK: vmovaps ymm0, ymm0
920 check_reg!(ymm0_f32x8 f32x8 "ymm0" "vmovaps");
922 // CHECK-LABEL: ymm0_f64x4:
924 // CHECK: vmovaps ymm0, ymm0
926 check_reg!(ymm0_f64x4 f64x4 "ymm0" "vmovaps");
928 // CHECK-LABEL: zmm0_i32:
930 // CHECK: vmovaps zmm0, zmm0
932 check_reg!(zmm0_i32 i32 "zmm0" "vmovaps");
934 // CHECK-LABEL: zmm0_f32:
936 // CHECK: vmovaps zmm0, zmm0
938 check_reg!(zmm0_f32 f32 "zmm0" "vmovaps");
940 // CHECK-LABEL: zmm0_i64:
942 // CHECK: vmovaps zmm0, zmm0
944 check_reg!(zmm0_i64 i64 "zmm0" "vmovaps");
946 // CHECK-LABEL: zmm0_f64:
948 // CHECK: vmovaps zmm0, zmm0
950 check_reg!(zmm0_f64 f64 "zmm0" "vmovaps");
952 // CHECK-LABEL: zmm0_ptr:
954 // CHECK: vmovaps zmm0, zmm0
956 check_reg!(zmm0_ptr ptr "zmm0" "vmovaps");
958 // CHECK-LABEL: zmm0_i8x16:
960 // CHECK: vmovaps zmm0, zmm0
962 check_reg!(zmm0_i8x16 i8x16 "zmm0" "vmovaps");
964 // CHECK-LABEL: zmm0_i16x8:
966 // CHECK: vmovaps zmm0, zmm0
968 check_reg!(zmm0_i16x8 i16x8 "zmm0" "vmovaps");
970 // CHECK-LABEL: zmm0_i32x4:
972 // CHECK: vmovaps zmm0, zmm0
974 check_reg!(zmm0_i32x4 i32x4 "zmm0" "vmovaps");
976 // CHECK-LABEL: zmm0_i64x2:
978 // CHECK: vmovaps zmm0, zmm0
980 check_reg!(zmm0_i64x2 i64x2 "zmm0" "vmovaps");
982 // CHECK-LABEL: zmm0_f32x4:
984 // CHECK: vmovaps zmm0, zmm0
986 check_reg!(zmm0_f32x4 f32x4 "zmm0" "vmovaps");
988 // CHECK-LABEL: zmm0_f64x2:
990 // CHECK: vmovaps zmm0, zmm0
992 check_reg!(zmm0_f64x2 f64x2 "zmm0" "vmovaps");
994 // CHECK-LABEL: zmm0_i8x32:
996 // CHECK: vmovaps zmm0, zmm0
998 check_reg!(zmm0_i8x32 i8x32 "zmm0" "vmovaps");
1000 // CHECK-LABEL: zmm0_i16x16:
1002 // CHECK: vmovaps zmm0, zmm0
1004 check_reg!(zmm0_i16x16 i16x16 "zmm0" "vmovaps");
1006 // CHECK-LABEL: zmm0_i32x8:
1008 // CHECK: vmovaps zmm0, zmm0
1010 check_reg!(zmm0_i32x8 i32x8 "zmm0" "vmovaps");
1012 // CHECK-LABEL: zmm0_i64x4:
1014 // CHECK: vmovaps zmm0, zmm0
1016 check_reg!(zmm0_i64x4 i64x4 "zmm0" "vmovaps");
1018 // CHECK-LABEL: zmm0_f32x8:
1020 // CHECK: vmovaps zmm0, zmm0
1022 check_reg!(zmm0_f32x8 f32x8 "zmm0" "vmovaps");
1024 // CHECK-LABEL: zmm0_f64x4:
1026 // CHECK: vmovaps zmm0, zmm0
1028 check_reg!(zmm0_f64x4 f64x4 "zmm0" "vmovaps");
1030 // CHECK-LABEL: zmm0_i8x64:
1032 // CHECK: vmovaps zmm0, zmm0
1034 check_reg!(zmm0_i8x64 i8x64 "zmm0" "vmovaps");
1036 // CHECK-LABEL: zmm0_i16x32:
1038 // CHECK: vmovaps zmm0, zmm0
1040 check_reg!(zmm0_i16x32 i16x32 "zmm0" "vmovaps");
1042 // CHECK-LABEL: zmm0_i32x16:
1044 // CHECK: vmovaps zmm0, zmm0
1046 check_reg!(zmm0_i32x16 i32x16 "zmm0" "vmovaps");
1048 // CHECK-LABEL: zmm0_i64x8:
1050 // CHECK: vmovaps zmm0, zmm0
1052 check_reg!(zmm0_i64x8 i64x8 "zmm0" "vmovaps");
1054 // CHECK-LABEL: zmm0_f32x16:
1056 // CHECK: vmovaps zmm0, zmm0
1058 check_reg!(zmm0_f32x16 f32x16 "zmm0" "vmovaps");
1060 // CHECK-LABEL: zmm0_f64x8:
1062 // CHECK: vmovaps zmm0, zmm0
1064 check_reg!(zmm0_f64x8 f64x8 "zmm0" "vmovaps");
1066 // CHECK-LABEL: k1_i8:
1068 // CHECK: kmovb k1, k1
1070 check_reg!(k1_i8 i8 "k1" "kmovb");
1072 // CHECK-LABEL: k1_i16:
1074 // CHECK: kmovw k1, k1
1076 check_reg!(k1_i16 i16 "k1" "kmovw");
1078 // CHECK-LABEL: k1_i32:
1080 // CHECK: kmovd k1, k1
1082 check_reg!(k1_i32 i32 "k1" "kmovd");
1084 // CHECK-LABEL: k1_i64:
1086 // CHECK: kmovq k1, k1
1088 check_reg!(k1_i64 i64 "k1" "kmovq");
1090 // CHECK-LABEL: k1_ptr:
1092 // CHECK: kmovq k1, k1
1094 check_reg!(k1_ptr ptr "k1" "kmovq");