From 72382d247a008c4e51c2ce1e08b7c2a4ebd5e925 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 28 Aug 2015 16:38:25 -0700 Subject: [PATCH] Avoid eagerly stripping the common platform prefix. This works better with the code generation approach. --- src/librustc_platform_intrinsics/aarch64.rs | 2 +- src/librustc_platform_intrinsics/arm.rs | 4 ++-- src/librustc_platform_intrinsics/lib.rs | 6 +++--- src/librustc_platform_intrinsics/x86.rs | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/librustc_platform_intrinsics/aarch64.rs b/src/librustc_platform_intrinsics/aarch64.rs index 4f311a47807e..259b21704df7 100644 --- a/src/librustc_platform_intrinsics/aarch64.rs +++ b/src/librustc_platform_intrinsics/aarch64.rs @@ -17,7 +17,7 @@ macro_rules! p { } } pub fn find<'tcx>(_tcx: &ty::ctxt<'tcx>, name: &str) -> Option { - Some(match name { + Some(match name["aarch64_".len()..] { "vmaxvq_u8" => p!("umaxv.i8.v16i8", (i8x16) -> i8), "vmaxvq_u16" => p!("umaxv.i16.v8i16", (i16x8) -> i16), "vmaxvq_u32" => p!("umaxv.i32.v4i32", (i32x4) -> i32), diff --git a/src/librustc_platform_intrinsics/arm.rs b/src/librustc_platform_intrinsics/arm.rs index f29f7e384b4f..b8a02773ec05 100644 --- a/src/librustc_platform_intrinsics/arm.rs +++ b/src/librustc_platform_intrinsics/arm.rs @@ -17,8 +17,8 @@ macro_rules! p { } } pub fn find<'tcx>(_tcx: &ty::ctxt<'tcx>, name: &str) -> Option { - if !name.starts_with("v") { return None } - Some(match &name["v".len()..] { + if !name.starts_with("arm_v") { return None } + Some(match &name["arm_v".len()..] { "sqrtq_f32" => plain!("llvm.sqrt.v4f32", (f32x4) -> f32x4), "sqrtq_f64" => plain!("llvm.sqrt.v2f64", (f64x2) -> f64x2), diff --git a/src/librustc_platform_intrinsics/lib.rs b/src/librustc_platform_intrinsics/lib.rs index 88ad2dce55cd..5eb09aeb0dc4 100755 --- a/src/librustc_platform_intrinsics/lib.rs +++ b/src/librustc_platform_intrinsics/lib.rs @@ -96,11 +96,11 @@ mod aarch64; impl Intrinsic { pub fn find<'tcx>(tcx: &ty::ctxt<'tcx>, name: &str) -> Option { if name.starts_with("x86_") { - x86::find(tcx, &name["x86_".len()..]) + x86::find(tcx, name) } else if name.starts_with("arm_") { - arm::find(tcx, &name["arm_".len()..]) + arm::find(tcx, name) } else if name.starts_with("aarch64_") { - aarch64::find(tcx, &name["aarch64_".len()..]) + aarch64::find(tcx, name) } else { None } diff --git a/src/librustc_platform_intrinsics/x86.rs b/src/librustc_platform_intrinsics/x86.rs index cab7ab2fecb8..ad5fcff8f584 100644 --- a/src/librustc_platform_intrinsics/x86.rs +++ b/src/librustc_platform_intrinsics/x86.rs @@ -18,8 +18,8 @@ macro_rules! p { } pub fn find<'tcx>(_tcx: &ty::ctxt<'tcx>, name: &str) -> Option { - if name.starts_with("mm_") { - Some(match &name["mm_".len()..] { + if name.starts_with("x86_mm_") { + Some(match &name["x86_mm_".len()..] { "sqrt_ps" => plain!("llvm.sqrt.v4f32", (f32x4) -> f32x4), "sqrt_pd" => plain!("llvm.sqrt.v2f64", (f64x2) -> f64x2), @@ -105,8 +105,8 @@ pub fn find<'tcx>(_tcx: &ty::ctxt<'tcx>, name: &str) -> Option { _ => return None }) - } else if name.starts_with("mm256_") { - Some(match &name["mm256_".len()..] { + } else if name.starts_with("x86_mm256_") { + Some(match &name["x86_mm256_".len()..] { "addsub_pd" => p!("avx.addsub.pd.256", (f64x4, f64x4) -> f64x4), "addsub_ps" => p!("avx.addsub.ps.256", (f32x8, f32x8) -> f32x8), "hadd_pd" => p!("avx.hadd.pd.256", (f64x4, f64x4) -> f64x4),