From 53d56091c61ce603690ccacfec357657879a148e Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Sat, 20 Aug 2022 19:56:16 +0100 Subject: [PATCH] Use `llvm.ppc.altivec.lvx` intrinsic for `vec_ld` The `vec_ld` intrinsic is expected to automatically round the given address down to a 16-byte boundary. --- library/stdarch/crates/core_arch/src/powerpc/altivec.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/library/stdarch/crates/core_arch/src/powerpc/altivec.rs b/library/stdarch/crates/core_arch/src/powerpc/altivec.rs index 8b2be39dc7a5..70344c88be32 100644 --- a/library/stdarch/crates/core_arch/src/powerpc/altivec.rs +++ b/library/stdarch/crates/core_arch/src/powerpc/altivec.rs @@ -51,6 +51,8 @@ types! { #[allow(improper_ctypes)] extern "C" { + #[link_name = "llvm.ppc.altivec.lvx"] + fn lvx(p: *const i8) -> vector_unsigned_int; #[link_name = "llvm.ppc.altivec.vperm"] fn vperm( a: vector_signed_int, @@ -442,8 +444,7 @@ mod sealed { #[inline(always)] unsafe fn load(off: i32, p: *const i8) -> u32x4 { let addr = p.offset(off as isize); - - *(addr as *const u32x4) + transmute(lvx(addr)) } pub trait VectorLd {