Skip to content

Commit cb3aaba

Browse files
authored
Merge pull request #2179 from heiher/vldi
loongarch: Use `intrinsics::simd` for vldi
2 parents fceaa1b + 84af199 commit cb3aaba

8 files changed

Lines changed: 361 additions & 22 deletions

File tree

crates/core_arch/src/loongarch64/lasx/generated.rs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -447,8 +447,6 @@ unsafe extern "unadjusted" {
447447
fn __lasx_xvssrln_h_w(a: __v8i32, b: __v8i32) -> __v16i16;
448448
#[link_name = "llvm.loongarch.lasx.xvssrln.w.d"]
449449
fn __lasx_xvssrln_w_d(a: __v4i64, b: __v4i64) -> __v8i32;
450-
#[link_name = "llvm.loongarch.lasx.xvldi"]
451-
fn __lasx_xvldi(a: i32) -> __v4i64;
452450
#[link_name = "llvm.loongarch.lasx.xvextl.qu.du"]
453451
fn __lasx_xvextl_qu_du(a: __v4u64) -> __v4u64;
454452
#[link_name = "llvm.loongarch.lasx.vext2xv.h.b"]
@@ -2597,15 +2595,6 @@ pub fn lasx_xvssrln_w_d(a: m256i, b: m256i) -> m256i {
25972595
unsafe { transmute(__lasx_xvssrln_w_d(transmute(a), transmute(b))) }
25982596
}
25992597

2600-
#[inline]
2601-
#[target_feature(enable = "lasx")]
2602-
#[rustc_legacy_const_generics(0)]
2603-
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
2604-
pub fn lasx_xvldi<const IMM_S13: i32>() -> m256i {
2605-
static_assert_simm_bits!(IMM_S13, 13);
2606-
unsafe { transmute(__lasx_xvldi(IMM_S13)) }
2607-
}
2608-
26092598
#[inline]
26102599
#[target_feature(enable = "lasx")]
26112600
#[unstable(feature = "stdarch_loongarch", issue = "117427")]

crates/core_arch/src/loongarch64/lasx/portable.rs

Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,7 @@ impl_sv!("lasx", lasx_xvrepli_b, simd_ext_splat, m256i, i8x32, 10);
357357
impl_sv!("lasx", lasx_xvrepli_h, simd_ext_splat, m256i, i16x16, 10);
358358
impl_sv!("lasx", lasx_xvrepli_w, simd_ext_splat, m256i, i32x8, 10);
359359
impl_sv!("lasx", lasx_xvrepli_d, simd_ext_splat, m256i, i64x4, 10);
360+
impl_sv!("lasx", lasx_xvldi, simd_ext_ldi, m256i, i64x4, 13, const);
360361

361362
impl_vvv!("lasx", lasx_xvadd_b, simd_add, m256i, i8x32);
362363
impl_vvv!("lasx", lasx_xvadd_h, simd_add, m256i, i16x16);
@@ -618,3 +619,186 @@ impl_vvvv!("lasx", lasx_xvfnmsub_d, simd_ext_fnmsub, m256d, f64x4);
618619

619620
impl_vugv!("lasx", lasx_xvinsgr2vr_w, simd_insert, m256i, i32x8, i32, 3);
620621
impl_vugv!("lasx", lasx_xvinsgr2vr_d, simd_insert, m256i, i64x4, i64, 2);
622+
623+
#[cfg(test)]
624+
mod tests {
625+
use crate::{
626+
core_arch::{loongarch64::*, simd::*},
627+
mem::transmute,
628+
};
629+
use stdarch_test::simd_test;
630+
631+
#[simd_test(enable = "lasx")]
632+
unsafe fn xvldi() {
633+
let r = i8x32::new(
634+
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,
635+
0, 0, 0,
636+
);
637+
assert_eq!(r, transmute(lasx_xvldi::<0>()));
638+
let r = i8x32::new(
639+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
640+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
641+
);
642+
assert_eq!(r, transmute(lasx_xvldi::<255>()));
643+
let r = i8x32::new(
644+
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,
645+
0, 0, 0,
646+
);
647+
assert_eq!(r, transmute(lasx_xvldi::<1024>()));
648+
let r = i8x32::new(
649+
0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0,
650+
-2, 0, -2, 0, -2, 0, -2,
651+
);
652+
assert_eq!(r, transmute(lasx_xvldi::<1536>()));
653+
let r = i8x32::new(
654+
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,
655+
0, 0, 0,
656+
);
657+
assert_eq!(r, transmute(lasx_xvldi::<2048>()));
658+
let r = i8x32::new(
659+
0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1,
660+
-1, 0, -2, -1, -1, 0, -2, -1, -1,
661+
);
662+
assert_eq!(r, transmute(lasx_xvldi::<2560>()));
663+
let r = i8x32::new(
664+
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,
665+
0, 0, 0,
666+
);
667+
assert_eq!(r, transmute(lasx_xvldi::<3072>()));
668+
let r = i8x32::new(
669+
0, -2, -1, -1, -1, -1, -1, -1, 0, -2, -1, -1, -1, -1, -1, -1, 0, -2, -1, -1, -1, -1,
670+
-1, -1, 0, -2, -1, -1, -1, -1, -1, -1,
671+
);
672+
assert_eq!(r, transmute(lasx_xvldi::<3584>()));
673+
let r = i8x32::new(
674+
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,
675+
0, 0, 0,
676+
);
677+
assert_eq!(r, transmute(lasx_xvldi::<-4096>()));
678+
let r = i8x32::new(
679+
-128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0,
680+
0, -128, 0, 0, 0, -128, 0, 0, 0,
681+
);
682+
assert_eq!(r, transmute(lasx_xvldi::<-3968>()));
683+
let r = i8x32::new(
684+
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,
685+
0, 0, 0,
686+
);
687+
assert_eq!(r, transmute(lasx_xvldi::<-3840>()));
688+
let r = i8x32::new(
689+
0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0,
690+
0, 0, -128, 0, 0, 0, -128, 0, 0,
691+
);
692+
assert_eq!(r, transmute(lasx_xvldi::<-3712>()));
693+
let r = i8x32::new(
694+
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,
695+
0, 0, 0,
696+
);
697+
assert_eq!(r, transmute(lasx_xvldi::<-3584>()));
698+
let r = i8x32::new(
699+
0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128,
700+
0, 0, 0, -128, 0, 0, 0, -128, 0,
701+
);
702+
assert_eq!(r, transmute(lasx_xvldi::<-3456>()));
703+
let r = i8x32::new(
704+
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,
705+
0, 0, 0,
706+
);
707+
assert_eq!(r, transmute(lasx_xvldi::<-3328>()));
708+
let r = i8x32::new(
709+
0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0,
710+
-128, 0, 0, 0, -128, 0, 0, 0, -128,
711+
);
712+
assert_eq!(r, transmute(lasx_xvldi::<-3200>()));
713+
let r = i8x32::new(
714+
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,
715+
0, 0, 0,
716+
);
717+
assert_eq!(r, transmute(lasx_xvldi::<-3072>()));
718+
let r = i8x32::new(
719+
-128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128,
720+
0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0,
721+
);
722+
assert_eq!(r, transmute(lasx_xvldi::<-2944>()));
723+
let r = i8x32::new(
724+
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,
725+
0, 0, 0,
726+
);
727+
assert_eq!(r, transmute(lasx_xvldi::<-2816>()));
728+
let r = i8x32::new(
729+
0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0,
730+
-128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128,
731+
);
732+
assert_eq!(r, transmute(lasx_xvldi::<-2688>()));
733+
let r = i8x32::new(
734+
-1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0,
735+
0, -1, 0, 0, 0,
736+
);
737+
assert_eq!(r, transmute(lasx_xvldi::<-2560>()));
738+
let r = i8x32::new(
739+
-1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1,
740+
-128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0,
741+
);
742+
assert_eq!(r, transmute(lasx_xvldi::<-2432>()));
743+
let r = i8x32::new(
744+
-1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1,
745+
-1, 0, 0, -1, -1, 0, 0,
746+
);
747+
assert_eq!(r, transmute(lasx_xvldi::<-2304>()));
748+
let r = i8x32::new(
749+
-1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0,
750+
-1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0,
751+
);
752+
assert_eq!(r, transmute(lasx_xvldi::<-2176>()));
753+
let r = i8x32::new(
754+
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,
755+
0, 0, 0,
756+
);
757+
assert_eq!(r, transmute(lasx_xvldi::<-2048>()));
758+
let r = i8x32::new(
759+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
760+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
761+
);
762+
assert_eq!(r, transmute(lasx_xvldi::<-1793>()));
763+
let r = i8x32::new(
764+
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,
765+
0, 0, 0,
766+
);
767+
assert_eq!(r, transmute(lasx_xvldi::<-1792>()));
768+
let r = i8x32::new(
769+
0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0,
770+
-1, 0, -1, 0, -1, 0, -1,
771+
);
772+
assert_eq!(r, transmute(lasx_xvldi::<-1622>()));
773+
let r = i8x32::new(
774+
0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0,
775+
64, 0, 0, 0, 64,
776+
);
777+
assert_eq!(r, transmute(lasx_xvldi::<-1536>()));
778+
let r = i8x32::new(
779+
0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80,
780+
-63, 0, 0, 80, -63, 0, 0, 80, -63,
781+
);
782+
assert_eq!(r, transmute(lasx_xvldi::<-1366>()));
783+
let r = i8x32::new(
784+
0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64,
785+
0, 0, 0, 0,
786+
);
787+
assert_eq!(r, transmute(lasx_xvldi::<-1280>()));
788+
let r = i8x32::new(
789+
0, 0, 80, -63, 0, 0, 0, 0, 0, 0, 80, -63, 0, 0, 0, 0, 0, 0, 80, -63, 0, 0, 0, 0, 0, 0,
790+
80, -63, 0, 0, 0, 0,
791+
);
792+
assert_eq!(r, transmute(lasx_xvldi::<-1110>()));
793+
let r = i8x32::new(
794+
0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0,
795+
0, 0, 0, 64,
796+
);
797+
assert_eq!(r, transmute(lasx_xvldi::<-1024>()));
798+
let r = i8x32::new(
799+
0, 0, 0, 0, 0, 0, 42, -64, 0, 0, 0, 0, 0, 0, 42, -64, 0, 0, 0, 0, 0, 0, 42, -64, 0, 0,
800+
0, 0, 0, 0, 42, -64,
801+
);
802+
assert_eq!(r, transmute(lasx_xvldi::<-854>()));
803+
}
804+
}

crates/core_arch/src/loongarch64/lsx/generated.rs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -749,8 +749,6 @@ unsafe extern "unadjusted" {
749749
fn __lsx_vssrln_h_w(a: __v4i32, b: __v4i32) -> __v8i16;
750750
#[link_name = "llvm.loongarch.lsx.vssrln.w.d"]
751751
fn __lsx_vssrln_w_d(a: __v2i64, b: __v2i64) -> __v4i32;
752-
#[link_name = "llvm.loongarch.lsx.vldi"]
753-
fn __lsx_vldi(a: i32) -> __v2i64;
754752
#[link_name = "llvm.loongarch.lsx.vshuf.b"]
755753
fn __lsx_vshuf_b(a: __v16i8, b: __v16i8, c: __v16i8) -> __v16i8;
756754
#[link_name = "llvm.loongarch.lsx.vextl.qu.du"]
@@ -3668,15 +3666,6 @@ pub fn lsx_vssrln_w_d(a: m128i, b: m128i) -> m128i {
36683666
unsafe { transmute(__lsx_vssrln_w_d(transmute(a), transmute(b))) }
36693667
}
36703668

3671-
#[inline]
3672-
#[target_feature(enable = "lsx")]
3673-
#[rustc_legacy_const_generics(0)]
3674-
#[unstable(feature = "stdarch_loongarch", issue = "117427")]
3675-
pub fn lsx_vldi<const IMM_S13: i32>() -> m128i {
3676-
static_assert_simm_bits!(IMM_S13, 13);
3677-
unsafe { transmute(__lsx_vldi(IMM_S13)) }
3678-
}
3679-
36803669
#[inline]
36813670
#[target_feature(enable = "lsx")]
36823671
#[unstable(feature = "stdarch_loongarch", issue = "117427")]

crates/core_arch/src/loongarch64/lsx/portable.rs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ impl_sv!("lsx", lsx_vrepli_b, simd_ext_splat, m128i, i8x16, 10);
251251
impl_sv!("lsx", lsx_vrepli_h, simd_ext_splat, m128i, i16x8, 10);
252252
impl_sv!("lsx", lsx_vrepli_w, simd_ext_splat, m128i, i32x4, 10);
253253
impl_sv!("lsx", lsx_vrepli_d, simd_ext_splat, m128i, i64x2, 10);
254+
impl_sv!("lsx", lsx_vldi, simd_ext_ldi, m128i, i64x2, 13, const);
254255

255256
impl_vvv!("lsx", lsx_vadd_b, simd_add, m128i, i8x16);
256257
impl_vvv!("lsx", lsx_vadd_h, simd_add, m128i, i16x8);
@@ -520,3 +521,96 @@ impl_vugv!("lsx", lsx_vinsgr2vr_b, simd_insert, m128i, i8x16, i32, 4);
520521
impl_vugv!("lsx", lsx_vinsgr2vr_h, simd_insert, m128i, i16x8, i32, 3);
521522
impl_vugv!("lsx", lsx_vinsgr2vr_w, simd_insert, m128i, i32x4, i32, 2);
522523
impl_vugv!("lsx", lsx_vinsgr2vr_d, simd_insert, m128i, i64x2, i64, 1);
524+
525+
#[cfg(test)]
526+
mod tests {
527+
use crate::{
528+
core_arch::{loongarch64::*, simd::*},
529+
mem::transmute,
530+
};
531+
use stdarch_test::simd_test;
532+
533+
#[simd_test(enable = "lsx")]
534+
unsafe fn vldi() {
535+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
536+
assert_eq!(r, transmute(lsx_vldi::<0>()));
537+
let r = i8x16::new(
538+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
539+
);
540+
assert_eq!(r, transmute(lsx_vldi::<255>()));
541+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
542+
assert_eq!(r, transmute(lsx_vldi::<1024>()));
543+
let r = i8x16::new(0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2);
544+
assert_eq!(r, transmute(lsx_vldi::<1536>()));
545+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
546+
assert_eq!(r, transmute(lsx_vldi::<2048>()));
547+
let r = i8x16::new(0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1);
548+
assert_eq!(r, transmute(lsx_vldi::<2560>()));
549+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
550+
assert_eq!(r, transmute(lsx_vldi::<3072>()));
551+
let r = i8x16::new(0, -2, -1, -1, -1, -1, -1, -1, 0, -2, -1, -1, -1, -1, -1, -1);
552+
assert_eq!(r, transmute(lsx_vldi::<3584>()));
553+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
554+
assert_eq!(r, transmute(lsx_vldi::<-4096>()));
555+
let r = i8x16::new(-128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0);
556+
assert_eq!(r, transmute(lsx_vldi::<-3968>()));
557+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
558+
assert_eq!(r, transmute(lsx_vldi::<-3840>()));
559+
let r = i8x16::new(0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0);
560+
assert_eq!(r, transmute(lsx_vldi::<-3712>()));
561+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
562+
assert_eq!(r, transmute(lsx_vldi::<-3584>()));
563+
let r = i8x16::new(0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0);
564+
assert_eq!(r, transmute(lsx_vldi::<-3456>()));
565+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
566+
assert_eq!(r, transmute(lsx_vldi::<-3328>()));
567+
let r = i8x16::new(0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128);
568+
assert_eq!(r, transmute(lsx_vldi::<-3200>()));
569+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
570+
assert_eq!(r, transmute(lsx_vldi::<-3072>()));
571+
let r = i8x16::new(
572+
-128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0,
573+
);
574+
assert_eq!(r, transmute(lsx_vldi::<-2944>()));
575+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
576+
assert_eq!(r, transmute(lsx_vldi::<-2816>()));
577+
let r = i8x16::new(
578+
0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128,
579+
);
580+
assert_eq!(r, transmute(lsx_vldi::<-2688>()));
581+
let r = i8x16::new(-1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0);
582+
assert_eq!(r, transmute(lsx_vldi::<-2560>()));
583+
let r = i8x16::new(
584+
-1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0,
585+
);
586+
assert_eq!(r, transmute(lsx_vldi::<-2432>()));
587+
let r = i8x16::new(-1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0);
588+
assert_eq!(r, transmute(lsx_vldi::<-2304>()));
589+
let r = i8x16::new(
590+
-1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0,
591+
);
592+
assert_eq!(r, transmute(lsx_vldi::<-2176>()));
593+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
594+
assert_eq!(r, transmute(lsx_vldi::<-2048>()));
595+
let r = i8x16::new(
596+
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
597+
);
598+
assert_eq!(r, transmute(lsx_vldi::<-1793>()));
599+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
600+
assert_eq!(r, transmute(lsx_vldi::<-1792>()));
601+
let r = i8x16::new(0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1);
602+
assert_eq!(r, transmute(lsx_vldi::<-1622>()));
603+
let r = i8x16::new(0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 64);
604+
assert_eq!(r, transmute(lsx_vldi::<-1536>()));
605+
let r = i8x16::new(0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63);
606+
assert_eq!(r, transmute(lsx_vldi::<-1366>()));
607+
let r = i8x16::new(0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0);
608+
assert_eq!(r, transmute(lsx_vldi::<-1280>()));
609+
let r = i8x16::new(0, 0, 80, -63, 0, 0, 0, 0, 0, 0, 80, -63, 0, 0, 0, 0);
610+
assert_eq!(r, transmute(lsx_vldi::<-1110>()));
611+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64);
612+
assert_eq!(r, transmute(lsx_vldi::<-1024>()));
613+
let r = i8x16::new(0, 0, 0, 0, 0, 0, 42, -64, 0, 0, 0, 0, 0, 0, 42, -64);
614+
assert_eq!(r, transmute(lsx_vldi::<-854>()));
615+
}
616+
}

0 commit comments

Comments
 (0)