@@ -298,46 +298,40 @@ pub fn vabsq_f64(a: float64x2_t) -> float64x2_t {
298
298
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
299
299
#[cfg_attr(test, assert_instr(abs))]
300
300
pub 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)
307
305
}
308
- unsafe { _vabs_s64(a) }
309
306
}
310
307
#[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 )"]
312
309
#[inline]
313
310
#[target_feature(enable = "neon")]
314
311
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
315
312
#[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)
323
318
}
324
- unsafe { _vabsd_s64(a) }
325
319
}
326
320
#[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 )"]
328
322
#[inline]
329
323
#[target_feature(enable = "neon")]
330
324
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
331
325
#[cfg_attr(test, assert_instr(abs))]
332
- pub fn vabsq_s64 (a: int64x2_t ) -> int64x2_t {
326
+ pub fn vabsd_s64 (a: i64 ) -> i64 {
333
327
unsafe extern "unadjusted" {
334
328
#[cfg_attr(
335
329
any(target_arch = "aarch64", target_arch = "arm64ec"),
336
- link_name = "llvm.aarch64.neon.abs.v2i64 "
330
+ link_name = "llvm.aarch64.neon.abs.i64 "
337
331
)]
338
- fn _vabsq_s64 (a: int64x2_t ) -> int64x2_t ;
332
+ fn _vabsd_s64 (a: i64 ) -> i64 ;
339
333
}
340
- unsafe { _vabsq_s64 (a) }
334
+ unsafe { _vabsd_s64 (a) }
341
335
}
342
336
#[doc = "Add"]
343
337
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddd_s64)"]
0 commit comments