aarch64: use simd_reduce_min and simd_reduce_max for floats

This commit is contained in:
Folkert de Vries 2025-07-12 17:22:46 +02:00
parent 72afae5fd6
commit 750ddfd8d3
No known key found for this signature in database
GPG Key ID: 1F17F6FFD112B97C
2 changed files with 16 additions and 110 deletions

View File

@ -13256,14 +13256,7 @@ pub fn vmaxnmh_f16(a: f16, b: f16) -> f16 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg_attr(test, assert_instr(fmaxnmv))]
pub fn vmaxnmv_f16(a: float16x4_t) -> f16 {
unsafe extern "unadjusted" {
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fmaxnmv.f16.v4f16"
)]
fn _vmaxnmv_f16(a: float16x4_t) -> f16;
}
unsafe { _vmaxnmv_f16(a) }
unsafe { simd_reduce_max(a) }
}
#[doc = "Floating-point maximum number across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vmaxnmvq_f16)"]
@ -13272,14 +13265,7 @@ pub fn vmaxnmv_f16(a: float16x4_t) -> f16 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg_attr(test, assert_instr(fmaxnmv))]
pub fn vmaxnmvq_f16(a: float16x8_t) -> f16 {
unsafe extern "unadjusted" {
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fmaxnmv.f16.v8f16"
)]
fn _vmaxnmvq_f16(a: float16x8_t) -> f16;
}
unsafe { _vmaxnmvq_f16(a) }
unsafe { simd_reduce_max(a) }
}
#[doc = "Floating-point maximum number across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vmaxnmv_f32)"]
@ -13288,14 +13274,7 @@ pub fn vmaxnmvq_f16(a: float16x8_t) -> f16 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(fmaxnmp))]
pub fn vmaxnmv_f32(a: float32x2_t) -> f32 {
unsafe extern "unadjusted" {
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fmaxnmv.f32.v2f32"
)]
fn _vmaxnmv_f32(a: float32x2_t) -> f32;
}
unsafe { _vmaxnmv_f32(a) }
unsafe { simd_reduce_max(a) }
}
#[doc = "Floating-point maximum number across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vmaxnmvq_f64)"]
@ -13304,14 +13283,7 @@ pub fn vmaxnmv_f32(a: float32x2_t) -> f32 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(fmaxnmp))]
pub fn vmaxnmvq_f64(a: float64x2_t) -> f64 {
unsafe extern "unadjusted" {
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fmaxnmv.f64.v2f64"
)]
fn _vmaxnmvq_f64(a: float64x2_t) -> f64;
}
unsafe { _vmaxnmvq_f64(a) }
unsafe { simd_reduce_max(a) }
}
#[doc = "Floating-point maximum number across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vmaxnmvq_f32)"]
@ -13320,14 +13292,7 @@ pub fn vmaxnmvq_f64(a: float64x2_t) -> f64 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
#[cfg_attr(test, assert_instr(fmaxnmv))]
pub fn vmaxnmvq_f32(a: float32x4_t) -> f32 {
unsafe extern "unadjusted" {
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fmaxnmv.f32.v4f32"
)]
fn _vmaxnmvq_f32(a: float32x4_t) -> f32;
}
unsafe { _vmaxnmvq_f32(a) }
unsafe { simd_reduce_max(a) }
}
#[doc = "Floating-point maximum number across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vmaxv_f16)"]
@ -13683,14 +13648,7 @@ pub fn vminnmh_f16(a: f16, b: f16) -> f16 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg_attr(test, assert_instr(fminnmv))]
pub fn vminnmv_f16(a: float16x4_t) -> f16 {
unsafe extern "unadjusted" {
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fminnmv.f16.v4f16"
)]
fn _vminnmv_f16(a: float16x4_t) -> f16;
}
unsafe { _vminnmv_f16(a) }
unsafe { simd_reduce_min(a) }
}
#[doc = "Floating-point minimum number across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vminnmvq_f16)"]
@ -13699,14 +13657,7 @@ pub fn vminnmv_f16(a: float16x4_t) -> f16 {
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
#[cfg_attr(test, assert_instr(fminnmv))]
pub fn vminnmvq_f16(a: float16x8_t) -> f16 {
unsafe extern "unadjusted" {
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fminnmv.f16.v8f16"
)]
fn _vminnmvq_f16(a: float16x8_t) -> f16;
}
unsafe { _vminnmvq_f16(a) }
unsafe { simd_reduce_min(a) }
}
#[doc = "Floating-point minimum number across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vminnmv_f32)"]
@ -13715,14 +13666,7 @@ pub fn vminnmvq_f16(a: float16x8_t) -> f16 {
#[cfg_attr(test, assert_instr(fminnmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vminnmv_f32(a: float32x2_t) -> f32 {
unsafe extern "unadjusted" {
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fminnmv.f32.v2f32"
)]
fn _vminnmv_f32(a: float32x2_t) -> f32;
}
unsafe { _vminnmv_f32(a) }
unsafe { simd_reduce_min(a) }
}
#[doc = "Floating-point minimum number across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vminnmvq_f64)"]
@ -13731,14 +13675,7 @@ pub fn vminnmv_f32(a: float32x2_t) -> f32 {
#[cfg_attr(test, assert_instr(fminnmp))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vminnmvq_f64(a: float64x2_t) -> f64 {
unsafe extern "unadjusted" {
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fminnmv.f64.v2f64"
)]
fn _vminnmvq_f64(a: float64x2_t) -> f64;
}
unsafe { _vminnmvq_f64(a) }
unsafe { simd_reduce_min(a) }
}
#[doc = "Floating-point minimum number across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vminnmvq_f32)"]
@ -13747,14 +13684,7 @@ pub fn vminnmvq_f64(a: float64x2_t) -> f64 {
#[cfg_attr(test, assert_instr(fminnmv))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vminnmvq_f32(a: float32x4_t) -> f32 {
unsafe extern "unadjusted" {
#[cfg_attr(
any(target_arch = "aarch64", target_arch = "arm64ec"),
link_name = "llvm.aarch64.neon.fminnmv.f32.v4f32"
)]
fn _vminnmvq_f32(a: float32x4_t) -> f32;
}
unsafe { _vminnmvq_f32(a) }
unsafe { simd_reduce_min(a) }
}
#[doc = "Floating-point minimum number across vector"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vminv_f16)"]

