Pr feedback for instruction & hookup CI for aarch64_be
This commit is contained in:
committed by
Amanieu d'Antras
parent
ef92b59242
commit
c65583c2b3
13
library/stdarch/.github/workflows/main.yml
vendored
13
library/stdarch/.github/workflows/main.yml
vendored
@@ -56,6 +56,9 @@ jobs:
|
|||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
- tuple: aarch64-unknown-linux-gnu
|
- tuple: aarch64-unknown-linux-gnu
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
|
- target:
|
||||||
|
tuple: aarch64_be-unknown-linux-gnu
|
||||||
|
os: ubuntu-latest
|
||||||
- tuple: riscv64gc-unknown-linux-gnu
|
- tuple: riscv64gc-unknown-linux-gnu
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
- tuple: powerpc-unknown-linux-gnu
|
- tuple: powerpc-unknown-linux-gnu
|
||||||
@@ -125,6 +128,11 @@ jobs:
|
|||||||
tuple: aarch64-unknown-linux-gnu
|
tuple: aarch64-unknown-linux-gnu
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
test_everything: true
|
test_everything: true
|
||||||
|
- target:
|
||||||
|
tuple: aarch64_be-unknown-linux-gnu
|
||||||
|
os: ubuntu-latest
|
||||||
|
test_everything: true
|
||||||
|
build_std: true
|
||||||
- target:
|
- target:
|
||||||
tuple: armv7-unknown-linux-gnueabihf
|
tuple: armv7-unknown-linux-gnueabihf
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
@@ -199,6 +207,11 @@ jobs:
|
|||||||
rustup update nightly --no-self-update
|
rustup update nightly --no-self-update
|
||||||
rustup default nightly
|
rustup default nightly
|
||||||
- run: rustup target add ${{ matrix.target.tuple }}
|
- run: rustup target add ${{ matrix.target.tuple }}
|
||||||
|
if: matrix.build_std == ''
|
||||||
|
- run: |
|
||||||
|
rustup component add rust-src
|
||||||
|
echo "CARGO_UNSTABLE_BUILD_STD=std" >> $GITHUB_ENV
|
||||||
|
if: matrix.build_std != ''
|
||||||
- run: cargo generate-lockfile
|
- run: cargo generate-lockfile
|
||||||
|
|
||||||
# Configure some env vars based on matrix configuration
|
# Configure some env vars based on matrix configuration
|
||||||
|
|||||||
@@ -24470,6 +24470,73 @@ pub fn vrsrad_n_u64<const N: i32>(a: u64, b: u64) -> u64 {
|
|||||||
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_s16)"]
|
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_s16)"]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[target_feature(enable = "neon")]
|
#[target_feature(enable = "neon")]
|
||||||
|
#[cfg(target_endian = "little")]
|
||||||
|
#[cfg_attr(test, assert_instr(rsubhn2))]
|
||||||
|
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
||||||
|
pub fn vrsubhn_high_s16(a: int8x8_t, b: int16x8_t, c: int16x8_t) -> int8x16_t {
|
||||||
|
let x: int8x8_t = vrsubhn_s16(b, c);
|
||||||
|
unsafe { simd_shuffle!(a, x, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) }
|
||||||
|
}
|
||||||
|
#[doc = "Rounding subtract returning high narrow"]
|
||||||
|
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_s32)"]
|
||||||
|
#[inline]
|
||||||
|
#[target_feature(enable = "neon")]
|
||||||
|
#[cfg(target_endian = "little")]
|
||||||
|
#[cfg_attr(test, assert_instr(rsubhn2))]
|
||||||
|
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
||||||
|
pub fn vrsubhn_high_s32(a: int16x4_t, b: int32x4_t, c: int32x4_t) -> int16x8_t {
|
||||||
|
let x: int16x4_t = vrsubhn_s32(b, c);
|
||||||
|
unsafe { simd_shuffle!(a, x, [0, 1, 2, 3, 4, 5, 6, 7]) }
|
||||||
|
}
|
||||||
|
#[doc = "Rounding subtract returning high narrow"]
|
||||||
|
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_s64)"]
|
||||||
|
#[inline]
|
||||||
|
#[target_feature(enable = "neon")]
|
||||||
|
#[cfg(target_endian = "little")]
|
||||||
|
#[cfg_attr(test, assert_instr(rsubhn2))]
|
||||||
|
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
||||||
|
pub fn vrsubhn_high_s64(a: int32x2_t, b: int64x2_t, c: int64x2_t) -> int32x4_t {
|
||||||
|
let x: int32x2_t = vrsubhn_s64(b, c);
|
||||||
|
unsafe { simd_shuffle!(a, x, [0, 1, 2, 3]) }
|
||||||
|
}
|
||||||
|
#[doc = "Rounding subtract returning high narrow"]
|
||||||
|
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_u16)"]
|
||||||
|
#[inline]
|
||||||
|
#[target_feature(enable = "neon")]
|
||||||
|
#[cfg(target_endian = "little")]
|
||||||
|
#[cfg_attr(test, assert_instr(rsubhn2))]
|
||||||
|
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
||||||
|
pub fn vrsubhn_high_u16(a: uint8x8_t, b: uint16x8_t, c: uint16x8_t) -> uint8x16_t {
|
||||||
|
let x: uint8x8_t = vrsubhn_u16(b, c);
|
||||||
|
unsafe { simd_shuffle!(a, x, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) }
|
||||||
|
}
|
||||||
|
#[doc = "Rounding subtract returning high narrow"]
|
||||||
|
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_u32)"]
|
||||||
|
#[inline]
|
||||||
|
#[target_feature(enable = "neon")]
|
||||||
|
#[cfg(target_endian = "little")]
|
||||||
|
#[cfg_attr(test, assert_instr(rsubhn2))]
|
||||||
|
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
||||||
|
pub fn vrsubhn_high_u32(a: uint16x4_t, b: uint32x4_t, c: uint32x4_t) -> uint16x8_t {
|
||||||
|
let x: uint16x4_t = vrsubhn_u32(b, c);
|
||||||
|
unsafe { simd_shuffle!(a, x, [0, 1, 2, 3, 4, 5, 6, 7]) }
|
||||||
|
}
|
||||||
|
#[doc = "Rounding subtract returning high narrow"]
|
||||||
|
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_u64)"]
|
||||||
|
#[inline]
|
||||||
|
#[target_feature(enable = "neon")]
|
||||||
|
#[cfg(target_endian = "little")]
|
||||||
|
#[cfg_attr(test, assert_instr(rsubhn2))]
|
||||||
|
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
||||||
|
pub fn vrsubhn_high_u64(a: uint32x2_t, b: uint64x2_t, c: uint64x2_t) -> uint32x4_t {
|
||||||
|
let x: uint32x2_t = vrsubhn_u64(b, c);
|
||||||
|
unsafe { simd_shuffle!(a, x, [0, 1, 2, 3]) }
|
||||||
|
}
|
||||||
|
#[doc = "Rounding subtract returning high narrow"]
|
||||||
|
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_s16)"]
|
||||||
|
#[inline]
|
||||||
|
#[target_feature(enable = "neon")]
|
||||||
|
#[cfg(target_endian = "big")]
|
||||||
#[cfg_attr(test, assert_instr(rsubhn))]
|
#[cfg_attr(test, assert_instr(rsubhn))]
|
||||||
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
||||||
pub fn vrsubhn_high_s16(a: int8x8_t, b: int16x8_t, c: int16x8_t) -> int8x16_t {
|
pub fn vrsubhn_high_s16(a: int8x8_t, b: int16x8_t, c: int16x8_t) -> int8x16_t {
|
||||||
@@ -24480,6 +24547,7 @@ pub fn vrsubhn_high_s16(a: int8x8_t, b: int16x8_t, c: int16x8_t) -> int8x16_t {
|
|||||||
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_s32)"]
|
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_s32)"]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[target_feature(enable = "neon")]
|
#[target_feature(enable = "neon")]
|
||||||
|
#[cfg(target_endian = "big")]
|
||||||
#[cfg_attr(test, assert_instr(rsubhn))]
|
#[cfg_attr(test, assert_instr(rsubhn))]
|
||||||
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
||||||
pub fn vrsubhn_high_s32(a: int16x4_t, b: int32x4_t, c: int32x4_t) -> int16x8_t {
|
pub fn vrsubhn_high_s32(a: int16x4_t, b: int32x4_t, c: int32x4_t) -> int16x8_t {
|
||||||
@@ -24490,6 +24558,7 @@ pub fn vrsubhn_high_s32(a: int16x4_t, b: int32x4_t, c: int32x4_t) -> int16x8_t {
|
|||||||
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_s64)"]
|
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_s64)"]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[target_feature(enable = "neon")]
|
#[target_feature(enable = "neon")]
|
||||||
|
#[cfg(target_endian = "big")]
|
||||||
#[cfg_attr(test, assert_instr(rsubhn))]
|
#[cfg_attr(test, assert_instr(rsubhn))]
|
||||||
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
||||||
pub fn vrsubhn_high_s64(a: int32x2_t, b: int64x2_t, c: int64x2_t) -> int32x4_t {
|
pub fn vrsubhn_high_s64(a: int32x2_t, b: int64x2_t, c: int64x2_t) -> int32x4_t {
|
||||||
@@ -24500,6 +24569,7 @@ pub fn vrsubhn_high_s64(a: int32x2_t, b: int64x2_t, c: int64x2_t) -> int32x4_t {
|
|||||||
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_u16)"]
|
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_u16)"]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[target_feature(enable = "neon")]
|
#[target_feature(enable = "neon")]
|
||||||
|
#[cfg(target_endian = "big")]
|
||||||
#[cfg_attr(test, assert_instr(rsubhn))]
|
#[cfg_attr(test, assert_instr(rsubhn))]
|
||||||
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
||||||
pub fn vrsubhn_high_u16(a: uint8x8_t, b: uint16x8_t, c: uint16x8_t) -> uint8x16_t {
|
pub fn vrsubhn_high_u16(a: uint8x8_t, b: uint16x8_t, c: uint16x8_t) -> uint8x16_t {
|
||||||
@@ -24510,6 +24580,7 @@ pub fn vrsubhn_high_u16(a: uint8x8_t, b: uint16x8_t, c: uint16x8_t) -> uint8x16_
|
|||||||
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_u32)"]
|
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_u32)"]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[target_feature(enable = "neon")]
|
#[target_feature(enable = "neon")]
|
||||||
|
#[cfg(target_endian = "big")]
|
||||||
#[cfg_attr(test, assert_instr(rsubhn))]
|
#[cfg_attr(test, assert_instr(rsubhn))]
|
||||||
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
||||||
pub fn vrsubhn_high_u32(a: uint16x4_t, b: uint32x4_t, c: uint32x4_t) -> uint16x8_t {
|
pub fn vrsubhn_high_u32(a: uint16x4_t, b: uint32x4_t, c: uint32x4_t) -> uint16x8_t {
|
||||||
@@ -24520,6 +24591,7 @@ pub fn vrsubhn_high_u32(a: uint16x4_t, b: uint32x4_t, c: uint32x4_t) -> uint16x8
|
|||||||
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_u64)"]
|
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vrsubhn_high_u64)"]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[target_feature(enable = "neon")]
|
#[target_feature(enable = "neon")]
|
||||||
|
#[cfg(target_endian = "big")]
|
||||||
#[cfg_attr(test, assert_instr(rsubhn))]
|
#[cfg_attr(test, assert_instr(rsubhn))]
|
||||||
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
|
||||||
pub fn vrsubhn_high_u64(a: uint32x2_t, b: uint64x2_t, c: uint64x2_t) -> uint32x4_t {
|
pub fn vrsubhn_high_u64(a: uint32x2_t, b: uint64x2_t, c: uint64x2_t) -> uint32x4_t {
|
||||||
|
|||||||
@@ -59,6 +59,14 @@ neon-unstable-f16: &neon-unstable-f16
|
|||||||
neon-unstable-feat-lut: &neon-unstable-feat-lut
|
neon-unstable-feat-lut: &neon-unstable-feat-lut
|
||||||
FnCall: [unstable, ['feature = "stdarch_neon_feat_lut"', 'issue = "138050"']]
|
FnCall: [unstable, ['feature = "stdarch_neon_feat_lut"', 'issue = "138050"']]
|
||||||
|
|
||||||
|
# #[cfg(target_endian = "little")]
|
||||||
|
little-endian: &little-endian
|
||||||
|
FnCall: [cfg, ['target_endian = "little"']]
|
||||||
|
|
||||||
|
# #[cfg(target_endian = "big")]
|
||||||
|
big-endian: &big-endian
|
||||||
|
FnCall: [cfg, ['target_endian = "big"']]
|
||||||
|
|
||||||
intrinsics:
|
intrinsics:
|
||||||
- name: "vaddd_{type}"
|
- name: "vaddd_{type}"
|
||||||
doc: Add
|
doc: Add
|
||||||
@@ -8906,6 +8914,30 @@ intrinsics:
|
|||||||
arguments: ["a: {neon_type[0]}", "b: {neon_type[1]}", "c: {neon_type[1]}"]
|
arguments: ["a: {neon_type[0]}", "b: {neon_type[1]}", "c: {neon_type[1]}"]
|
||||||
return_type: "{neon_type[3]}"
|
return_type: "{neon_type[3]}"
|
||||||
attr:
|
attr:
|
||||||
|
- *little-endian
|
||||||
|
- FnCall: [cfg_attr, [test, {FnCall: [assert_instr, [rsubhn2]]}]]
|
||||||
|
- FnCall: [stable, ['feature = "neon_intrinsics"', 'since = "1.59.0"']]
|
||||||
|
safety: safe
|
||||||
|
types:
|
||||||
|
- [int8x8_t, int16x8_t, int16x8_t, int8x16_t, '[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]']
|
||||||
|
- [int16x4_t, int32x4_t, int32x4_t, int16x8_t, '[0, 1, 2, 3, 4, 5, 6, 7]']
|
||||||
|
- [int32x2_t, int64x2_t, int64x2_t, int32x4_t, '[0, 1, 2, 3]']
|
||||||
|
- [uint8x8_t, uint16x8_t, uint16x8_t, uint8x16_t, '[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]']
|
||||||
|
- [uint16x4_t, uint32x4_t, uint32x4_t, uint16x8_t, '[0, 1, 2, 3, 4, 5, 6, 7]']
|
||||||
|
- [uint32x2_t, uint64x2_t, uint64x2_t, uint32x4_t, '[0, 1, 2, 3]']
|
||||||
|
compose:
|
||||||
|
- Let:
|
||||||
|
- x
|
||||||
|
- "{neon_type[0]}"
|
||||||
|
- FnCall: ["vrsubhn_{neon_type[1]}", [b, c]]
|
||||||
|
- FnCall: [simd_shuffle!, [a, x, "{type[4]}"]]
|
||||||
|
|
||||||
|
- name: "vrsubhn_high_{neon_type[1]}"
|
||||||
|
doc: "Rounding subtract returning high narrow"
|
||||||
|
arguments: ["a: {neon_type[0]}", "b: {neon_type[1]}", "c: {neon_type[1]}"]
|
||||||
|
return_type: "{neon_type[3]}"
|
||||||
|
attr:
|
||||||
|
- *big-endian
|
||||||
- FnCall: [cfg_attr, [test, {FnCall: [assert_instr, [rsubhn]]}]]
|
- FnCall: [cfg_attr, [test, {FnCall: [assert_instr, [rsubhn]]}]]
|
||||||
- FnCall: [stable, ['feature = "neon_intrinsics"', 'since = "1.59.0"']]
|
- FnCall: [stable, ['feature = "neon_intrinsics"', 'since = "1.59.0"']]
|
||||||
safety: safe
|
safety: safe
|
||||||
|
|||||||
Reference in New Issue
Block a user