Skip to content

Commit 68cc5f8

Browse files
committed
aarch64: use simd_reduce_min and simd_reduce_max for floats
1 parent e2df07a commit 68cc5f8

File tree

2 files changed

+16
-110
lines changed

2 files changed

+16
-110
lines changed

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

Lines changed: 10 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -13256,14 +13256,7 @@ pub fn vmaxnmh_f16(a: f16, b: f16) -> f16 {
1325613256
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
1325713257
#[cfg_attr(test, assert_instr(fmaxnmv))]
1325813258
pub fn vmaxnmv_f16(a: float16x4_t) -> f16 {
13259-
unsafe extern "unadjusted" {
13260-
#[cfg_attr(
13261-
any(target_arch = "aarch64", target_arch = "arm64ec"),
13262-
link_name = "llvm.aarch64.neon.fmaxnmv.f16.v4f16"
13263-
)]
13264-
fn _vmaxnmv_f16(a: float16x4_t) -> f16;
13265-
}
13266-
unsafe { _vmaxnmv_f16(a) }
13259+
unsafe { simd_reduce_max(a) }
1326713260
}
1326813261
#[doc = "Floating-point maximum number across vector"]
1326913262
#[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 {
1327213265
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
1327313266
#[cfg_attr(test, assert_instr(fmaxnmv))]
1327413267
pub fn vmaxnmvq_f16(a: float16x8_t) -> f16 {
13275-
unsafe extern "unadjusted" {
13276-
#[cfg_attr(
13277-
any(target_arch = "aarch64", target_arch = "arm64ec"),
13278-
link_name = "llvm.aarch64.neon.fmaxnmv.f16.v8f16"
13279-
)]
13280-
fn _vmaxnmvq_f16(a: float16x8_t) -> f16;
13281-
}
13282-
unsafe { _vmaxnmvq_f16(a) }
13268+
unsafe { simd_reduce_max(a) }
1328313269
}
1328413270
#[doc = "Floating-point maximum number across vector"]
1328513271
#[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 {
1328813274
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
1328913275
#[cfg_attr(test, assert_instr(fmaxnmp))]
1329013276
pub fn vmaxnmv_f32(a: float32x2_t) -> f32 {
13291-
unsafe extern "unadjusted" {
13292-
#[cfg_attr(
13293-
any(target_arch = "aarch64", target_arch = "arm64ec"),
13294-
link_name = "llvm.aarch64.neon.fmaxnmv.f32.v2f32"
13295-
)]
13296-
fn _vmaxnmv_f32(a: float32x2_t) -> f32;
13297-
}
13298-
unsafe { _vmaxnmv_f32(a) }
13277+
unsafe { simd_reduce_max(a) }
1329913278
}
1330013279
#[doc = "Floating-point maximum number across vector"]
1330113280
#[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 {
1330413283
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
1330513284
#[cfg_attr(test, assert_instr(fmaxnmp))]
1330613285
pub fn vmaxnmvq_f64(a: float64x2_t) -> f64 {
13307-
unsafe extern "unadjusted" {
13308-
#[cfg_attr(
13309-
any(target_arch = "aarch64", target_arch = "arm64ec"),
13310-
link_name = "llvm.aarch64.neon.fmaxnmv.f64.v2f64"
13311-
)]
13312-
fn _vmaxnmvq_f64(a: float64x2_t) -> f64;
13313-
}
13314-
unsafe { _vmaxnmvq_f64(a) }
13286+
unsafe { simd_reduce_max(a) }
1331513287
}
1331613288
#[doc = "Floating-point maximum number across vector"]
1331713289
#[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 {
1332013292
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
1332113293
#[cfg_attr(test, assert_instr(fmaxnmv))]
1332213294
pub fn vmaxnmvq_f32(a: float32x4_t) -> f32 {
13323-
unsafe extern "unadjusted" {
13324-
#[cfg_attr(
13325-
any(target_arch = "aarch64", target_arch = "arm64ec"),
13326-
link_name = "llvm.aarch64.neon.fmaxnmv.f32.v4f32"
13327-
)]
13328-
fn _vmaxnmvq_f32(a: float32x4_t) -> f32;
13329-
}
13330-
unsafe { _vmaxnmvq_f32(a) }
13295+
unsafe { simd_reduce_max(a) }
1333113296
}
1333213297
#[doc = "Floating-point maximum number across vector"]
1333313298
#[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 {
1368313648
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
1368413649
#[cfg_attr(test, assert_instr(fminnmv))]
1368513650
pub fn vminnmv_f16(a: float16x4_t) -> f16 {
13686-
unsafe extern "unadjusted" {
13687-
#[cfg_attr(
13688-
any(target_arch = "aarch64", target_arch = "arm64ec"),
13689-
link_name = "llvm.aarch64.neon.fminnmv.f16.v4f16"
13690-
)]
13691-
fn _vminnmv_f16(a: float16x4_t) -> f16;
13692-
}
13693-
unsafe { _vminnmv_f16(a) }
13651+
unsafe { simd_reduce_min(a) }
1369413652
}
1369513653
#[doc = "Floating-point minimum number across vector"]
1369613654
#[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 {
1369913657
#[unstable(feature = "stdarch_neon_f16", issue = "136306")]
1370013658
#[cfg_attr(test, assert_instr(fminnmv))]
1370113659
pub fn vminnmvq_f16(a: float16x8_t) -> f16 {
13702-
unsafe extern "unadjusted" {
13703-
#[cfg_attr(
13704-
any(target_arch = "aarch64", target_arch = "arm64ec"),
13705-
link_name = "llvm.aarch64.neon.fminnmv.f16.v8f16"
13706-
)]
13707-
fn _vminnmvq_f16(a: float16x8_t) -> f16;
13708-
}
13709-
unsafe { _vminnmvq_f16(a) }
13660+
unsafe { simd_reduce_min(a) }
1371013661
}
1371113662
#[doc = "Floating-point minimum number across vector"]
1371213663
#[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 {
1371513666
#[cfg_attr(test, assert_instr(fminnmp))]
1371613667
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
1371713668
pub fn vminnmv_f32(a: float32x2_t) -> f32 {
13718-
unsafe extern "unadjusted" {
13719-
#[cfg_attr(
13720-
any(target_arch = "aarch64", target_arch = "arm64ec"),
13721-
link_name = "llvm.aarch64.neon.fminnmv.f32.v2f32"
13722-
)]
13723-
fn _vminnmv_f32(a: float32x2_t) -> f32;
13724-
}
13725-
unsafe { _vminnmv_f32(a) }
13669+
unsafe { simd_reduce_min(a) }
1372613670
}
1372713671
#[doc = "Floating-point minimum number across vector"]
1372813672
#[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 {
1373113675
#[cfg_attr(test, assert_instr(fminnmp))]
1373213676
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
1373313677
pub fn vminnmvq_f64(a: float64x2_t) -> f64 {
13734-
unsafe extern "unadjusted" {
13735-
#[cfg_attr(
13736-
any(target_arch = "aarch64", target_arch = "arm64ec"),
13737-
link_name = "llvm.aarch64.neon.fminnmv.f64.v2f64"
13738-
)]
13739-
fn _vminnmvq_f64(a: float64x2_t) -> f64;
13740-
}
13741-
unsafe { _vminnmvq_f64(a) }
13678+
unsafe { simd_reduce_min(a) }
1374213679
}
1374313680
#[doc = "Floating-point minimum number across vector"]
1374413681
#[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 {
1374713684
#[cfg_attr(test, assert_instr(fminnmv))]
1374813685
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
1374913686
pub fn vminnmvq_f32(a: float32x4_t) -> f32 {
13750-
unsafe extern "unadjusted" {
13751-
#[cfg_attr(
13752-
any(target_arch = "aarch64", target_arch = "arm64ec"),
13753-
link_name = "llvm.aarch64.neon.fminnmv.f32.v4f32"
13754-
)]
13755-
fn _vminnmvq_f32(a: float32x4_t) -> f32;
13756-
}
13757-
unsafe { _vminnmvq_f32(a) }
13687+
unsafe { simd_reduce_min(a) }
1375813688
}
1375913689
#[doc = "Floating-point minimum number across vector"]
1376013690
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vminv_f16)"]

