mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-31 13:40:15 +03:00
loongarch: Use intrinsics::simd for vabsd
This commit is contained in:
@@ -123,22 +123,6 @@
|
||||
fn __lasx_xvavgr_wu(a: __v8u32, b: __v8u32) -> __v8u32;
|
||||
#[link_name = "llvm.loongarch.lasx.xvavgr.du"]
|
||||
fn __lasx_xvavgr_du(a: __v4u64, b: __v4u64) -> __v4u64;
|
||||
#[link_name = "llvm.loongarch.lasx.xvabsd.b"]
|
||||
fn __lasx_xvabsd_b(a: __v32i8, b: __v32i8) -> __v32i8;
|
||||
#[link_name = "llvm.loongarch.lasx.xvabsd.h"]
|
||||
fn __lasx_xvabsd_h(a: __v16i16, b: __v16i16) -> __v16i16;
|
||||
#[link_name = "llvm.loongarch.lasx.xvabsd.w"]
|
||||
fn __lasx_xvabsd_w(a: __v8i32, b: __v8i32) -> __v8i32;
|
||||
#[link_name = "llvm.loongarch.lasx.xvabsd.d"]
|
||||
fn __lasx_xvabsd_d(a: __v4i64, b: __v4i64) -> __v4i64;
|
||||
#[link_name = "llvm.loongarch.lasx.xvabsd.bu"]
|
||||
fn __lasx_xvabsd_bu(a: __v32u8, b: __v32u8) -> __v32u8;
|
||||
#[link_name = "llvm.loongarch.lasx.xvabsd.hu"]
|
||||
fn __lasx_xvabsd_hu(a: __v16u16, b: __v16u16) -> __v16u16;
|
||||
#[link_name = "llvm.loongarch.lasx.xvabsd.wu"]
|
||||
fn __lasx_xvabsd_wu(a: __v8u32, b: __v8u32) -> __v8u32;
|
||||
#[link_name = "llvm.loongarch.lasx.xvabsd.du"]
|
||||
fn __lasx_xvabsd_du(a: __v4u64, b: __v4u64) -> __v4u64;
|
||||
#[link_name = "llvm.loongarch.lasx.xvhaddw.h.b"]
|
||||
fn __lasx_xvhaddw_h_b(a: __v32i8, b: __v32i8) -> __v16i16;
|
||||
#[link_name = "llvm.loongarch.lasx.xvhaddw.w.h"]
|
||||
@@ -1549,62 +1533,6 @@ pub fn lasx_xvavgr_du(a: m256i, b: m256i) -> m256i {
|
||||
unsafe { transmute(__lasx_xvavgr_du(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lasx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lasx_xvabsd_b(a: m256i, b: m256i) -> m256i {
|
||||
unsafe { transmute(__lasx_xvabsd_b(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lasx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lasx_xvabsd_h(a: m256i, b: m256i) -> m256i {
|
||||
unsafe { transmute(__lasx_xvabsd_h(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lasx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lasx_xvabsd_w(a: m256i, b: m256i) -> m256i {
|
||||
unsafe { transmute(__lasx_xvabsd_w(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lasx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lasx_xvabsd_d(a: m256i, b: m256i) -> m256i {
|
||||
unsafe { transmute(__lasx_xvabsd_d(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lasx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lasx_xvabsd_bu(a: m256i, b: m256i) -> m256i {
|
||||
unsafe { transmute(__lasx_xvabsd_bu(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lasx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lasx_xvabsd_hu(a: m256i, b: m256i) -> m256i {
|
||||
unsafe { transmute(__lasx_xvabsd_hu(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lasx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lasx_xvabsd_wu(a: m256i, b: m256i) -> m256i {
|
||||
unsafe { transmute(__lasx_xvabsd_wu(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lasx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lasx_xvabsd_du(a: m256i, b: m256i) -> m256i {
|
||||
unsafe { transmute(__lasx_xvabsd_du(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lasx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
|
||||
@@ -152,6 +152,14 @@
|
||||
impl_vvv!("lasx", lasx_xvadda_h, ls::simd_adda, m256i, i16x16);
|
||||
impl_vvv!("lasx", lasx_xvadda_w, ls::simd_adda, m256i, i32x8);
|
||||
impl_vvv!("lasx", lasx_xvadda_d, ls::simd_adda, m256i, i64x4);
|
||||
impl_vvv!("lasx", lasx_xvabsd_b, ls::simd_absd, m256i, i8x32);
|
||||
impl_vvv!("lasx", lasx_xvabsd_h, ls::simd_absd, m256i, i16x16);
|
||||
impl_vvv!("lasx", lasx_xvabsd_w, ls::simd_absd, m256i, i32x8);
|
||||
impl_vvv!("lasx", lasx_xvabsd_d, ls::simd_absd, m256i, i64x4);
|
||||
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_vuv!("lasx", lasx_xvslli_b, is::simd_shl, m256i, i8x32);
|
||||
impl_vuv!("lasx", lasx_xvslli_h, is::simd_shl, m256i, i16x16);
|
||||
|
||||
@@ -123,22 +123,6 @@
|
||||
fn __lsx_vavgr_wu(a: __v4u32, b: __v4u32) -> __v4u32;
|
||||
#[link_name = "llvm.loongarch.lsx.vavgr.du"]
|
||||
fn __lsx_vavgr_du(a: __v2u64, b: __v2u64) -> __v2u64;
|
||||
#[link_name = "llvm.loongarch.lsx.vabsd.b"]
|
||||
fn __lsx_vabsd_b(a: __v16i8, b: __v16i8) -> __v16i8;
|
||||
#[link_name = "llvm.loongarch.lsx.vabsd.h"]
|
||||
fn __lsx_vabsd_h(a: __v8i16, b: __v8i16) -> __v8i16;
|
||||
#[link_name = "llvm.loongarch.lsx.vabsd.w"]
|
||||
fn __lsx_vabsd_w(a: __v4i32, b: __v4i32) -> __v4i32;
|
||||
#[link_name = "llvm.loongarch.lsx.vabsd.d"]
|
||||
fn __lsx_vabsd_d(a: __v2i64, b: __v2i64) -> __v2i64;
|
||||
#[link_name = "llvm.loongarch.lsx.vabsd.bu"]
|
||||
fn __lsx_vabsd_bu(a: __v16u8, b: __v16u8) -> __v16u8;
|
||||
#[link_name = "llvm.loongarch.lsx.vabsd.hu"]
|
||||
fn __lsx_vabsd_hu(a: __v8u16, b: __v8u16) -> __v8u16;
|
||||
#[link_name = "llvm.loongarch.lsx.vabsd.wu"]
|
||||
fn __lsx_vabsd_wu(a: __v4u32, b: __v4u32) -> __v4u32;
|
||||
#[link_name = "llvm.loongarch.lsx.vabsd.du"]
|
||||
fn __lsx_vabsd_du(a: __v2u64, b: __v2u64) -> __v2u64;
|
||||
#[link_name = "llvm.loongarch.lsx.vhaddw.h.b"]
|
||||
fn __lsx_vhaddw_h_b(a: __v16i8, b: __v16i8) -> __v8i16;
|
||||
#[link_name = "llvm.loongarch.lsx.vhaddw.w.h"]
|
||||
@@ -1461,62 +1445,6 @@ pub fn lsx_vavgr_du(a: m128i, b: m128i) -> m128i {
|
||||
unsafe { transmute(__lsx_vavgr_du(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lsx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lsx_vabsd_b(a: m128i, b: m128i) -> m128i {
|
||||
unsafe { transmute(__lsx_vabsd_b(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lsx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lsx_vabsd_h(a: m128i, b: m128i) -> m128i {
|
||||
unsafe { transmute(__lsx_vabsd_h(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lsx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lsx_vabsd_w(a: m128i, b: m128i) -> m128i {
|
||||
unsafe { transmute(__lsx_vabsd_w(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lsx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lsx_vabsd_d(a: m128i, b: m128i) -> m128i {
|
||||
unsafe { transmute(__lsx_vabsd_d(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lsx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lsx_vabsd_bu(a: m128i, b: m128i) -> m128i {
|
||||
unsafe { transmute(__lsx_vabsd_bu(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lsx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lsx_vabsd_hu(a: m128i, b: m128i) -> m128i {
|
||||
unsafe { transmute(__lsx_vabsd_hu(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lsx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lsx_vabsd_wu(a: m128i, b: m128i) -> m128i {
|
||||
unsafe { transmute(__lsx_vabsd_wu(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lsx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
pub fn lsx_vabsd_du(a: m128i, b: m128i) -> m128i {
|
||||
unsafe { transmute(__lsx_vabsd_du(transmute(a), transmute(b))) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
#[target_feature(enable = "lsx")]
|
||||
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
|
||||
|
||||
@@ -152,6 +152,14 @@
|
||||
impl_vvv!("lsx", lsx_vadda_h, ls::simd_adda, m128i, i16x8);
|
||||
impl_vvv!("lsx", lsx_vadda_w, ls::simd_adda, m128i, i32x4);
|
||||
impl_vvv!("lsx", lsx_vadda_d, ls::simd_adda, m128i, i64x2);
|
||||
impl_vvv!("lsx", lsx_vabsd_b, ls::simd_absd, m128i, i8x16);
|
||||
impl_vvv!("lsx", lsx_vabsd_h, ls::simd_absd, m128i, i16x8);
|
||||
impl_vvv!("lsx", lsx_vabsd_w, ls::simd_absd, m128i, i32x4);
|
||||
impl_vvv!("lsx", lsx_vabsd_d, ls::simd_absd, m128i, i64x2);
|
||||
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_vuv!("lsx", lsx_vslli_b, is::simd_shl, m128i, i8x16);
|
||||
impl_vuv!("lsx", lsx_vslli_h, is::simd_shl, m128i, i16x8);
|
||||
|
||||
@@ -52,6 +52,13 @@ unsafe fn splat(v: i64) -> Self {
|
||||
is::simd_select(m, is::simd_neg(a), a)
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
|
||||
pub(crate) const unsafe fn simd_absd<T: Copy>(a: T, b: T) -> T {
|
||||
let m: T = is::simd_gt(a, b);
|
||||
is::simd_select(m, is::simd_sub(a, b), is::simd_sub(b, a))
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
|
||||
pub(crate) const unsafe fn simd_adda<T: Copy + const SimdExt>(a: T, b: T) -> T {
|
||||
|
||||
@@ -1124,41 +1124,49 @@ asm-fmts = xd, xj, xk
|
||||
data-types = UV4DI, UV4DI, UV4DI
|
||||
|
||||
/// lasx_xvabsd_b
|
||||
impl = portable
|
||||
name = lasx_xvabsd_b
|
||||
asm-fmts = xd, xj, xk
|
||||
data-types = V32QI, V32QI, V32QI
|
||||
|
||||
/// lasx_xvabsd_h
|
||||
impl = portable
|
||||
name = lasx_xvabsd_h
|
||||
asm-fmts = xd, xj, xk
|
||||
data-types = V16HI, V16HI, V16HI
|
||||
|
||||
/// lasx_xvabsd_w
|
||||
impl = portable
|
||||
name = lasx_xvabsd_w
|
||||
asm-fmts = xd, xj, xk
|
||||
data-types = V8SI, V8SI, V8SI
|
||||
|
||||
/// lasx_xvabsd_d
|
||||
impl = portable
|
||||
name = lasx_xvabsd_d
|
||||
asm-fmts = xd, xj, xk
|
||||
data-types = V4DI, V4DI, V4DI
|
||||
|
||||
/// lasx_xvabsd_bu
|
||||
impl = portable
|
||||
name = lasx_xvabsd_bu
|
||||
asm-fmts = xd, xj, xk
|
||||
data-types = UV32QI, UV32QI, UV32QI
|
||||
|
||||
/// lasx_xvabsd_hu
|
||||
impl = portable
|
||||
name = lasx_xvabsd_hu
|
||||
asm-fmts = xd, xj, xk
|
||||
data-types = UV16HI, UV16HI, UV16HI
|
||||
|
||||
/// lasx_xvabsd_wu
|
||||
impl = portable
|
||||
name = lasx_xvabsd_wu
|
||||
asm-fmts = xd, xj, xk
|
||||
data-types = UV8SI, UV8SI, UV8SI
|
||||
|
||||
/// lasx_xvabsd_du
|
||||
impl = portable
|
||||
name = lasx_xvabsd_du
|
||||
asm-fmts = xd, xj, xk
|
||||
data-types = UV4DI, UV4DI, UV4DI
|
||||
|
||||
@@ -1124,41 +1124,49 @@ asm-fmts = vd, vj, vk
|
||||
data-types = UV2DI, UV2DI, UV2DI
|
||||
|
||||
/// lsx_vabsd_b
|
||||
impl = portable
|
||||
name = lsx_vabsd_b
|
||||
asm-fmts = vd, vj, vk
|
||||
data-types = V16QI, V16QI, V16QI
|
||||
|
||||
/// lsx_vabsd_h
|
||||
impl = portable
|
||||
name = lsx_vabsd_h
|
||||
asm-fmts = vd, vj, vk
|
||||
data-types = V8HI, V8HI, V8HI
|
||||
|
||||
/// lsx_vabsd_w
|
||||
impl = portable
|
||||
name = lsx_vabsd_w
|
||||
asm-fmts = vd, vj, vk
|
||||
data-types = V4SI, V4SI, V4SI
|
||||
|
||||
/// lsx_vabsd_d
|
||||
impl = portable
|
||||
name = lsx_vabsd_d
|
||||
asm-fmts = vd, vj, vk
|
||||
data-types = V2DI, V2DI, V2DI
|
||||
|
||||
/// lsx_vabsd_bu
|
||||
impl = portable
|
||||
name = lsx_vabsd_bu
|
||||
asm-fmts = vd, vj, vk
|
||||
data-types = UV16QI, UV16QI, UV16QI
|
||||
|
||||
/// lsx_vabsd_hu
|
||||
impl = portable
|
||||
name = lsx_vabsd_hu
|
||||
asm-fmts = vd, vj, vk
|
||||
data-types = UV8HI, UV8HI, UV8HI
|
||||
|
||||
/// lsx_vabsd_wu
|
||||
impl = portable
|
||||
name = lsx_vabsd_wu
|
||||
asm-fmts = vd, vj, vk
|
||||
data-types = UV4SI, UV4SI, UV4SI
|
||||
|
||||
/// lsx_vabsd_du
|
||||
impl = portable
|
||||
name = lsx_vabsd_du
|
||||
asm-fmts = vd, vj, vk
|
||||
data-types = UV2DI, UV2DI, UV2DI
|
||||
|
||||
@@ -223,6 +223,14 @@ lsx_vadda_b
|
||||
lsx_vadda_h
|
||||
lsx_vadda_w
|
||||
lsx_vadda_d
|
||||
lsx_vabsd_b
|
||||
lsx_vabsd_h
|
||||
lsx_vabsd_w
|
||||
lsx_vabsd_d
|
||||
lsx_vabsd_bu
|
||||
lsx_vabsd_hu
|
||||
lsx_vabsd_wu
|
||||
lsx_vabsd_du
|
||||
|
||||
# LASX intrinsics
|
||||
lasx_xvsll_b
|
||||
@@ -443,3 +451,11 @@ lasx_xvadda_b
|
||||
lasx_xvadda_h
|
||||
lasx_xvadda_w
|
||||
lasx_xvadda_d
|
||||
lasx_xvabsd_b
|
||||
lasx_xvabsd_h
|
||||
lasx_xvabsd_w
|
||||
lasx_xvabsd_d
|
||||
lasx_xvabsd_bu
|
||||
lasx_xvabsd_hu
|
||||
lasx_xvabsd_wu
|
||||
lasx_xvabsd_du
|
||||
|
||||
Reference in New Issue
Block a user