//@ only-x86_64 //@ assembly-output: emit-asm //@ compile-flags: -C opt-level=3 -C target-feature=-avx2 //@ ignore-sgx Tests incompatible with LVI mitigations #![feature(effective_target_features)] use std::arch::x86_64::{__m256i, _mm256_add_epi32, _mm256_setzero_si256}; use std::ops::Add; #[derive(Clone, Copy)] struct AvxU32(__m256i); impl Add for AvxU32 { type Output = Self; #[no_mangle] #[inline(never)] #[unsafe(force_target_feature(enable = "avx2"))] fn add(self, oth: AvxU32) -> AvxU32 { // CHECK-LABEL: add: // CHECK-NOT: callq // CHECK: vpaddd // CHECK: retq Self(_mm256_add_epi32(self.0, oth.0)) } } fn main() { assert!(is_x86_feature_detected!("avx2")); let v = AvxU32(unsafe { _mm256_setzero_si256() }); v + v; }