crates/stdarch-gen-arm/spec/neon/aarch64.spec.yml

Lines changed: 6 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6635,11 +6635,7 @@ intrinsics:
66356635
- [float32x2_t, f32]
66366636
- [float64x2_t, f64]
66376637
compose:
6638-
- LLVMLink:
6639-
name: "fmaxnmv.{neon_type[0]}"
6640-
links:
6641-
- link: "llvm.aarch64.neon.fmaxnmv.{type[1]}.{neon_type[0]}"
6642-
arch: aarch64,arm64ec
6638+
- FnCall: [simd_reduce_max, [a]]
66436639

66446640
- name: "vmaxnmv{neon_type[0].no}"
66456641
doc: Floating-point maximum number across vector
@@ -6651,11 +6647,7 @@ intrinsics:
66516647
types:
66526648
- [float32x4_t, f32]
66536649
compose:
6654-
- LLVMLink:
6655-
name: "fmaxnmv.{neon_type[0]}"
6656-
links:
6657-
- link: "llvm.aarch64.neon.fmaxnmv.{type[1]}.{neon_type[0]}"
6658-
arch: aarch64,arm64ec
6650+
- FnCall: [simd_reduce_max, [a]]
66596651

66606652

66616653
- name: "vmaxnmv{neon_type[0].no}"
@@ -6671,11 +6663,7 @@ intrinsics:
66716663
- [float16x4_t, f16]
66726664
- [float16x8_t, f16]
66736665
compose:
6674-
- LLVMLink:
6675-
name: "fmaxnmv.{neon_type[0]}"
6676-
links:
6677-
- link: "llvm.aarch64.neon.fmaxnmv.{type[1]}.{neon_type[0]}"
6678-
arch: aarch64,arm64ec
6666+
- FnCall: [simd_reduce_max, [a]]
66796667

