rust/tests/assembly-llvm/force-target-feature.rs
Luca Versari 291da71b2a Add an experimental unsafe(force_target_feature) attribute.
This uses the feature gate for
https://github.com/rust-lang/rust/issues/143352, but is described in
https://github.com/rust-lang/rfcs/pull/3820 which is strongly tied to
the experiment.
2025-08-22 01:26:26 +02:00

34 lines
817 B
Rust

//@ 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<AvxU32> 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;
}