Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 0 additions & 161 deletions crates/core_arch/src/loongarch64/lasx/generated.rs
Original file line number Diff line number Diff line change
Expand Up @@ -147,30 +147,6 @@ unsafe extern "unadjusted" {
fn __lasx_xvhsubw_wu_hu(a: __v16u16, b: __v16u16) -> __v8i32;
#[link_name = "llvm.loongarch.lasx.xvhsubw.du.wu"]
fn __lasx_xvhsubw_du_wu(a: __v8u32, b: __v8u32) -> __v4i64;
#[link_name = "llvm.loongarch.lasx.xvrepl128vei.b"]
fn __lasx_xvrepl128vei_b(a: __v32i8, b: u32) -> __v32i8;
#[link_name = "llvm.loongarch.lasx.xvrepl128vei.h"]
fn __lasx_xvrepl128vei_h(a: __v16i16, b: u32) -> __v16i16;
#[link_name = "llvm.loongarch.lasx.xvrepl128vei.w"]
fn __lasx_xvrepl128vei_w(a: __v8i32, b: u32) -> __v8i32;
#[link_name = "llvm.loongarch.lasx.xvrepl128vei.d"]
fn __lasx_xvrepl128vei_d(a: __v4i64, b: u32) -> __v4i64;
#[link_name = "llvm.loongarch.lasx.xvpackev.b"]
fn __lasx_xvpackev_b(a: __v32i8, b: __v32i8) -> __v32i8;
#[link_name = "llvm.loongarch.lasx.xvpackev.h"]
fn __lasx_xvpackev_h(a: __v16i16, b: __v16i16) -> __v16i16;
#[link_name = "llvm.loongarch.lasx.xvpackev.w"]
fn __lasx_xvpackev_w(a: __v8i32, b: __v8i32) -> __v8i32;
#[link_name = "llvm.loongarch.lasx.xvpackev.d"]
fn __lasx_xvpackev_d(a: __v4i64, b: __v4i64) -> __v4i64;
#[link_name = "llvm.loongarch.lasx.xvpackod.b"]
fn __lasx_xvpackod_b(a: __v32i8, b: __v32i8) -> __v32i8;
#[link_name = "llvm.loongarch.lasx.xvpackod.h"]
fn __lasx_xvpackod_h(a: __v16i16, b: __v16i16) -> __v16i16;
#[link_name = "llvm.loongarch.lasx.xvpackod.w"]
fn __lasx_xvpackod_w(a: __v8i32, b: __v8i32) -> __v8i32;
#[link_name = "llvm.loongarch.lasx.xvpackod.d"]
fn __lasx_xvpackod_d(a: __v4i64, b: __v4i64) -> __v4i64;
#[link_name = "llvm.loongarch.lasx.xvshuf.b"]
fn __lasx_xvshuf_b(a: __v32i8, b: __v32i8, c: __v32i8) -> __v32i8;
#[link_name = "llvm.loongarch.lasx.xvshuf.h"]
Expand Down Expand Up @@ -525,16 +501,6 @@ unsafe extern "unadjusted" {
fn __lasx_xvstx(a: __v32i8, b: *mut i8, c: i64);
#[link_name = "llvm.loongarch.lasx.xvextl.qu.du"]
fn __lasx_xvextl_qu_du(a: __v4u64) -> __v4u64;
#[link_name = "llvm.loongarch.lasx.xvreplve0.b"]
fn __lasx_xvreplve0_b(a: __v32i8) -> __v32i8;
#[link_name = "llvm.loongarch.lasx.xvreplve0.h"]
fn __lasx_xvreplve0_h(a: __v16i16) -> __v16i16;
#[link_name = "llvm.loongarch.lasx.xvreplve0.w"]
fn __lasx_xvreplve0_w(a: __v8i32) -> __v8i32;
#[link_name = "llvm.loongarch.lasx.xvreplve0.d"]
fn __lasx_xvreplve0_d(a: __v4i64) -> __v4i64;
#[link_name = "llvm.loongarch.lasx.xvreplve0.q"]
fn __lasx_xvreplve0_q(a: __v32i8) -> __v32i8;
#[link_name = "llvm.loongarch.lasx.vext2xv.h.b"]
fn __lasx_vext2xv_h_b(a: __v32i8) -> __v16i16;
#[link_name = "llvm.loongarch.lasx.vext2xv.w.h"]
Expand Down Expand Up @@ -1585,98 +1551,6 @@ pub fn lasx_xvhsubw_du_wu(a: m256i, b: m256i) -> m256i {
unsafe { transmute(__lasx_xvhsubw_du_wu(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[rustc_legacy_const_generics(1)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvrepl128vei_b<const IMM4: u32>(a: m256i) -> m256i {
static_assert_uimm_bits!(IMM4, 4);
unsafe { transmute(__lasx_xvrepl128vei_b(transmute(a), IMM4)) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[rustc_legacy_const_generics(1)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvrepl128vei_h<const IMM3: u32>(a: m256i) -> m256i {
static_assert_uimm_bits!(IMM3, 3);
unsafe { transmute(__lasx_xvrepl128vei_h(transmute(a), IMM3)) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[rustc_legacy_const_generics(1)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvrepl128vei_w<const IMM2: u32>(a: m256i) -> m256i {
static_assert_uimm_bits!(IMM2, 2);
unsafe { transmute(__lasx_xvrepl128vei_w(transmute(a), IMM2)) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[rustc_legacy_const_generics(1)]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvrepl128vei_d<const IMM1: u32>(a: m256i) -> m256i {
static_assert_uimm_bits!(IMM1, 1);
unsafe { transmute(__lasx_xvrepl128vei_d(transmute(a), IMM1)) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvpackev_b(a: m256i, b: m256i) -> m256i {
unsafe { transmute(__lasx_xvpackev_b(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvpackev_h(a: m256i, b: m256i) -> m256i {
unsafe { transmute(__lasx_xvpackev_h(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvpackev_w(a: m256i, b: m256i) -> m256i {
unsafe { transmute(__lasx_xvpackev_w(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvpackev_d(a: m256i, b: m256i) -> m256i {
unsafe { transmute(__lasx_xvpackev_d(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvpackod_b(a: m256i, b: m256i) -> m256i {
unsafe { transmute(__lasx_xvpackod_b(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvpackod_h(a: m256i, b: m256i) -> m256i {
unsafe { transmute(__lasx_xvpackod_h(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvpackod_w(a: m256i, b: m256i) -> m256i {
unsafe { transmute(__lasx_xvpackod_w(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvpackod_d(a: m256i, b: m256i) -> m256i {
unsafe { transmute(__lasx_xvpackod_d(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
Expand Down Expand Up @@ -2990,41 +2864,6 @@ pub fn lasx_xvextl_qu_du(a: m256i) -> m256i {
unsafe { transmute(__lasx_xvextl_qu_du(transmute(a))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvreplve0_b(a: m256i) -> m256i {
unsafe { transmute(__lasx_xvreplve0_b(transmute(a))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvreplve0_h(a: m256i) -> m256i {
unsafe { transmute(__lasx_xvreplve0_h(transmute(a))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvreplve0_w(a: m256i) -> m256i {
unsafe { transmute(__lasx_xvreplve0_w(transmute(a))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvreplve0_d(a: m256i) -> m256i {
unsafe { transmute(__lasx_xvreplve0_d(transmute(a))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lasx_xvreplve0_q(a: m256i) -> m256i {
unsafe { transmute(__lasx_xvreplve0_q(transmute(a))) }
}

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
Expand Down
155 changes: 155 additions & 0 deletions crates/core_arch/src/loongarch64/lasx/portable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,144 @@ pub(crate) const unsafe fn simd_ilvl_d<T: Copy>(a: T, b: T) -> T {
simd_shuffle!(b, a, [0, 4, 2, 6])
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(crate) const unsafe fn simd_replvei_b<const I: u32, T: Copy>(a: T) -> T {
simd_shuffle!(
a,
a,
[
I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
I + 16, I + 16, I + 16, I + 16, I + 16, I + 16, I + 16, I + 16,
I + 16, I + 16, I + 16, I + 16, I + 16, I + 16, I + 16, I + 16
]
)
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(crate) const unsafe fn simd_replvei_h<const I: u32, T: Copy>(a: T) -> T {
simd_shuffle!(
a,
a,
[
I, I, I, I, I, I, I, I,
I + 8, I + 8, I + 8, I + 8, I + 8, I + 8, I + 8, I + 8
]
)
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(crate) const unsafe fn simd_replvei_w<const I: u32, T: Copy>(a: T) -> T {
simd_shuffle!(a, a, [I, I, I, I, I + 4, I + 4, I + 4, I + 4])
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(crate) const unsafe fn simd_replvei_d<const I: u32, T: Copy>(a: T) -> T {
simd_shuffle!(a, a, [I, I, I + 2, I + 2])
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(super) const unsafe fn simd_replve0_b<T: Copy>(a: T) -> T {
simd_shuffle!(
a,
a,
[
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
]
)
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(super) const unsafe fn simd_replve0_h<T: Copy>(a: T) -> T {
simd_shuffle!(a, a, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(super) const unsafe fn simd_replve0_w<T: Copy>(a: T) -> T {
simd_shuffle!(a, a, [0, 0, 0, 0, 0, 0, 0, 0])
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(super) const unsafe fn simd_replve0_d<T: Copy>(a: T) -> T {
simd_shuffle!(a, a, [0, 0, 0, 0])
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(super) const unsafe fn simd_replve0_q<T: Copy>(a: T) -> T {
simd_shuffle!(a, a, [0, 1, 0, 1])
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(crate) const unsafe fn simd_packev_b<T: Copy>(a: T, b: T) -> T {
simd_shuffle!(
b,
a,
[
0, 32, 2, 34, 4, 36, 6, 38, 8, 40, 10, 42, 12, 44, 14, 46,
16, 48, 18, 50, 20, 52, 22, 54, 24, 56, 26, 58, 28, 60, 30, 62
]
)
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(crate) const unsafe fn simd_packev_h<T: Copy>(a: T, b: T) -> T {
simd_shuffle!(b, a, [0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30])
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(crate) const unsafe fn simd_packev_w<T: Copy>(a: T, b: T) -> T {
simd_shuffle!(b, a, [0, 8, 2, 10, 4, 12, 6, 14])
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(crate) const unsafe fn simd_packev_d<T: Copy>(a: T, b: T) -> T {
simd_shuffle!(b, a, [0, 4, 2, 6])
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(crate) const unsafe fn simd_packod_b<T: Copy>(a: T, b: T) -> T {
simd_shuffle!(
b,
a,
[
1, 33, 3, 35, 5, 37, 7, 39, 9, 41, 11, 43, 13, 45, 15, 47,
17, 49, 19, 51, 21, 53, 23, 55, 25, 57, 27, 59, 29, 61, 31, 63
]
)
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(crate) const unsafe fn simd_packod_h<T: Copy>(a: T, b: T) -> T {
simd_shuffle!(b, a, [1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31])
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(crate) const unsafe fn simd_packod_w<T: Copy>(a: T, b: T) -> T {
simd_shuffle!(b, a, [1, 9, 3, 11, 5, 13, 7, 15])
}

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
pub(crate) const unsafe fn simd_packod_d<T: Copy>(a: T, b: T) -> T {
simd_shuffle!(b, a, [1, 5, 3, 7])
}

impl_vv!("lasx", lasx_xvpcnt_b, is::simd_ctpop, m256i, i8x32);
impl_vv!("lasx", lasx_xvpcnt_h, is::simd_ctpop, m256i, i16x16);
impl_vv!("lasx", lasx_xvpcnt_w, is::simd_ctpop, m256i, i32x8);
Expand All @@ -143,6 +281,11 @@ impl_vv!("lasx", lasx_xvneg_w, is::simd_neg, m256i, i32x8);
impl_vv!("lasx", lasx_xvneg_d, is::simd_neg, m256i, i64x4);
impl_vv!("lasx", lasx_xvfsqrt_s, is::simd_fsqrt, m256, f32x8);
impl_vv!("lasx", lasx_xvfsqrt_d, is::simd_fsqrt, m256d, f64x4);
impl_vv!("lasx", lasx_xvreplve0_b, simd_replve0_b, m256i, i8x32);
impl_vv!("lasx", lasx_xvreplve0_h, simd_replve0_h, m256i, i16x16);
impl_vv!("lasx", lasx_xvreplve0_w, simd_replve0_w, m256i, i32x8);
impl_vv!("lasx", lasx_xvreplve0_d, simd_replve0_d, m256i, i64x4);
impl_vv!("lasx", lasx_xvreplve0_q, simd_replve0_q, m256i, i64x4);

impl_gv!("lasx", lasx_xvreplgr2vr_b, ls::simd_splat, m256i, i8x32, i32);
impl_gv!("lasx", lasx_xvreplgr2vr_h, ls::simd_splat, m256i, i16x16, i32);
Expand Down Expand Up @@ -300,6 +443,14 @@ impl_vvv!("lasx", lasx_xvilvl_b, simd_ilvl_b, m256i, i8x32);
impl_vvv!("lasx", lasx_xvilvl_h, simd_ilvl_h, m256i, i16x16);
impl_vvv!("lasx", lasx_xvilvl_w, simd_ilvl_w, m256i, i32x8);
impl_vvv!("lasx", lasx_xvilvl_d, simd_ilvl_d, m256i, i64x4);
impl_vvv!("lasx", lasx_xvpackev_b, simd_packev_b, m256i, i8x32);
impl_vvv!("lasx", lasx_xvpackev_h, simd_packev_h, m256i, i16x16);
impl_vvv!("lasx", lasx_xvpackev_w, simd_packev_w, m256i, i32x8);
impl_vvv!("lasx", lasx_xvpackev_d, simd_packev_d, m256i, i64x4);
impl_vvv!("lasx", lasx_xvpackod_b, simd_packod_b, m256i, i8x32);
impl_vvv!("lasx", lasx_xvpackod_h, simd_packod_h, m256i, i16x16);
impl_vvv!("lasx", lasx_xvpackod_w, simd_packod_w, m256i, i32x8);
impl_vvv!("lasx", lasx_xvpackod_d, simd_packod_d, m256i, i64x4);

impl_vuv!("lasx", lasx_xvslli_b, is::simd_shl, m256i, i8x32);
impl_vuv!("lasx", lasx_xvslli_h, is::simd_shl, m256i, i16x16);
Expand Down Expand Up @@ -333,6 +484,10 @@ impl_vuv!("lasx", lasx_xvmini_bu, cs::simd_imin, m256i, u8x32, 5);
impl_vuv!("lasx", lasx_xvmini_hu, cs::simd_imin, m256i, u16x16, 5);
impl_vuv!("lasx", lasx_xvmini_wu, cs::simd_imin, m256i, u32x8, 5);
impl_vuv!("lasx", lasx_xvmini_du, cs::simd_imin, m256i, u64x4, 5);
impl_vuv!("lasx", lasx_xvrepl128vei_b, simd_replvei_b, m256i, i8x32, 4, const);
impl_vuv!("lasx", lasx_xvrepl128vei_h, simd_replvei_h, m256i, i16x16, 3, const);
impl_vuv!("lasx", lasx_xvrepl128vei_w, simd_replvei_w, m256i, i32x8, 2, const);
impl_vuv!("lasx", lasx_xvrepl128vei_d, simd_replvei_d, m256i, i64x4, 1, const);

impl_vug!("lasx", lasx_xvpickve2gr_w, is::simd_extract, m256i, i32x8, i32, 3);
impl_vug!("lasx", lasx_xvpickve2gr_d, is::simd_extract, m256i, i64x4, i64, 2);
Expand Down
Loading
Loading