66806668

66816669
- name: "vminnmv{neon_type[0].no}"
@@ -6691,11 +6679,7 @@ intrinsics:
66916679
- [float16x4_t, f16]
66926680
- [float16x8_t, f16]
66936681
compose:
6694-
- LLVMLink:
6695-
name: "fminnmv.{neon_type[0]}"
6696-
links:
6697-
- link: "llvm.aarch64.neon.fminnmv.{type[1]}.{neon_type[0]}"
6698-
arch: aarch64,arm64ec
6682+
- FnCall: [simd_reduce_min, [a]]
66996683

67006684

67016685
- name: "vmaxv{neon_type[0].no}"
@@ -6815,11 +6799,7 @@ intrinsics:
68156799
- [float32x2_t, "f32"]
68166800
- [float64x2_t, "f64"]
68176801
compose:
6818-
- LLVMLink:
6819-
name: "vminnmv.{neon_type[0]}"
6820-
links:
6821-
- link: "llvm.aarch64.neon.fminnmv.{type[1]}.{neon_type[0]}"
6822-
arch: aarch64,arm64ec
6802+
- FnCall: [simd_reduce_min, [a]]
68236803

68246804
- name: "vminnmv{neon_type[0].no}"
68256805
doc: "Floating-point minimum number across vector"
@@ -6832,11 +6812,7 @@ intrinsics:
68326812
types:
68336813
- [float32x4_t, "f32"]
68346814
compose:
6835-
- LLVMLink:
6836-
name: "vminnmv.{neon_type[0]}"
6837-
links:
6838-
- link: "llvm.aarch64.neon.fminnmv.{type[1]}.{neon_type[0]}"
6839-
arch: aarch64,arm64ec
6815+
- FnCall: [simd_reduce_min, [a]]
68406816

68416817
- name: "vmovl_high{neon_type[0].noq}"
68426818
doc: Vector move

0 commit comments

Comments
 (0)