Skip to content
Open
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
72 changes: 0 additions & 72 deletions crates/core_arch/src/loongarch64/lasx/generated.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,22 +155,6 @@ unsafe extern "unadjusted" {
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.xvpickev.b"]
fn __lasx_xvpickev_b(a: __v32i8, b: __v32i8) -> __v32i8;
#[link_name = "llvm.loongarch.lasx.xvpickev.h"]
fn __lasx_xvpickev_h(a: __v16i16, b: __v16i16) -> __v16i16;
#[link_name = "llvm.loongarch.lasx.xvpickev.w"]
fn __lasx_xvpickev_w(a: __v8i32, b: __v8i32) -> __v8i32;
#[link_name = "llvm.loongarch.lasx.xvpickev.d"]
fn __lasx_xvpickev_d(a: __v4i64, b: __v4i64) -> __v4i64;
#[link_name = "llvm.loongarch.lasx.xvpickod.b"]
fn __lasx_xvpickod_b(a: __v32i8, b: __v32i8) -> __v32i8;
#[link_name = "llvm.loongarch.lasx.xvpickod.h"]
fn __lasx_xvpickod_h(a: __v16i16, b: __v16i16) -> __v16i16;
#[link_name = "llvm.loongarch.lasx.xvpickod.w"]
fn __lasx_xvpickod_w(a: __v8i32, b: __v8i32) -> __v8i32;
#[link_name = "llvm.loongarch.lasx.xvpickod.d"]
fn __lasx_xvpickod_d(a: __v4i64, b: __v4i64) -> __v4i64;
#[link_name = "llvm.loongarch.lasx.xvilvh.b"]
fn __lasx_xvilvh_b(a: __v32i8, b: __v32i8) -> __v32i8;
#[link_name = "llvm.loongarch.lasx.xvilvh.h"]
Expand Down Expand Up @@ -1653,62 +1637,6 @@ pub fn lasx_xvrepl128vei_d<const IMM1: u32>(a: m256i) -> m256i {
unsafe { transmute(__lasx_xvrepl128vei_d(transmute(a), IMM1)) }
}

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

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

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

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

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

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

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

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

#[inline]
#[target_feature(enable = "lasx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
Expand Down
70 changes: 70 additions & 0 deletions crates/core_arch/src/loongarch64/lasx/portable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,68 @@ use crate::core_arch::simd::{self as cs, *};
use crate::intrinsics::simd as is;
use crate::mem::transmute;

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

#[inline(always)]
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
const unsafe fn simd_pickev_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")]
const unsafe fn simd_pickev_w<T: Copy>(a: T, b: T) -> T {
simd_shuffle!(b, a, [0, 2, 8, 10, 4, 6, 12, 14])
}

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

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

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

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

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

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 Down Expand Up @@ -160,6 +222,14 @@ impl_vvv!("lasx", lasx_xvabsd_bu, ls::simd_absd, m256i, u8x32);
impl_vvv!("lasx", lasx_xvabsd_hu, ls::simd_absd, m256i, u16x16);
impl_vvv!("lasx", lasx_xvabsd_wu, ls::simd_absd, m256i, u32x8);
impl_vvv!("lasx", lasx_xvabsd_du, ls::simd_absd, m256i, u64x4);
impl_vvv!("lasx", lasx_xvpickev_b, simd_pickev_b, m256i, i8x32);
impl_vvv!("lasx", lasx_xvpickev_h, simd_pickev_h, m256i, i16x16);
impl_vvv!("lasx", lasx_xvpickev_w, simd_pickev_w, m256i, i32x8);
impl_vvv!("lasx", lasx_xvpickev_d, simd_pickev_d, m256i, i64x4);
impl_vvv!("lasx", lasx_xvpickod_b, simd_pickod_b, m256i, i8x32);
impl_vvv!("lasx", lasx_xvpickod_h, simd_pickod_h, m256i, i16x16);
impl_vvv!("lasx", lasx_xvpickod_w, simd_pickod_w, m256i, i32x8);
impl_vvv!("lasx", lasx_xvpickod_d, simd_pickod_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
72 changes: 0 additions & 72 deletions crates/core_arch/src/loongarch64/lsx/generated.rs
Original file line number Diff line number Diff line change
Expand Up @@ -163,22 +163,6 @@ unsafe extern "unadjusted" {
fn __lsx_vreplvei_w(a: __v4i32, b: u32) -> __v4i32;
#[link_name = "llvm.loongarch.lsx.vreplvei.d"]
fn __lsx_vreplvei_d(a: __v2i64, b: u32) -> __v2i64;
#[link_name = "llvm.loongarch.lsx.vpickev.b"]
fn __lsx_vpickev_b(a: __v16i8, b: __v16i8) -> __v16i8;
#[link_name = "llvm.loongarch.lsx.vpickev.h"]
fn __lsx_vpickev_h(a: __v8i16, b: __v8i16) -> __v8i16;
#[link_name = "llvm.loongarch.lsx.vpickev.w"]
fn __lsx_vpickev_w(a: __v4i32, b: __v4i32) -> __v4i32;
#[link_name = "llvm.loongarch.lsx.vpickev.d"]
fn __lsx_vpickev_d(a: __v2i64, b: __v2i64) -> __v2i64;
#[link_name = "llvm.loongarch.lsx.vpickod.b"]
fn __lsx_vpickod_b(a: __v16i8, b: __v16i8) -> __v16i8;
#[link_name = "llvm.loongarch.lsx.vpickod.h"]
fn __lsx_vpickod_h(a: __v8i16, b: __v8i16) -> __v8i16;
#[link_name = "llvm.loongarch.lsx.vpickod.w"]
fn __lsx_vpickod_w(a: __v4i32, b: __v4i32) -> __v4i32;
#[link_name = "llvm.loongarch.lsx.vpickod.d"]
fn __lsx_vpickod_d(a: __v2i64, b: __v2i64) -> __v2i64;
#[link_name = "llvm.loongarch.lsx.vilvh.b"]
fn __lsx_vilvh_b(a: __v16i8, b: __v16i8) -> __v16i8;
#[link_name = "llvm.loongarch.lsx.vilvh.h"]
Expand Down Expand Up @@ -1593,62 +1577,6 @@ pub fn lsx_vreplvei_d<const IMM1: u32>(a: m128i) -> m128i {
unsafe { transmute(__lsx_vreplvei_d(transmute(a), IMM1)) }
}

#[inline]
#[target_feature(enable = "lsx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lsx_vpickev_b(a: m128i, b: m128i) -> m128i {
unsafe { transmute(__lsx_vpickev_b(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lsx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lsx_vpickev_h(a: m128i, b: m128i) -> m128i {
unsafe { transmute(__lsx_vpickev_h(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lsx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lsx_vpickev_w(a: m128i, b: m128i) -> m128i {
unsafe { transmute(__lsx_vpickev_w(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lsx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lsx_vpickev_d(a: m128i, b: m128i) -> m128i {
unsafe { transmute(__lsx_vpickev_d(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lsx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lsx_vpickod_b(a: m128i, b: m128i) -> m128i {
unsafe { transmute(__lsx_vpickod_b(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lsx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lsx_vpickod_h(a: m128i, b: m128i) -> m128i {
unsafe { transmute(__lsx_vpickod_h(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lsx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lsx_vpickod_w(a: m128i, b: m128i) -> m128i {
unsafe { transmute(__lsx_vpickod_w(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lsx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
pub fn lsx_vpickod_d(a: m128i, b: m128i) -> m128i {
unsafe { transmute(__lsx_vpickod_d(transmute(a), transmute(b))) }
}

#[inline]
#[target_feature(enable = "lsx")]
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
Expand Down
56 changes: 56 additions & 0 deletions crates/core_arch/src/loongarch64/lsx/portable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,54 @@ use crate::core_arch::simd::{self as cs, *};
use crate::intrinsics::simd as is;
use crate::mem::transmute;

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

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

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

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

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

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

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

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

impl_vv!("lsx", lsx_vpcnt_b, is::simd_ctpop, m128i, i8x16);
impl_vv!("lsx", lsx_vpcnt_h, is::simd_ctpop, m128i, i16x8);
impl_vv!("lsx", lsx_vpcnt_w, is::simd_ctpop, m128i, i32x4);
Expand Down Expand Up @@ -160,6 +208,14 @@ impl_vvv!("lsx", lsx_vabsd_bu, ls::simd_absd, m128i, u8x16);
impl_vvv!("lsx", lsx_vabsd_hu, ls::simd_absd, m128i, u16x8);
impl_vvv!("lsx", lsx_vabsd_wu, ls::simd_absd, m128i, u32x4);
impl_vvv!("lsx", lsx_vabsd_du, ls::simd_absd, m128i, u64x2);
impl_vvv!("lsx", lsx_vpickev_b, simd_pickev_b, m128i, i8x16);
impl_vvv!("lsx", lsx_vpickev_h, simd_pickev_h, m128i, i16x8);
impl_vvv!("lsx", lsx_vpickev_w, simd_pickev_w, m128i, i32x4);
impl_vvv!("lsx", lsx_vpickev_d, simd_pickev_d, m128i, i64x2);
impl_vvv!("lsx", lsx_vpickod_b, simd_pickod_b, m128i, i8x16);
impl_vvv!("lsx", lsx_vpickod_h, simd_pickod_h, m128i, i16x8);
impl_vvv!("lsx", lsx_vpickod_w, simd_pickod_w, m128i, i32x4);
impl_vvv!("lsx", lsx_vpickod_d, simd_pickod_d, m128i, i64x2);

impl_vuv!("lsx", lsx_vslli_b, is::simd_shl, m128i, i8x16);
impl_vuv!("lsx", lsx_vslli_h, is::simd_shl, m128i, i16x8);
Expand Down
8 changes: 8 additions & 0 deletions crates/stdarch-gen-loongarch/lasx.spec
Original file line number Diff line number Diff line change
Expand Up @@ -1420,41 +1420,49 @@ asm-fmts = xd, xj, ui1
data-types = V4DI, V4DI, UQI

/// lasx_xvpickev_b
impl = portable
name = lasx_xvpickev_b
asm-fmts = xd, xj, xk
data-types = V32QI, V32QI, V32QI

/// lasx_xvpickev_h
impl = portable
name = lasx_xvpickev_h
asm-fmts = xd, xj, xk
data-types = V16HI, V16HI, V16HI

/// lasx_xvpickev_w
impl = portable
name = lasx_xvpickev_w
asm-fmts = xd, xj, xk
data-types = V8SI, V8SI, V8SI

/// lasx_xvpickev_d
impl = portable
name = lasx_xvpickev_d
asm-fmts = xd, xj, xk
data-types = V4DI, V4DI, V4DI

/// lasx_xvpickod_b
impl = portable
name = lasx_xvpickod_b
asm-fmts = xd, xj, xk
data-types = V32QI, V32QI, V32QI

/// lasx_xvpickod_h
impl = portable
name = lasx_xvpickod_h
asm-fmts = xd, xj, xk
data-types = V16HI, V16HI, V16HI

/// lasx_xvpickod_w
impl = portable
name = lasx_xvpickod_w
asm-fmts = xd, xj, xk
data-types = V8SI, V8SI, V8SI

/// lasx_xvpickod_d
impl = portable
name = lasx_xvpickod_d
asm-fmts = xd, xj, xk
data-types = V4DI, V4DI, V4DI
Expand Down
Loading
Loading