View File

@ -6635,11 +6635,7 @@ intrinsics:
- [float32x2_t, f32]
- [float64x2_t, f64]
compose:
- LLVMLink:
name: "fmaxnmv.{neon_type[0]}"
links:
- link: "llvm.aarch64.neon.fmaxnmv.{type[1]}.{neon_type[0]}"
arch: aarch64,arm64ec
- FnCall: [simd_reduce_max, [a]]
- name: "vmaxnmv{neon_type[0].no}"
doc: Floating-point maximum number across vector
@ -6651,11 +6647,7 @@ intrinsics:
types:
- [float32x4_t, f32]
compose:
- LLVMLink:
name: "fmaxnmv.{neon_type[0]}"
links:
- link: "llvm.aarch64.neon.fmaxnmv.{type[1]}.{neon_type[0]}"
arch: aarch64,arm64ec
- FnCall: [simd_reduce_max, [a]]
- name: "vmaxnmv{neon_type[0].no}"
@ -6671,11 +6663,7 @@ intrinsics:
- [float16x4_t, f16]
- [float16x8_t, f16]
compose:
- LLVMLink:
name: "fmaxnmv.{neon_type[0]}"
links:
- link: "llvm.aarch64.neon.fmaxnmv.{type[1]}.{neon_type[0]}"
arch: aarch64,arm64ec
- FnCall: [simd_reduce_max, [a]]
- name: "vminnmv{neon_type[0].no}"
@ -6691,11 +6679,7 @@ intrinsics:
- [float16x4_t, f16]
- [float16x8_t, f16]
compose:
- LLVMLink:
name: "fminnmv.{neon_type[0]}"
links:
- link: "llvm.aarch64.neon.fminnmv.{type[1]}.{neon_type[0]}"
arch: aarch64,arm64ec
- FnCall: [simd_reduce_min, [a]]
- name: "vmaxv{neon_type[0].no}"
@ -6815,11 +6799,7 @@ intrinsics:
- [float32x2_t, "f32"]
- [float64x2_t, "f64"]
compose:
- LLVMLink:
name: "vminnmv.{neon_type[0]}"
links:
- link: "llvm.aarch64.neon.fminnmv.{type[1]}.{neon_type[0]}"
arch: aarch64,arm64ec
- FnCall: [simd_reduce_min, [a]]
- name: "vminnmv{neon_type[0].no}"
doc: "Floating-point minimum number across vector"
@ -6832,11 +6812,7 @@ intrinsics:
types:
- [float32x4_t, "f32"]
compose:
- LLVMLink:
name: "vminnmv.{neon_type[0]}"
links:
- link: "llvm.aarch64.neon.fminnmv.{type[1]}.{neon_type[0]}"
arch: aarch64,arm64ec
- FnCall: [simd_reduce_min, [a]]
- name: "vmovl_high{neon_type[0].noq}"
doc: Vector move