2 // compile-flags: -C target-feature=+avx512f
6 use std::arch::{asm, global_asm};
8 use std::arch::x86_64::{_mm256_setzero_ps, _mm_setzero_ps};
12 // Types must be listed in the register class.
14 asm!("{}", in(reg) 0i128);
15 //~^ ERROR type `i128` cannot be used with this register class
16 asm!("{}", in(reg) _mm_setzero_ps());
17 //~^ ERROR type `__m128` cannot be used with this register class
18 asm!("{}", in(reg) _mm256_setzero_ps());
19 //~^ ERROR type `__m256` cannot be used with this register class
20 asm!("{}", in(xmm_reg) 0u8);
21 //~^ ERROR type `u8` cannot be used with this register class
22 asm!("{:e}", in(reg) 0i32);
23 asm!("{}", in(xmm_reg) 0i32);
24 asm!("{:e}", in(reg) 0f32);
25 asm!("{}", in(xmm_reg) 0f32);
26 asm!("{}", in(xmm_reg) _mm_setzero_ps());
27 asm!("{:x}", in(ymm_reg) _mm_setzero_ps());
28 asm!("{}", in(kreg) 0u16);
29 asm!("{}", in(kreg) 0u64);
30 //~^ ERROR `avx512bw` target feature is not enabled
32 // Template modifier suggestions for sub-registers
34 asm!("{0} {0}", in(reg) 0i16);
35 //~^ WARN formatting may not be suitable for sub-register argument
36 asm!("{0} {0:x}", in(reg) 0i16);
37 //~^ WARN formatting may not be suitable for sub-register argument
38 asm!("{}", in(reg) 0i32);
39 //~^ WARN formatting may not be suitable for sub-register argument
40 asm!("{}", in(reg) 0i64);
41 asm!("{}", in(ymm_reg) 0i64);
42 //~^ WARN formatting may not be suitable for sub-register argument
43 asm!("{}", in(ymm_reg) _mm256_setzero_ps());
44 asm!("{:l}", in(reg) 0i16);
45 asm!("{:l}", in(reg) 0i32);
46 asm!("{:l}", in(reg) 0i64);
47 asm!("{:x}", in(ymm_reg) 0i64);
48 asm!("{:x}", in(ymm_reg) _mm256_setzero_ps());
50 // Suggest different register class for type
52 asm!("{}", in(reg) 0i8);
53 //~^ ERROR type `i8` cannot be used with this register class
54 asm!("{}", in(reg_byte) 0i8);
56 // Split inout operands must have compatible types
62 let mut val_ptr: *mut u8;
63 asm!("{:r}", inout(reg) 0u16 => val_i16);
64 asm!("{:r}", inout(reg) 0u32 => val_f32);
65 //~^ ERROR incompatible types for asm inout argument
66 asm!("{:r}", inout(reg) 0u32 => val_ptr);
67 //~^ ERROR incompatible types for asm inout argument
68 asm!("{:r}", inout(reg) main => val_u32);
69 //~^ ERROR incompatible types for asm inout argument
70 asm!("{:r}", inout(reg) 0u64 => val_ptr);
71 asm!("{:r}", inout(reg) main => val_u64);