//@ only-x86_64 // Set the base cpu explicitly, in case the default has been changed. //@ compile-flags: -C target-cpu=x86-64 #![feature(avx512_target_feature)] use std::arch::asm; #[target_feature(enable = "avx")] unsafe fn foo() { let mut x = 1; let y = 2; asm!("vaddps {2:y}, {0:y}, {1:y}", in(ymm_reg) x, in(ymm_reg) y, lateout(ymm_reg) x); assert_eq!(x, 3); } unsafe fn bar() { let mut x = 1; let y = 2; asm!("vaddps {2:y}, {0:y}, {1:y}", in(ymm_reg) x, in(ymm_reg) y, lateout(ymm_reg) x); //~^ ERROR: register class `ymm_reg` requires the `avx` target feature //~| ERROR: register class `ymm_reg` requires the `avx` target feature //~| ERROR: register class `ymm_reg` requires the `avx` target feature assert_eq!(x, 3); } #[target_feature(enable = "avx512bw")] unsafe fn baz() { let x = 1; asm!("/* {0} */", in(kreg) x); } unsafe fn baz2() { let x = 1; asm!("/* {0} */", in(kreg) x); //~^ ERROR: register class `kreg` requires at least one of the following target features: avx512bw, avx512f } fn main() { unsafe { foo(); bar(); } }