Rollup merge of #152618 - folkertdev:stdarch-sync-2026-02-14, r=folkertdev
stdarch subtree update
Subtree update of `stdarch` to 1239a9f83a.
Created using https://github.com/rust-lang/josh-sync.
r? @ghost
This commit is contained in:
commit
6213acdbb8
5 changed files with 320 additions and 572 deletions
|
|
@ -12858,6 +12858,7 @@ pub unsafe fn vld4q_u64(a: *const u64) -> uint64x2x4_t {
|
|||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(ldap1, LANE = 0))]
|
||||
#[rustc_legacy_const_generics(2)]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub unsafe fn vldap1_lane_s64<const LANE: i32>(ptr: *const i64, src: int64x1_t) -> int64x1_t {
|
||||
static_assert!(LANE == 0);
|
||||
let atomic_src = crate::sync::atomic::AtomicI64::from_ptr(ptr as *mut i64);
|
||||
|
|
@ -12876,6 +12877,7 @@ pub unsafe fn vldap1_lane_s64<const LANE: i32>(ptr: *const i64, src: int64x1_t)
|
|||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(ldap1, LANE = 0))]
|
||||
#[rustc_legacy_const_generics(2)]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub unsafe fn vldap1q_lane_s64<const LANE: i32>(ptr: *const i64, src: int64x2_t) -> int64x2_t {
|
||||
static_assert_uimm_bits!(LANE, 1);
|
||||
let atomic_src = crate::sync::atomic::AtomicI64::from_ptr(ptr as *mut i64);
|
||||
|
|
@ -12894,6 +12896,7 @@ pub unsafe fn vldap1q_lane_s64<const LANE: i32>(ptr: *const i64, src: int64x2_t)
|
|||
#[target_feature(enable = "neon,rcpc3")]
|
||||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(ldap1, LANE = 0))]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub unsafe fn vldap1q_lane_f64<const LANE: i32>(ptr: *const f64, src: float64x2_t) -> float64x2_t {
|
||||
static_assert_uimm_bits!(LANE, 1);
|
||||
transmute(vldap1q_lane_s64::<LANE>(ptr as *mut i64, transmute(src)))
|
||||
|
|
@ -12907,6 +12910,7 @@ pub unsafe fn vldap1q_lane_f64<const LANE: i32>(ptr: *const f64, src: float64x2_
|
|||
#[target_feature(enable = "neon,rcpc3")]
|
||||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(ldap1, LANE = 0))]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub unsafe fn vldap1_lane_u64<const LANE: i32>(ptr: *const u64, src: uint64x1_t) -> uint64x1_t {
|
||||
static_assert!(LANE == 0);
|
||||
transmute(vldap1_lane_s64::<LANE>(ptr as *mut i64, transmute(src)))
|
||||
|
|
@ -12920,6 +12924,7 @@ pub unsafe fn vldap1_lane_u64<const LANE: i32>(ptr: *const u64, src: uint64x1_t)
|
|||
#[target_feature(enable = "neon,rcpc3")]
|
||||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(ldap1, LANE = 0))]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub unsafe fn vldap1q_lane_u64<const LANE: i32>(ptr: *const u64, src: uint64x2_t) -> uint64x2_t {
|
||||
static_assert_uimm_bits!(LANE, 1);
|
||||
transmute(vldap1q_lane_s64::<LANE>(ptr as *mut i64, transmute(src)))
|
||||
|
|
@ -12933,6 +12938,7 @@ pub unsafe fn vldap1q_lane_u64<const LANE: i32>(ptr: *const u64, src: uint64x2_t
|
|||
#[target_feature(enable = "neon,rcpc3")]
|
||||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(ldap1, LANE = 0))]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub unsafe fn vldap1_lane_p64<const LANE: i32>(ptr: *const p64, src: poly64x1_t) -> poly64x1_t {
|
||||
static_assert!(LANE == 0);
|
||||
transmute(vldap1_lane_s64::<LANE>(ptr as *mut i64, transmute(src)))
|
||||
|
|
@ -12946,6 +12952,7 @@ pub unsafe fn vldap1_lane_p64<const LANE: i32>(ptr: *const p64, src: poly64x1_t)
|
|||
#[target_feature(enable = "neon,rcpc3")]
|
||||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(ldap1, LANE = 0))]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub unsafe fn vldap1q_lane_p64<const LANE: i32>(ptr: *const p64, src: poly64x2_t) -> poly64x2_t {
|
||||
static_assert_uimm_bits!(LANE, 1);
|
||||
transmute(vldap1q_lane_s64::<LANE>(ptr as *mut i64, transmute(src)))
|
||||
|
|
@ -27122,6 +27129,7 @@ pub unsafe fn vst4q_u64(a: *mut u64, b: uint64x2x4_t) {
|
|||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(stl1, LANE = 0))]
|
||||
#[rustc_legacy_const_generics(2)]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub fn vstl1_lane_f64<const LANE: i32>(ptr: *mut f64, val: float64x1_t) {
|
||||
static_assert!(LANE == 0);
|
||||
unsafe { vstl1_lane_s64::<LANE>(ptr as *mut i64, transmute(val)) }
|
||||
|
|
@ -27133,6 +27141,7 @@ pub fn vstl1_lane_f64<const LANE: i32>(ptr: *mut f64, val: float64x1_t) {
|
|||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(stl1, LANE = 0))]
|
||||
#[rustc_legacy_const_generics(2)]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub fn vstl1q_lane_f64<const LANE: i32>(ptr: *mut f64, val: float64x2_t) {
|
||||
static_assert_uimm_bits!(LANE, 1);
|
||||
unsafe { vstl1q_lane_s64::<LANE>(ptr as *mut i64, transmute(val)) }
|
||||
|
|
@ -27144,6 +27153,7 @@ pub fn vstl1q_lane_f64<const LANE: i32>(ptr: *mut f64, val: float64x2_t) {
|
|||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(stl1, LANE = 0))]
|
||||
#[rustc_legacy_const_generics(2)]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub fn vstl1_lane_u64<const LANE: i32>(ptr: *mut u64, val: uint64x1_t) {
|
||||
static_assert!(LANE == 0);
|
||||
unsafe { vstl1_lane_s64::<LANE>(ptr as *mut i64, transmute(val)) }
|
||||
|
|
@ -27155,6 +27165,7 @@ pub fn vstl1_lane_u64<const LANE: i32>(ptr: *mut u64, val: uint64x1_t) {
|
|||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(stl1, LANE = 0))]
|
||||
#[rustc_legacy_const_generics(2)]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub fn vstl1q_lane_u64<const LANE: i32>(ptr: *mut u64, val: uint64x2_t) {
|
||||
static_assert_uimm_bits!(LANE, 1);
|
||||
unsafe { vstl1q_lane_s64::<LANE>(ptr as *mut i64, transmute(val)) }
|
||||
|
|
@ -27166,6 +27177,7 @@ pub fn vstl1q_lane_u64<const LANE: i32>(ptr: *mut u64, val: uint64x2_t) {
|
|||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(stl1, LANE = 0))]
|
||||
#[rustc_legacy_const_generics(2)]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub fn vstl1_lane_p64<const LANE: i32>(ptr: *mut p64, val: poly64x1_t) {
|
||||
static_assert!(LANE == 0);
|
||||
unsafe { vstl1_lane_s64::<LANE>(ptr as *mut i64, transmute(val)) }
|
||||
|
|
@ -27177,6 +27189,7 @@ pub fn vstl1_lane_p64<const LANE: i32>(ptr: *mut p64, val: poly64x1_t) {
|
|||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(stl1, LANE = 0))]
|
||||
#[rustc_legacy_const_generics(2)]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub fn vstl1q_lane_p64<const LANE: i32>(ptr: *mut p64, val: poly64x2_t) {
|
||||
static_assert_uimm_bits!(LANE, 1);
|
||||
unsafe { vstl1q_lane_s64::<LANE>(ptr as *mut i64, transmute(val)) }
|
||||
|
|
@ -27188,6 +27201,7 @@ pub fn vstl1q_lane_p64<const LANE: i32>(ptr: *mut p64, val: poly64x2_t) {
|
|||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(stl1, LANE = 0))]
|
||||
#[rustc_legacy_const_generics(2)]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub fn vstl1_lane_s64<const LANE: i32>(ptr: *mut i64, val: int64x1_t) {
|
||||
static_assert!(LANE == 0);
|
||||
let atomic_dst = ptr as *mut crate::sync::atomic::AtomicI64;
|
||||
|
|
@ -27203,6 +27217,7 @@ pub fn vstl1_lane_s64<const LANE: i32>(ptr: *mut i64, val: int64x1_t) {
|
|||
#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(stl1, LANE = 0))]
|
||||
#[rustc_legacy_const_generics(2)]
|
||||
#[unstable(feature = "stdarch_neon_feat_lrcpc3", issue = "none")]
|
||||
#[cfg(target_has_atomic = "64")]
|
||||
pub fn vstl1q_lane_s64<const LANE: i32>(ptr: *mut i64, val: int64x2_t) {
|
||||
static_assert_uimm_bits!(LANE, 1);
|
||||
let atomic_dst = ptr as *mut crate::sync::atomic::AtomicI64;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -12476,7 +12476,14 @@ pub unsafe fn _mm512_mask_cvtsepi16_storeu_epi8(mem_addr: *mut i8, k: __mmask32,
|
|||
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
|
||||
#[cfg_attr(test, assert_instr(vpmovswb))]
|
||||
pub unsafe fn _mm256_mask_cvtsepi16_storeu_epi8(mem_addr: *mut i8, k: __mmask16, a: __m256i) {
|
||||
vpmovswbmem256(mem_addr, a.as_i16x16(), k);
|
||||
let mask = simd_select_bitmask(k, i16x16::splat(!0), i16x16::ZERO);
|
||||
|
||||
let max = simd_splat(i16::from(i8::MAX));
|
||||
let min = simd_splat(i16::from(i8::MIN));
|
||||
|
||||
let v = simd_imax(simd_imin(a.as_i16x16(), max), min);
|
||||
let truncated: i8x16 = simd_cast(v);
|
||||
simd_masked_store!(SimdAlign::Unaligned, mask, mem_addr, truncated);
|
||||
}
|
||||
|
||||
/// Convert packed signed 16-bit integers in a to packed 8-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask k) to unaligned memory at base_addr.
|
||||
|
|
@ -12487,7 +12494,14 @@ pub unsafe fn _mm256_mask_cvtsepi16_storeu_epi8(mem_addr: *mut i8, k: __mmask16,
|
|||
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
|
||||
#[cfg_attr(test, assert_instr(vpmovswb))]
|
||||
pub unsafe fn _mm_mask_cvtsepi16_storeu_epi8(mem_addr: *mut i8, k: __mmask8, a: __m128i) {
|
||||
vpmovswbmem128(mem_addr, a.as_i16x8(), k);
|
||||
let mask = simd_select_bitmask(k, i16x8::splat(!0), i16x8::ZERO);
|
||||
|
||||
let max = simd_splat(i16::from(i8::MAX));
|
||||
let min = simd_splat(i16::from(i8::MIN));
|
||||
|
||||
let v = simd_imax(simd_imin(a.as_i16x8(), max), min);
|
||||
let truncated: i8x8 = simd_cast(v);
|
||||
simd_masked_store!(SimdAlign::Unaligned, mask, mem_addr, truncated);
|
||||
}
|
||||
|
||||
/// Convert packed 16-bit integers in a to packed 8-bit integers with truncation, and store the active results (those with their respective bit set in writemask k) to unaligned memory at base_addr.
|
||||
|
|
@ -12555,7 +12569,12 @@ pub unsafe fn _mm512_mask_cvtusepi16_storeu_epi8(mem_addr: *mut i8, k: __mmask32
|
|||
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
|
||||
#[cfg_attr(test, assert_instr(vpmovuswb))]
|
||||
pub unsafe fn _mm256_mask_cvtusepi16_storeu_epi8(mem_addr: *mut i8, k: __mmask16, a: __m256i) {
|
||||
vpmovuswbmem256(mem_addr, a.as_i16x16(), k);
|
||||
let mask = simd_select_bitmask(k, i16x16::splat(!0), i16x16::ZERO);
|
||||
let mem_addr = mem_addr.cast::<u8>();
|
||||
let max = simd_splat(u16::from(u8::MAX));
|
||||
|
||||
let truncated: u8x16 = simd_cast(simd_imin(a.as_u16x16(), max));
|
||||
simd_masked_store!(SimdAlign::Unaligned, mask, mem_addr, truncated);
|
||||
}
|
||||
|
||||
/// Convert packed unsigned 16-bit integers in a to packed unsigned 8-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask k) to unaligned memory at base_addr.
|
||||
|
|
@ -12566,7 +12585,15 @@ pub unsafe fn _mm256_mask_cvtusepi16_storeu_epi8(mem_addr: *mut i8, k: __mmask16
|
|||
#[stable(feature = "stdarch_x86_avx512", since = "1.89")]
|
||||
#[cfg_attr(test, assert_instr(vpmovuswb))]
|
||||
pub unsafe fn _mm_mask_cvtusepi16_storeu_epi8(mem_addr: *mut i8, k: __mmask8, a: __m128i) {
|
||||
vpmovuswbmem128(mem_addr, a.as_i16x8(), k);
|
||||
let mask = simd_select_bitmask(k, i16x8::splat(!0), i16x8::ZERO);
|
||||
let mem_addr = mem_addr.cast::<u8>();
|
||||
let max = simd_splat(u16::from(u8::MAX));
|
||||
|
||||
let v = a.as_u16x8();
|
||||
let v = simd_imin(v, max);
|
||||
|
||||
let truncated: u8x8 = simd_cast(v);
|
||||
simd_masked_store!(SimdAlign::Unaligned, mask, mem_addr, truncated);
|
||||
}
|
||||
|
||||
#[allow(improper_ctypes)]
|
||||
|
|
@ -12632,17 +12659,9 @@ unsafe extern "C" {
|
|||
|
||||
#[link_name = "llvm.x86.avx512.mask.pmovs.wb.mem.512"]
|
||||
fn vpmovswbmem(mem_addr: *mut i8, a: i16x32, mask: u32);
|
||||
#[link_name = "llvm.x86.avx512.mask.pmovs.wb.mem.256"]
|
||||
fn vpmovswbmem256(mem_addr: *mut i8, a: i16x16, mask: u16);
|
||||
#[link_name = "llvm.x86.avx512.mask.pmovs.wb.mem.128"]
|
||||
fn vpmovswbmem128(mem_addr: *mut i8, a: i16x8, mask: u8);
|
||||
|
||||
#[link_name = "llvm.x86.avx512.mask.pmovus.wb.mem.512"]
|
||||
fn vpmovuswbmem(mem_addr: *mut i8, a: i16x32, mask: u32);
|
||||
#[link_name = "llvm.x86.avx512.mask.pmovus.wb.mem.256"]
|
||||
fn vpmovuswbmem256(mem_addr: *mut i8, a: i16x16, mask: u16);
|
||||
#[link_name = "llvm.x86.avx512.mask.pmovus.wb.mem.128"]
|
||||
fn vpmovuswbmem128(mem_addr: *mut i8, a: i16x8, mask: u8);
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
|
|||
|
|
@ -70,6 +70,10 @@ aarch64-stable-jscvt: &aarch64-stable-jscvt
|
|||
neon-unstable-feat-lrcpc3: &neon-unstable-feat-lrcpc3
|
||||
FnCall: [unstable, ['feature = "stdarch_neon_feat_lrcpc3"', 'issue = "none"']]
|
||||
|
||||
# #[cfg(target_has_atomic = "64")]
|
||||
cfg-target-has-atomic-64: &cfg-target-has-atomic-64
|
||||
FnCall: [cfg, ['target_has_atomic = "64"']]
|
||||
|
||||
# #[unstable(feature = "stdarch_neon_fp8", issue = "none")]
|
||||
neon-unstable-fp8: &neon-unstable-fp8
|
||||
FnCall: [unstable, ['feature = "stdarch_neon_fp8"', 'issue = "none"']]
|
||||
|
|
@ -4418,6 +4422,7 @@ intrinsics:
|
|||
- FnCall: [cfg_attr, [{FnCall: [all, [test, {FnCall: [not, ['target_env= "msvc"']]}]]}, {FnCall: [assert_instr, [ldap1, 'LANE = 0']]}]]
|
||||
- FnCall: [rustc_legacy_const_generics, ["2"]]
|
||||
- *neon-unstable-feat-lrcpc3
|
||||
- *cfg-target-has-atomic-64
|
||||
types:
|
||||
- ['*const i64', int64x1_t, 'static_assert!', 'LANE == 0']
|
||||
- ['*const i64', int64x2_t,'static_assert_uimm_bits!', 'LANE, 1']
|
||||
|
|
@ -4448,6 +4453,7 @@ intrinsics:
|
|||
- FnCall: [target_feature, ['enable = "neon,rcpc3"']]
|
||||
- FnCall: [cfg_attr, [{FnCall: [all, [test, {FnCall: [not, ['target_env= "msvc"']]}]]}, {FnCall: [assert_instr, [ldap1, 'LANE = 0']]}]]
|
||||
- *neon-unstable-feat-lrcpc3
|
||||
- *cfg-target-has-atomic-64
|
||||
types:
|
||||
- ['*const u64', uint64x1_t,'static_assert!', 'LANE == 0','']
|
||||
#- ['*const f64', float64x1_t,'static_assert!', 'LANE == 0',''] # Fails due to bad IR gen from rust
|
||||
|
|
@ -4474,6 +4480,7 @@ intrinsics:
|
|||
- FnCall: [cfg_attr, [{FnCall: [all, [test, {FnCall: [not, ['target_env= "msvc"']]}]]}, {FnCall: [assert_instr, [stl1, 'LANE = 0']]}]]
|
||||
- FnCall: [rustc_legacy_const_generics, ["2"]]
|
||||
- *neon-unstable-feat-lrcpc3
|
||||
- *cfg-target-has-atomic-64
|
||||
types:
|
||||
- ['*mut i64', int64x1_t,'static_assert!', 'LANE == 0']
|
||||
- ['*mut i64', int64x2_t,'static_assert_uimm_bits!', 'LANE, 1']
|
||||
|
|
@ -4502,6 +4509,7 @@ intrinsics:
|
|||
- FnCall: [cfg_attr, [{FnCall: [all, [test, {FnCall: [not, ['target_env= "msvc"']]}]]}, {FnCall: [assert_instr, [stl1, 'LANE = 0']]}]]
|
||||
- FnCall: [rustc_legacy_const_generics, ["2"]]
|
||||
- *neon-unstable-feat-lrcpc3
|
||||
- *cfg-target-has-atomic-64
|
||||
types:
|
||||
- ['*mut u64', uint64x1_t, 'static_assert!', 'LANE == 0','']
|
||||
- ['*mut f64', float64x1_t,'static_assert!', 'LANE == 0','']
|
||||
|
|
|
|||
|
|
@ -2603,8 +2603,8 @@ intrinsics:
|
|||
return_type: "{neon_type[1]}"
|
||||
attr:
|
||||
- *neon-v7
|
||||
- FnCall: [cfg_attr, [*test-is-arm, {FnCall: [assert_instr, [vld1]]}]]
|
||||
- FnCall: [cfg_attr, [*neon-target-aarch64-arm64ec, {FnCall: [assert_instr, [ld1]]}]]
|
||||
- FnCall: [cfg_attr, [*test-is-arm, {FnCall: [assert_instr, [vld]]}]]
|
||||
- FnCall: [cfg_attr, [*neon-target-aarch64-arm64ec, {FnCall: [assert_instr, [ld]]}]]
|
||||
- *neon-not-arm-stable
|
||||
- *neon-cfg-arm-unstable
|
||||
safety:
|
||||
|
|
@ -2617,13 +2617,12 @@ intrinsics:
|
|||
- ["*const f32", float32x2x4_t]
|
||||
- ["*const f32", float32x4x4_t]
|
||||
compose:
|
||||
- LLVMLink:
|
||||
name: "vld1x{neon_type[1].tuple}.{neon_type[1]}"
|
||||
links:
|
||||
- link: "llvm.aarch64.neon.ld1x{neon_type[1].tuple}.v{neon_type[1].lane}f{neon_type[1].base}.p0"
|
||||
arch: aarch64,arm64ec
|
||||
- link: "llvm.arm.neon.vld1x{neon_type[1].tuple}.v{neon_type[1].lane}f{neon_type[1].base}.p0"
|
||||
arch: arm
|
||||
- FnCall:
|
||||
- 'crate::ptr::read_unaligned'
|
||||
- - MethodCall:
|
||||
- a
|
||||
- cast
|
||||
- []
|
||||
|
||||
- name: "vld1{neon_type[1].no}"
|
||||
doc: "Load multiple single-element structures to one, two, three, or four registers"
|
||||
|
|
@ -2631,8 +2630,8 @@ intrinsics:
|
|||
return_type: "{neon_type[1]}"
|
||||
attr:
|
||||
- *neon-v7
|
||||
- FnCall: [cfg_attr, [*test-is-arm, {FnCall: [assert_instr, [vld1]]}]]
|
||||
- FnCall: [cfg_attr, [*neon-target-aarch64-arm64ec, {FnCall: [assert_instr, [ld1]]}]]
|
||||
- FnCall: [cfg_attr, [*test-is-arm, {FnCall: [assert_instr, [vld]]}]]
|
||||
- FnCall: [cfg_attr, [*neon-target-aarch64-arm64ec, {FnCall: [assert_instr, [ld]]}]]
|
||||
- *neon-not-arm-stable
|
||||
- *neon-cfg-arm-unstable
|
||||
safety:
|
||||
|
|
@ -2663,13 +2662,12 @@ intrinsics:
|
|||
- ["*const i64", int64x2x3_t]
|
||||
- ["*const i64", int64x2x4_t]
|
||||
compose:
|
||||
- LLVMLink:
|
||||
name: "ld1x{neon_type[1].tuple}.{neon_type[1]}"
|
||||
links:
|
||||
- link: "llvm.aarch64.neon.ld1x{neon_type[1].tuple}.v{neon_type[1].lane}i{neon_type[1].base}.p0"
|
||||
arch: aarch64,arm64ec
|
||||
- link: "llvm.arm.neon.vld1x{neon_type[1].tuple}.v{neon_type[1].lane}i{neon_type[1].base}.p0"
|
||||
arch: arm
|
||||
- FnCall:
|
||||
- 'crate::ptr::read_unaligned'
|
||||
- - MethodCall:
|
||||
- a
|
||||
- cast
|
||||
- []
|
||||
|
||||
- name: "vld1{neon_type[1].no}"
|
||||
doc: "Load multiple single-element structures to one, two, three, or four registers"
|
||||
|
|
@ -2677,8 +2675,8 @@ intrinsics:
|
|||
return_type: "{neon_type[1]}"
|
||||
attr:
|
||||
- *neon-v7
|
||||
- FnCall: [cfg_attr, [*test-is-arm, {FnCall: [assert_instr, [vld1]]}]]
|
||||
- FnCall: [cfg_attr, [*neon-target-aarch64-arm64ec, {FnCall: [assert_instr, [ld1]]}]]
|
||||
- FnCall: [cfg_attr, [*test-is-arm, {FnCall: [assert_instr, [vld]]}]]
|
||||
- FnCall: [cfg_attr, [*neon-target-aarch64-arm64ec, {FnCall: [assert_instr, [ld]]}]]
|
||||
- *neon-not-arm-stable
|
||||
- *neon-cfg-arm-unstable
|
||||
big_endian_inverse: false
|
||||
|
|
@ -2723,12 +2721,11 @@ intrinsics:
|
|||
- ["*const p16", poly16x8x4_t, int16x8x4_t]
|
||||
compose:
|
||||
- FnCall:
|
||||
- transmute
|
||||
- - FnCall:
|
||||
- "vld1{neon_type[2].no}"
|
||||
- - FnCall:
|
||||
- transmute
|
||||
- - a
|
||||
- 'crate::ptr::read_unaligned'
|
||||
- - MethodCall:
|
||||
- a
|
||||
- cast
|
||||
- []
|
||||
|
||||
- name: "vld1{neon_type[1].no}"
|
||||
doc: "Load multiple single-element structures to one, two, three, or four registers"
|
||||
|
|
@ -2738,7 +2735,7 @@ intrinsics:
|
|||
- *neon-aes
|
||||
- *neon-v8
|
||||
- FnCall: [cfg_attr, [*test-is-arm, {FnCall: [assert_instr, [nop]]}]]
|
||||
- FnCall: [cfg_attr, [*neon-target-aarch64-arm64ec, {FnCall: [assert_instr, [ld1]]}]]
|
||||
- FnCall: [cfg_attr, [*neon-target-aarch64-arm64ec, {FnCall: [assert_instr, [ld]]}]]
|
||||
- *neon-not-arm-stable
|
||||
- *neon-cfg-arm-unstable
|
||||
big_endian_inverse: false
|
||||
|
|
@ -2752,12 +2749,11 @@ intrinsics:
|
|||
- ["*const p64", poly64x2x4_t, int64x2x4_t]
|
||||
compose:
|
||||
- FnCall:
|
||||
- transmute
|
||||
- - FnCall:
|
||||
- "vld1{neon_type[2].no}"
|
||||
- - FnCall:
|
||||
- transmute
|
||||
- - a
|
||||
- 'crate::ptr::read_unaligned'
|
||||
- - MethodCall:
|
||||
- a
|
||||
- cast
|
||||
- []
|
||||
|
||||
- name: "vld1{neon_type[1].no}"
|
||||
doc: "Load multiple single-element structures to one, two, three, or four registers"
|
||||
|
|
@ -2766,8 +2762,8 @@ intrinsics:
|
|||
attr:
|
||||
- *neon-aes
|
||||
- *neon-v8
|
||||
- FnCall: [cfg_attr, [*test-is-arm, {FnCall: [assert_instr, [vld1]]}]]
|
||||
- FnCall: [cfg_attr, [*neon-target-aarch64-arm64ec, {FnCall: [assert_instr, [ld1]]}]]
|
||||
- FnCall: [cfg_attr, [*test-is-arm, {FnCall: [assert_instr, [vld]]}]]
|
||||
- FnCall: [cfg_attr, [*neon-target-aarch64-arm64ec, {FnCall: [assert_instr, [ld]]}]]
|
||||
- *neon-not-arm-stable
|
||||
- *neon-cfg-arm-unstable
|
||||
safety:
|
||||
|
|
@ -2776,12 +2772,11 @@ intrinsics:
|
|||
- ["*const p64", poly64x1x2_t, int64x1x2_t]
|
||||
compose:
|
||||
- FnCall:
|
||||
- transmute
|
||||
- - FnCall:
|
||||
- "vld1{neon_type[2].no}"
|
||||
- - FnCall:
|
||||
- transmute
|
||||
- - a
|
||||
- 'crate::ptr::read_unaligned'
|
||||
- - MethodCall:
|
||||
- a
|
||||
- cast
|
||||
- []
|
||||
|
||||
- name: "vld1{neon_type[1].no}"
|
||||
doc: "Load multiple single-element structures to one, two, three, or four registers"
|
||||
|
|
@ -2790,7 +2785,7 @@ intrinsics:
|
|||
attr:
|
||||
- *neon-v7
|
||||
- FnCall: [cfg_attr, [*test-is-arm, {FnCall: [assert_instr, [vld1]]}]]
|
||||
- FnCall: [cfg_attr, [*neon-target-aarch64-arm64ec, {FnCall: [assert_instr, [ld1]]}]]
|
||||
- FnCall: [cfg_attr, [*neon-target-aarch64-arm64ec, {FnCall: [assert_instr, [ld]]}]]
|
||||
- *arm-fp16
|
||||
- *neon-unstable-f16
|
||||
- *target-not-arm64ec
|
||||
|
|
@ -2804,13 +2799,12 @@ intrinsics:
|
|||
- ["*const f16", float16x4x4_t]
|
||||
- ["*const f16", float16x8x4_t]
|
||||
compose:
|
||||
- LLVMLink:
|
||||
name: "vld1x{neon_type[1].tuple}.{neon_type[1]}"
|
||||
links:
|
||||
- link: "llvm.aarch64.neon.ld1x{neon_type[1].tuple}.v{neon_type[1].lane}f{neon_type[1].base}.p0"
|
||||
arch: aarch64,arm64ec
|
||||
- link: "llvm.arm.neon.vld1x{neon_type[1].tuple}.v{neon_type[1].lane}f{neon_type[1].base}.p0"
|
||||
arch: arm
|
||||
- FnCall:
|
||||
- 'crate::ptr::read_unaligned'
|
||||
- - MethodCall:
|
||||
- a
|
||||
- cast
|
||||
- []
|
||||
|
||||
- name: "vld1{type[2]}_{neon_type[1]}"
|
||||
doc: "Load one single-element structure to one lane of one register"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue