Skip to content

Commit 3a0b6ae

Browse files
committed
use simd_bitreverse on aarch64
1 parent f32b66c commit 3a0b6ae

File tree

2 files changed

+11
-99
lines changed

2 files changed

+11
-99
lines changed

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

Lines changed: 6 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -21417,14 +21417,7 @@ pub fn vrax1q_u64(a: uint64x2_t, b: uint64x2_t) -> uint64x2_t {
2141721417
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
2141821418
#[cfg_attr(test, assert_instr(rbit))]
2141921419
pub fn vrbit_s8(a: int8x8_t) -> int8x8_t {
21420-
unsafe extern "unadjusted" {
21421-
#[cfg_attr(
21422-
any(target_arch = "aarch64", target_arch = "arm64ec"),
21423-
link_name = "llvm.bitreverse.v8i8"
21424-
)]
21425-
fn _vrbit_s8(a: int8x8_t) -> int8x8_t;
21426-
}
21427-
unsafe { _vrbit_s8(a) }
21420+
unsafe { simd_bitreverse(a) }
2142821421
}
2142921422
#[doc = "Reverse bit order"]
2143021423
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbitq_s8)"]
@@ -21433,120 +21426,43 @@ pub fn vrbit_s8(a: int8x8_t) -> int8x8_t {
2143321426
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
2143421427
#[cfg_attr(test, assert_instr(rbit))]
2143521428
pub fn vrbitq_s8(a: int8x16_t) -> int8x16_t {
21436-
unsafe extern "unadjusted" {
21437-
#[cfg_attr(
21438-
any(target_arch = "aarch64", target_arch = "arm64ec"),
21439-
link_name = "llvm.bitreverse.v16i8"
21440-
)]
21441-
fn _vrbitq_s8(a: int8x16_t) -> int8x16_t;
21442-
}
21443-
unsafe { _vrbitq_s8(a) }
21444-
}
21445-
#[doc = "Reverse bit order"]
21446-
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbit_u8)"]
21447-
#[inline]
21448-
#[cfg(target_endian = "little")]
21449-
#[target_feature(enable = "neon")]
21450-
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
21451-
#[cfg_attr(test, assert_instr(rbit))]
21452-
pub fn vrbit_u8(a: uint8x8_t) -> uint8x8_t {
21453-
unsafe { transmute(vrbit_s8(transmute(a))) }
21429+
unsafe { simd_bitreverse(a) }
2145421430
}
2145521431
#[doc = "Reverse bit order"]
2145621432
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbit_u8)"]
2145721433
#[inline]
21458-
#[cfg(target_endian = "big")]
2145921434
#[target_feature(enable = "neon")]
2146021435
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
2146121436
#[cfg_attr(test, assert_instr(rbit))]
2146221437
pub fn vrbit_u8(a: uint8x8_t) -> uint8x8_t {
21463-
let a: uint8x8_t = unsafe { simd_shuffle!(a, a, [7, 6, 5, 4, 3, 2, 1, 0]) };
21464-
unsafe {
21465-
let ret_val: uint8x8_t = transmute(vrbit_s8(transmute(a)));
21466-
simd_shuffle!(ret_val, ret_val, [7, 6, 5, 4, 3, 2, 1, 0])
21467-
}
21438+
unsafe { simd_bitreverse(a) }
2146821439
}
2146921440
#[doc = "Reverse bit order"]
2147021441
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbitq_u8)"]
2147121442
#[inline]
21472-
#[cfg(target_endian = "little")]
2147321443
#[target_feature(enable = "neon")]
2147421444
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
2147521445
#[cfg_attr(test, assert_instr(rbit))]
2147621446
pub fn vrbitq_u8(a: uint8x16_t) -> uint8x16_t {
21477-
unsafe { transmute(vrbitq_s8(transmute(a))) }
21478-
}
21479-
#[doc = "Reverse bit order"]
21480-
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbitq_u8)"]
21481-
#[inline]
21482-
#[cfg(target_endian = "big")]
21483-
#[target_feature(enable = "neon")]
21484-
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
21485-
#[cfg_attr(test, assert_instr(rbit))]
21486-
pub fn vrbitq_u8(a: uint8x16_t) -> uint8x16_t {
21487-
let a: uint8x16_t =
21488-
unsafe { simd_shuffle!(a, a, [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) };
21489-
unsafe {
21490-
let ret_val: uint8x16_t = transmute(vrbitq_s8(transmute(a)));
21491-
simd_shuffle!(
21492-
ret_val,
21493-
ret_val,
21494-
[15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
21495-
)
21496-
}
21447+
unsafe { simd_bitreverse(a) }
2149721448
}
2149821449
#[doc = "Reverse bit order"]
2149921450
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbit_p8)"]
2150021451
#[inline]
21501-
#[cfg(target_endian = "little")]
2150221452
#[target_feature(enable = "neon")]
2150321453
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
2150421454
#[cfg_attr(test, assert_instr(rbit))]
2150521455
pub fn vrbit_p8(a: poly8x8_t) -> poly8x8_t {
21506-
unsafe { transmute(vrbit_s8(transmute(a))) }
21507-
}
21508-
#[doc = "Reverse bit order"]
21509-
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbit_p8)"]
21510-
#[inline]
21511-
#[cfg(target_endian = "big")]
21512-
#[target_feature(enable = "neon")]
21513-
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
21514-
#[cfg_attr(test, assert_instr(rbit))]
21515-
pub fn vrbit_p8(a: poly8x8_t) -> poly8x8_t {
21516-
let a: poly8x8_t = unsafe { simd_shuffle!(a, a, [7, 6, 5, 4, 3, 2, 1, 0]) };
21517-
unsafe {
21518-
let ret_val: poly8x8_t = transmute(vrbit_s8(transmute(a)));
21519-
simd_shuffle!(ret_val, ret_val, [7, 6, 5, 4, 3, 2, 1, 0])
21520-
}
21456+
unsafe { simd_bitreverse(a) }
2152121457
}
2152221458
#[doc = "Reverse bit order"]
2152321459
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbitq_p8)"]
2152421460
#[inline]
21525-
#[cfg(target_endian = "little")]
21526-
#[target_feature(enable = "neon")]
21527-
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
21528-
#[cfg_attr(test, assert_instr(rbit))]
21529-
pub fn vrbitq_p8(a: poly8x16_t) -> poly8x16_t {
21530-
unsafe { transmute(vrbitq_s8(transmute(a))) }
21531-
}
21532-
#[doc = "Reverse bit order"]
21533-
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrbitq_p8)"]
21534-
#[inline]
21535-
#[cfg(target_endian = "big")]
2153621461
#[target_feature(enable = "neon")]
2153721462
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
2153821463
#[cfg_attr(test, assert_instr(rbit))]
2153921464
pub fn vrbitq_p8(a: poly8x16_t) -> poly8x16_t {
21540-
let a: poly8x16_t =
21541-
unsafe { simd_shuffle!(a, a, [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]) };
21542-
unsafe {
21543-
let ret_val: poly8x16_t = transmute(vrbitq_s8(transmute(a)));
21544-
simd_shuffle!(
21545-
ret_val,
21546-
ret_val,
21547-
[15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
21548-
)
21549-
}
21465+
unsafe { simd_bitreverse(a) }
2155021466
}
2155121467
#[doc = "Reciprocal estimate."]
2155221468
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrecpe_f64)"]

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

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2940,11 +2940,9 @@ intrinsics:
29402940
- int8x8_t
29412941
- int8x16_t
29422942
compose:
2943-
- LLVMLink:
2944-
name: "rbit.{neon_type}"
2945-
links:
2946-
- link: "llvm.bitreverse.{neon_type}"
2947-
arch: aarch64,arm64ec
2943+
- FnCall:
2944+
- simd_bitreverse
2945+
- - a
29482946

29492947
- name: "vrbit{neon_type[0].no}"
29502948
doc: Reverse bit order
@@ -2960,10 +2958,8 @@ intrinsics:
29602958
- [poly8x16_t, int8x16_t]
29612959
compose:
29622960
- FnCall:
2963-
- transmute
2964-
- - FnCall:
2965-
- "vrbit{neon_type[1].no}"
2966-
- - FnCall: [transmute, [a]]
2961+
- simd_bitreverse
2962+
- - a
29672963

29682964
- name: "vrndx{neon_type.no}"
29692965
doc: "Floating-point round to integral exact, using current rounding mode"

0 commit comments

Comments
 (0)