@@ -298,46 +298,40 @@ pub fn vabsq_f64(a: float64x2_t) -> float64x2_t {
298298#[stable(feature = "neon_intrinsics", since = "1.59.0")]
299299#[cfg_attr(test, assert_instr(abs))]
300300pub fn vabs_s64(a: int64x1_t) -> int64x1_t {
301- unsafe extern "unadjusted" {
302- #[cfg_attr(
303- any(target_arch = "aarch64", target_arch = "arm64ec"),
304- link_name = "llvm.aarch64.neon.abs.v1i64"
305- )]
306- fn _vabs_s64(a: int64x1_t) -> int64x1_t;
301+ unsafe {
302+ let neg: int64x1_t = simd_neg(a);
303+ let mask: int64x1_t = simd_ge(a, neg);
304+ simd_select(mask, a, neg)
307305 }
308- unsafe { _vabs_s64(a) }
309306}
310307#[doc = "Absolute Value (wrapping)."]
311- #[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabsd_s64 )"]
308+ #[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabsq_s64 )"]
312309#[inline]
313310#[target_feature(enable = "neon")]
314311#[stable(feature = "neon_intrinsics", since = "1.59.0")]
315312#[cfg_attr(test, assert_instr(abs))]
316- pub fn vabsd_s64(a: i64) -> i64 {
317- unsafe extern "unadjusted" {
318- #[cfg_attr(
319- any(target_arch = "aarch64", target_arch = "arm64ec"),
320- link_name = "llvm.aarch64.neon.abs.i64"
321- )]
322- fn _vabsd_s64(a: i64) -> i64;
313+ pub fn vabsq_s64(a: int64x2_t) -> int64x2_t {
314+ unsafe {
315+ let neg: int64x2_t = simd_neg(a);
316+ let mask: int64x2_t = simd_ge(a, neg);
317+ simd_select(mask, a, neg)
323318 }
324- unsafe { _vabsd_s64(a) }
325319}
326320#[doc = "Absolute Value (wrapping)."]
327- #[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabsq_s64 )"]
321+ #[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vabsd_s64 )"]
328322#[inline]
329323#[target_feature(enable = "neon")]
330324#[stable(feature = "neon_intrinsics", since = "1.59.0")]
331325#[cfg_attr(test, assert_instr(abs))]
332- pub fn vabsq_s64 (a: int64x2_t ) -> int64x2_t {
326+ pub fn vabsd_s64 (a: i64 ) -> i64 {
333327 unsafe extern "unadjusted" {
334328 #[cfg_attr(
335329 any(target_arch = "aarch64", target_arch = "arm64ec"),
336- link_name = "llvm.aarch64.neon.abs.v2i64 "
330+ link_name = "llvm.aarch64.neon.abs.i64 "
337331 )]
338- fn _vabsq_s64 (a: int64x2_t ) -> int64x2_t ;
332+ fn _vabsd_s64 (a: i64 ) -> i64 ;
339333 }
340- unsafe { _vabsq_s64 (a) }
334+ unsafe { _vabsd_s64 (a) }
341335}
342336#[doc = "Add"]
343337#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddd_s64)"]
0 commit comments