aarch64: use simd_fmin and simd_fmax

This commit is contained in:
Folkert de Vries
2025-07-12 16:45:51 +02:00
parent ca70466fa3
commit 441824cfca
2 changed files with 6 additions and 43 deletions

View File

@@ -13229,14 +13229,7 @@ pub fn vmaxh_f16(a: f16, b: f16) -> f16 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")] #[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(fmaxnm))] #[cfg_attr(test, assert_instr(fmaxnm))]
pub fn vmaxnm_f64(a: float64x1_t, b: float64x1_t) -> float64x1_t { pub fn vmaxnm_f64(a: float64x1_t, b: float64x1_t) -> float64x1_t {
unsafe extern "unadjusted" { unsafe { simd_fmax(a, b) }
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fmaxnm.v1f64"
)]
fn _vmaxnm_f64(a: float64x1_t, b: float64x1_t) -> float64x1_t;
}
unsafe { _vmaxnm_f64(a, b) }
} }
#[doc = "Floating-point Maximum Number (vector)"] #[doc = "Floating-point Maximum Number (vector)"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vmaxnmq_f64)"] #[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vmaxnmq_f64)"]
@@ -13245,14 +13238,7 @@ pub fn vmaxnm_f64(a: float64x1_t, b: float64x1_t) -> float64x1_t {
#[stable(feature = "neon_intrinsics", since = "1.59.0")] #[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(fmaxnm))] #[cfg_attr(test, assert_instr(fmaxnm))]
pub fn vmaxnmq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t { pub fn vmaxnmq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t {
unsafe extern "unadjusted" { unsafe { simd_fmax(a, b) }
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fmaxnm.v2f64"
)]
fn _vmaxnmq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t;
}
unsafe { _vmaxnmq_f64(a, b) }
} }
#[doc = "Floating-point Maximum Number"] #[doc = "Floating-point Maximum Number"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vmaxnmh_f16)"] #[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vmaxnmh_f16)"]
@@ -13670,14 +13656,7 @@ pub fn vminh_f16(a: f16, b: f16) -> f16 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")] #[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(fminnm))] #[cfg_attr(test, assert_instr(fminnm))]
pub fn vminnm_f64(a: float64x1_t, b: float64x1_t) -> float64x1_t { pub fn vminnm_f64(a: float64x1_t, b: float64x1_t) -> float64x1_t {
unsafe extern "unadjusted" { unsafe { simd_fmin(a, b) }
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fminnm.v1f64"
)]
fn _vminnm_f64(a: float64x1_t, b: float64x1_t) -> float64x1_t;
}
unsafe { _vminnm_f64(a, b) }
} }
#[doc = "Floating-point Minimum Number (vector)"] #[doc = "Floating-point Minimum Number (vector)"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vminnmq_f64)"] #[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vminnmq_f64)"]
@@ -13686,14 +13665,7 @@ pub fn vminnm_f64(a: float64x1_t, b: float64x1_t) -> float64x1_t {
#[stable(feature = "neon_intrinsics", since = "1.59.0")] #[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(fminnm))] #[cfg_attr(test, assert_instr(fminnm))]
pub fn vminnmq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t { pub fn vminnmq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t {
unsafe extern "unadjusted" { unsafe { simd_fmin(a, b) }
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fminnm.v2f64"
)]
fn _vminnmq_f64(a: float64x2_t, b: float64x2_t) -> float64x2_t;
}
unsafe { _vminnmq_f64(a, b) }
} }
#[doc = "Floating-point Minimum Number"] #[doc = "Floating-point Minimum Number"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vminnmh_f16)"] #[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vminnmh_f16)"]

View File

@@ -6580,7 +6580,6 @@ intrinsics:
arch: aarch64,arm64ec arch: aarch64,arm64ec
- name: "vmaxnm{neon_type.no}" - name: "vmaxnm{neon_type.no}"
doc: Floating-point Maximum Number (vector) doc: Floating-point Maximum Number (vector)
arguments: ["a: {neon_type}", "b: {neon_type}"] arguments: ["a: {neon_type}", "b: {neon_type}"]
@@ -6592,11 +6591,7 @@ intrinsics:
- float64x1_t - float64x1_t
- float64x2_t - float64x2_t
compose: compose:
- LLVMLink: - FnCall: [simd_fmax, [a, b]]
name: "fmaxnm.{neon_type}"
links:
- link: "llvm.aarch64.neon.fmaxnm.{neon_type}"
arch: aarch64,arm64ec
- name: "vmaxnmh_{type}" - name: "vmaxnmh_{type}"
@@ -6806,11 +6801,7 @@ intrinsics:
- float64x1_t - float64x1_t
- float64x2_t - float64x2_t
compose: compose:
- LLVMLink: - FnCall: [simd_fmin, [a, b]]
name: "fminnm.{neon_type}"
links:
- link: "llvm.aarch64.neon.fminnm.{neon_type}"
arch: aarch64,arm64ec
- name: "vminnmv{neon_type[0].no}" - name: "vminnmv{neon_type[0].no}"
doc: "Floating-point minimum number across vector" doc: "Floating-point minimum number across vector"