Skip to content

Commit ad47bd1

Browse files
authored
support instructions : vabd vaba (#1053)
1 parent 258a6ae commit ad47bd1

File tree

4 files changed

+645
-0
lines changed

4 files changed

+645
-0
lines changed

crates/core_arch/src/aarch64/neon/generated.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,32 @@ use super::*;
99
#[cfg(test)]
1010
use stdarch_test::assert_instr;
1111

12+
/// Absolute difference between the arguments of Floating
13+
#[inline]
14+
#[target_feature(enable = "neon")]
15+
#[cfg_attr(test, assert_instr(fabd))]
16+
pub unsafe fn vabd_f64(a: float64x1_t, b: float64x1_t) -> float64x1_t {
17+
#[allow(improper_ctypes)]
18+
extern "C" {
19+
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.fabd.v1f64")]
20+
fn vabd_f64_(a: float64x1_t, a: float64x1_t) -> float64x1_t;
21+
}
22+
vabd_f64_(a, b)
23+
}
24+
25+
/// Absolute difference between the arguments of Floating
26+
#[inline]
27+
#[target_feature(enable = "neon")]
28+
#[cfg_attr(test, assert_instr(fabd))]
29+
pub unsafe fn vabdq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t {
30+
#[allow(improper_ctypes)]
31+
extern "C" {
32+
#[cfg_attr(target_arch = "aarch64", link_name = "llvm.aarch64.neon.fabd.v2f64")]
33+
fn vabdq_f64_(a: float64x2_t, a: float64x2_t) -> float64x2_t;
34+
}
35+
vabdq_f64_(a, b)
36+
}
37+
1238
/// Compare bitwise Equal (vector)
1339
#[inline]
1440
#[target_feature(enable = "neon")]
@@ -570,6 +596,24 @@ mod test {
570596
use std::mem::transmute;
571597
use stdarch_test::simd_test;
572598

599+
#[simd_test(enable = "neon")]
600+
unsafe fn test_vabd_f64() {
601+
let a: f64 = 1.0;
602+
let b: f64 = 9.0;
603+
let e: f64 = 8.0;
604+
let r: f64 = transmute(vabd_f64(transmute(a), transmute(b)));
605+
assert_eq!(r, e);
606+
}
607+
608+
#[simd_test(enable = "neon")]
609+
unsafe fn test_vabdq_f64() {
610+
let a: f64x2 = f64x2::new(1.0, 2.0);
611+
let b: f64x2 = f64x2::new(9.0, 3.0);
612+
let e: f64x2 = f64x2::new(8.0, 1.0);
613+
let r: f64x2 = transmute(vabdq_f64(transmute(a), transmute(b)));
614+
assert_eq!(r, e);
615+
}
616+
573617
#[simd_test(enable = "neon")]
574618
unsafe fn test_vceq_u64() {
575619
let a: u64x1 = u64x1::new(0);

0 commit comments

Comments
 (0)