Auto merge of #76295 - mati865:remove-mmx, r=Amanieu,oli-obk
Remove MMX from Rust Follow-up to https://github.com/rust-lang/stdarch/pull/890 This removes most of MMX from Rust (tests pass with small changes), keeping stable `is_x86_feature_detected!("mmx")` working.
This commit is contained in:
commit
0f9f0b384a
@ -948,7 +948,6 @@ extern "C" {
|
||||
|
||||
// Operations on other types
|
||||
pub fn LLVMVoidTypeInContext(C: &Context) -> &Type;
|
||||
pub fn LLVMX86MMXTypeInContext(C: &Context) -> &Type;
|
||||
pub fn LLVMRustMetadataTypeInContext(C: &Context) -> &Type;
|
||||
|
||||
// Operations on all values
|
||||
|
@ -203,7 +203,6 @@ const X86_ALLOWED_FEATURES: &[(&str, Option<Symbol>)] = &[
|
||||
("fma", None),
|
||||
("fxsr", None),
|
||||
("lzcnt", None),
|
||||
("mmx", Some(sym::mmx_target_feature)),
|
||||
("movbe", Some(sym::movbe_target_feature)),
|
||||
("pclmulqdq", None),
|
||||
("popcnt", None),
|
||||
|
@ -62,10 +62,6 @@ impl CodegenCx<'ll, 'tcx> {
|
||||
unsafe { llvm::LLVMIntTypeInContext(self.llcx, num_bits as c_uint) }
|
||||
}
|
||||
|
||||
crate fn type_x86_mmx(&self) -> &'ll Type {
|
||||
unsafe { llvm::LLVMX86MMXTypeInContext(self.llcx) }
|
||||
}
|
||||
|
||||
crate fn type_vector(&self, ty: &'ll Type, len: u64) -> &'ll Type {
|
||||
unsafe { llvm::LLVMVectorType(ty, len as c_uint) }
|
||||
}
|
||||
|
@ -21,23 +21,8 @@ fn uncached_llvm_type<'a, 'tcx>(
|
||||
match layout.abi {
|
||||
Abi::Scalar(_) => bug!("handled elsewhere"),
|
||||
Abi::Vector { ref element, count } => {
|
||||
// LLVM has a separate type for 64-bit SIMD vectors on X86 called
|
||||
// `x86_mmx` which is needed for some SIMD operations. As a bit of a
|
||||
// hack (all SIMD definitions are super unstable anyway) we
|
||||
// recognize any one-element SIMD vector as "this should be an
|
||||
// x86_mmx" type. In general there shouldn't be a need for other
|
||||
// one-element SIMD vectors, so it's assumed this won't clash with
|
||||
// much else.
|
||||
let use_x86_mmx = count == 1
|
||||
&& layout.size.bits() == 64
|
||||
&& (cx.sess().target.target.arch == "x86"
|
||||
|| cx.sess().target.target.arch == "x86_64");
|
||||
if use_x86_mmx {
|
||||
return cx.type_x86_mmx();
|
||||
} else {
|
||||
let element = layout.scalar_llvm_type_at(cx, element, Size::ZERO);
|
||||
return cx.type_vector(element, count);
|
||||
}
|
||||
let element = layout.scalar_llvm_type_at(cx, element, Size::ZERO);
|
||||
return cx.type_vector(element, count);
|
||||
}
|
||||
Abi::ScalarPair(..) => {
|
||||
return cx.type_struct(
|
||||
|
@ -229,7 +229,6 @@ declare_features! (
|
||||
(active, powerpc_target_feature, "1.27.0", Some(44839), None),
|
||||
(active, mips_target_feature, "1.27.0", Some(44839), None),
|
||||
(active, avx512_target_feature, "1.27.0", Some(44839), None),
|
||||
(active, mmx_target_feature, "1.27.0", Some(44839), None),
|
||||
(active, sse4a_target_feature, "1.27.0", Some(44839), None),
|
||||
(active, tbm_target_feature, "1.27.0", Some(44839), None),
|
||||
(active, wasm_target_feature, "1.30.0", Some(44839), None),
|
||||
|
@ -679,7 +679,6 @@ symbols! {
|
||||
minnumf32,
|
||||
minnumf64,
|
||||
mips_target_feature,
|
||||
mmx_target_feature,
|
||||
module,
|
||||
module_path,
|
||||
more_struct_aliases,
|
||||
|
@ -2363,7 +2363,6 @@ fn from_target_feature(
|
||||
Some(sym::mips_target_feature) => rust_features.mips_target_feature,
|
||||
Some(sym::riscv_target_feature) => rust_features.riscv_target_feature,
|
||||
Some(sym::avx512_target_feature) => rust_features.avx512_target_feature,
|
||||
Some(sym::mmx_target_feature) => rust_features.mmx_target_feature,
|
||||
Some(sym::sse4a_target_feature) => rust_features.sse4a_target_feature,
|
||||
Some(sym::tbm_target_feature) => rust_features.tbm_target_feature,
|
||||
Some(sym::wasm_target_feature) => rust_features.wasm_target_feature,
|
||||
|
@ -126,7 +126,6 @@
|
||||
#![feature(unwind_attributes)]
|
||||
#![feature(variant_count)]
|
||||
#![cfg_attr(bootstrap, feature(doc_alias))]
|
||||
#![feature(mmx_target_feature)]
|
||||
#![feature(tbm_target_feature)]
|
||||
#![feature(sse4a_target_feature)]
|
||||
#![feature(arm_target_feature)]
|
||||
|
@ -1,27 +0,0 @@
|
||||
// ignore-arm
|
||||
// ignore-aarch64
|
||||
// ignore-emscripten
|
||||
// ignore-mips
|
||||
// ignore-mips64
|
||||
// ignore-powerpc
|
||||
// ignore-powerpc64
|
||||
// ignore-powerpc64le
|
||||
// ignore-riscv64
|
||||
// ignore-sparc
|
||||
// ignore-sparc64
|
||||
// ignore-s390x
|
||||
// compile-flags: -O
|
||||
|
||||
#![feature(repr_simd)]
|
||||
#![crate_type="lib"]
|
||||
|
||||
#[repr(simd)]
|
||||
#[derive(Clone, Copy)]
|
||||
pub struct i8x8(u64);
|
||||
|
||||
#[no_mangle]
|
||||
pub fn a(a: &mut i8x8, b: i8x8) -> i8x8 {
|
||||
// CHECK-LABEL: define void @a(x86_mmx*{{.*}}, x86_mmx*{{.*}}, x86_mmx*{{.*}})
|
||||
*a = b;
|
||||
return b
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
#![feature(mmx_target_feature)]
|
||||
#![feature(avx512_target_feature)]
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "mmx")]
|
||||
#[target_feature(enable = "avx512ifma")]
|
||||
pub unsafe fn foo() {}
|
||||
|
@ -19,7 +19,6 @@
|
||||
// gate-test-aarch64_target_feature
|
||||
// gate-test-hexagon_target_feature
|
||||
// gate-test-mips_target_feature
|
||||
// gate-test-mmx_target_feature
|
||||
// gate-test-wasm_target_feature
|
||||
// gate-test-adx_target_feature
|
||||
// gate-test-cmpxchg16b_target_feature
|
||||
@ -30,7 +29,6 @@
|
||||
|
||||
#[target_feature(enable = "avx512bw")]
|
||||
//~^ ERROR: currently unstable
|
||||
unsafe fn foo() {
|
||||
}
|
||||
unsafe fn foo() {}
|
||||
|
||||
fn main() {}
|
||||
|
@ -1,5 +1,5 @@
|
||||
error[E0658]: the target feature `avx512bw` is currently unstable
|
||||
--> $DIR/gate.rs:31:18
|
||||
--> $DIR/gate.rs:30:18
|
||||
|
|
||||
LL | #[target_feature(enable = "avx512bw")]
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
Loading…
Reference in New Issue
Block a user