Skip to main content

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

1//! LoongArch64 LSX intrinsics - intrinsics::simd implementation
2
3use super::super::{simd as ls, simd::*, *};
4use crate::core_arch::simd::{self as cs, *};
5use crate::intrinsics::simd as is;
6use crate::mem::transmute;
7
8#[inline(always)]
9#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
10const unsafe fn simd_pickev_b<T: Copy>(a: T, b: T) -> T {
11    simd_shuffle!(b, a, [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30])
12}
13
14#[inline(always)]
15#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
16const unsafe fn simd_pickev_h<T: Copy>(a: T, b: T) -> T {
17    simd_shuffle!(b, a, [0, 2, 4, 6, 8, 10, 12, 14])
18}
19
20#[inline(always)]
21#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
22const unsafe fn simd_pickev_w<T: Copy>(a: T, b: T) -> T {
23    simd_shuffle!(b, a, [0, 2, 4, 6])
24}
25
26#[inline(always)]
27#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
28const unsafe fn simd_pickev_d<T: Copy>(a: T, b: T) -> T {
29    simd_shuffle!(b, a, [0, 2])
30}
31
32#[inline(always)]
33#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
34const unsafe fn simd_pickod_b<T: Copy>(a: T, b: T) -> T {
35    simd_shuffle!(b, a, [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31])
36}
37
38#[inline(always)]
39#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
40const unsafe fn simd_pickod_h<T: Copy>(a: T, b: T) -> T {
41    simd_shuffle!(b, a, [1, 3, 5, 7, 9, 11, 13, 15])
42}
43
44#[inline(always)]
45#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
46const unsafe fn simd_pickod_w<T: Copy>(a: T, b: T) -> T {
47    simd_shuffle!(b, a, [1, 3, 5, 7])
48}
49
50#[inline(always)]
51#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
52const unsafe fn simd_pickod_d<T: Copy>(a: T, b: T) -> T {
53    simd_shuffle!(b, a, [1, 3])
54}
55
56impl_vv!("lsx", lsx_vpcnt_b, is::simd_ctpop, m128i, i8x16);
57impl_vv!("lsx", lsx_vpcnt_h, is::simd_ctpop, m128i, i16x8);
58impl_vv!("lsx", lsx_vpcnt_w, is::simd_ctpop, m128i, i32x4);
59impl_vv!("lsx", lsx_vpcnt_d, is::simd_ctpop, m128i, i64x2);
60impl_vv!("lsx", lsx_vclz_b, is::simd_ctlz, m128i, i8x16);
61impl_vv!("lsx", lsx_vclz_h, is::simd_ctlz, m128i, i16x8);
62impl_vv!("lsx", lsx_vclz_w, is::simd_ctlz, m128i, i32x4);
63impl_vv!("lsx", lsx_vclz_d, is::simd_ctlz, m128i, i64x2);
64impl_vv!("lsx", lsx_vneg_b, is::simd_neg, m128i, i8x16);
65impl_vv!("lsx", lsx_vneg_h, is::simd_neg, m128i, i16x8);
66impl_vv!("lsx", lsx_vneg_w, is::simd_neg, m128i, i32x4);
67impl_vv!("lsx", lsx_vneg_d, is::simd_neg, m128i, i64x2);
68impl_vv!("lsx", lsx_vfsqrt_s, is::simd_fsqrt, m128, f32x4);
69impl_vv!("lsx", lsx_vfsqrt_d, is::simd_fsqrt, m128d, f64x2);
70
71impl_gv!("lsx", lsx_vreplgr2vr_b, ls::simd_splat, m128i, i8x16, i32);
72impl_gv!("lsx", lsx_vreplgr2vr_h, ls::simd_splat, m128i, i16x8, i32);
73impl_gv!("lsx", lsx_vreplgr2vr_w, ls::simd_splat, m128i, i32x4, i32);
74impl_gv!("lsx", lsx_vreplgr2vr_d, ls::simd_splat, m128i, i64x2, i64);
75
76impl_sv!("lsx", lsx_vrepli_b, ls::simd_splat, m128i, i8x16, 10);
77impl_sv!("lsx", lsx_vrepli_h, ls::simd_splat, m128i, i16x8, 10);
78impl_sv!("lsx", lsx_vrepli_w, ls::simd_splat, m128i, i32x4, 10);
79impl_sv!("lsx", lsx_vrepli_d, ls::simd_splat, m128i, i64x2, 10);
80
81impl_vvv!("lsx", lsx_vadd_b, is::simd_add, m128i, i8x16);
82impl_vvv!("lsx", lsx_vadd_h, is::simd_add, m128i, i16x8);
83impl_vvv!("lsx", lsx_vadd_w, is::simd_add, m128i, i32x4);
84impl_vvv!("lsx", lsx_vadd_d, is::simd_add, m128i, i64x2);
85impl_vvv!("lsx", lsx_vsub_b, is::simd_sub, m128i, i8x16);
86impl_vvv!("lsx", lsx_vsub_h, is::simd_sub, m128i, i16x8);
87impl_vvv!("lsx", lsx_vsub_w, is::simd_sub, m128i, i32x4);
88impl_vvv!("lsx", lsx_vsub_d, is::simd_sub, m128i, i64x2);
89impl_vvv!("lsx", lsx_vmax_b, cs::simd_imax, m128i, i8x16);
90impl_vvv!("lsx", lsx_vmax_h, cs::simd_imax, m128i, i16x8);
91impl_vvv!("lsx", lsx_vmax_w, cs::simd_imax, m128i, i32x4);
92impl_vvv!("lsx", lsx_vmax_d, cs::simd_imax, m128i, i64x2);
93impl_vvv!("lsx", lsx_vmax_bu, cs::simd_imax, m128i, u8x16);
94impl_vvv!("lsx", lsx_vmax_hu, cs::simd_imax, m128i, u16x8);
95impl_vvv!("lsx", lsx_vmax_wu, cs::simd_imax, m128i, u32x4);
96impl_vvv!("lsx", lsx_vmax_du, cs::simd_imax, m128i, u64x2);
97impl_vvv!("lsx", lsx_vmin_b, cs::simd_imin, m128i, i8x16);
98impl_vvv!("lsx", lsx_vmin_h, cs::simd_imin, m128i, i16x8);
99impl_vvv!("lsx", lsx_vmin_w, cs::simd_imin, m128i, i32x4);
100impl_vvv!("lsx", lsx_vmin_d, cs::simd_imin, m128i, i64x2);
101impl_vvv!("lsx", lsx_vmin_bu, cs::simd_imin, m128i, u8x16);
102impl_vvv!("lsx", lsx_vmin_hu, cs::simd_imin, m128i, u16x8);
103impl_vvv!("lsx", lsx_vmin_wu, cs::simd_imin, m128i, u32x4);
104impl_vvv!("lsx", lsx_vmin_du, cs::simd_imin, m128i, u64x2);
105impl_vvv!("lsx", lsx_vseq_b, is::simd_eq, m128i, i8x16);
106impl_vvv!("lsx", lsx_vseq_h, is::simd_eq, m128i, i16x8);
107impl_vvv!("lsx", lsx_vseq_w, is::simd_eq, m128i, i32x4);
108impl_vvv!("lsx", lsx_vseq_d, is::simd_eq, m128i, i64x2);
109impl_vvv!("lsx", lsx_vslt_b, is::simd_lt, m128i, i8x16);
110impl_vvv!("lsx", lsx_vslt_h, is::simd_lt, m128i, i16x8);
111impl_vvv!("lsx", lsx_vslt_w, is::simd_lt, m128i, i32x4);
112impl_vvv!("lsx", lsx_vslt_d, is::simd_lt, m128i, i64x2);
113impl_vvv!("lsx", lsx_vslt_bu, is::simd_lt, m128i, u8x16);
114impl_vvv!("lsx", lsx_vslt_hu, is::simd_lt, m128i, u16x8);
115impl_vvv!("lsx", lsx_vslt_wu, is::simd_lt, m128i, u32x4);
116impl_vvv!("lsx", lsx_vslt_du, is::simd_lt, m128i, u64x2);
117impl_vvv!("lsx", lsx_vsle_b, is::simd_le, m128i, i8x16);
118impl_vvv!("lsx", lsx_vsle_h, is::simd_le, m128i, i16x8);
119impl_vvv!("lsx", lsx_vsle_w, is::simd_le, m128i, i32x4);
120impl_vvv!("lsx", lsx_vsle_d, is::simd_le, m128i, i64x2);
121impl_vvv!("lsx", lsx_vsle_bu, is::simd_le, m128i, u8x16);
122impl_vvv!("lsx", lsx_vsle_hu, is::simd_le, m128i, u16x8);
123impl_vvv!("lsx", lsx_vsle_wu, is::simd_le, m128i, u32x4);
124impl_vvv!("lsx", lsx_vsle_du, is::simd_le, m128i, u64x2);
125impl_vvv!("lsx", lsx_vmul_b, is::simd_mul, m128i, i8x16);
126impl_vvv!("lsx", lsx_vmul_h, is::simd_mul, m128i, i16x8);
127impl_vvv!("lsx", lsx_vmul_w, is::simd_mul, m128i, i32x4);
128impl_vvv!("lsx", lsx_vmul_d, is::simd_mul, m128i, i64x2);
129impl_vvv!("lsx", lsx_vdiv_b, is::simd_div, m128i, i8x16);
130impl_vvv!("lsx", lsx_vdiv_h, is::simd_div, m128i, i16x8);
131impl_vvv!("lsx", lsx_vdiv_w, is::simd_div, m128i, i32x4);
132impl_vvv!("lsx", lsx_vdiv_d, is::simd_div, m128i, i64x2);
133impl_vvv!("lsx", lsx_vdiv_bu, is::simd_div, m128i, u8x16);
134impl_vvv!("lsx", lsx_vdiv_hu, is::simd_div, m128i, u16x8);
135impl_vvv!("lsx", lsx_vdiv_wu, is::simd_div, m128i, u32x4);
136impl_vvv!("lsx", lsx_vdiv_du, is::simd_div, m128i, u64x2);
137impl_vvv!("lsx", lsx_vmod_b, is::simd_rem, m128i, i8x16);
138impl_vvv!("lsx", lsx_vmod_h, is::simd_rem, m128i, i16x8);
139impl_vvv!("lsx", lsx_vmod_w, is::simd_rem, m128i, i32x4);
140impl_vvv!("lsx", lsx_vmod_d, is::simd_rem, m128i, i64x2);
141impl_vvv!("lsx", lsx_vmod_bu, is::simd_rem, m128i, u8x16);
142impl_vvv!("lsx", lsx_vmod_hu, is::simd_rem, m128i, u16x8);
143impl_vvv!("lsx", lsx_vmod_wu, is::simd_rem, m128i, u32x4);
144impl_vvv!("lsx", lsx_vmod_du, is::simd_rem, m128i, u64x2);
145impl_vvv!("lsx", lsx_vand_v, is::simd_and, m128i, u8x16);
146impl_vvv!("lsx", lsx_vandn_v, ls::simd_andn, m128i, u8x16);
147impl_vvv!("lsx", lsx_vor_v, is::simd_or, m128i, u8x16);
148impl_vvv!("lsx", lsx_vorn_v, ls::simd_orn, m128i, u8x16);
149impl_vvv!("lsx", lsx_vnor_v, ls::simd_nor, m128i, u8x16);
150impl_vvv!("lsx", lsx_vxor_v, is::simd_xor, m128i, u8x16);
151impl_vvv!("lsx", lsx_vfadd_s, is::simd_add, m128, f32x4);
152impl_vvv!("lsx", lsx_vfadd_d, is::simd_add, m128d, f64x2);
153impl_vvv!("lsx", lsx_vfsub_s, is::simd_sub, m128, f32x4);
154impl_vvv!("lsx", lsx_vfsub_d, is::simd_sub, m128d, f64x2);
155impl_vvv!("lsx", lsx_vfmul_s, is::simd_mul, m128, f32x4);
156impl_vvv!("lsx", lsx_vfmul_d, is::simd_mul, m128d, f64x2);
157impl_vvv!("lsx", lsx_vfdiv_s, is::simd_div, m128, f32x4);
158impl_vvv!("lsx", lsx_vfdiv_d, is::simd_div, m128d, f64x2);
159impl_vvv!("lsx", lsx_vsll_b, ls::simd_shl, m128i, i8x16);
160impl_vvv!("lsx", lsx_vsll_h, ls::simd_shl, m128i, i16x8);
161impl_vvv!("lsx", lsx_vsll_w, ls::simd_shl, m128i, i32x4);
162impl_vvv!("lsx", lsx_vsll_d, ls::simd_shl, m128i, i64x2);
163impl_vvv!("lsx", lsx_vsra_b, ls::simd_shr, m128i, i8x16);
164impl_vvv!("lsx", lsx_vsra_h, ls::simd_shr, m128i, i16x8);
165impl_vvv!("lsx", lsx_vsra_w, ls::simd_shr, m128i, i32x4);
166impl_vvv!("lsx", lsx_vsra_d, ls::simd_shr, m128i, i64x2);
167impl_vvv!("lsx", lsx_vsrl_b, ls::simd_shr, m128i, u8x16);
168impl_vvv!("lsx", lsx_vsrl_h, ls::simd_shr, m128i, u16x8);
169impl_vvv!("lsx", lsx_vsrl_w, ls::simd_shr, m128i, u32x4);
170impl_vvv!("lsx", lsx_vsrl_d, ls::simd_shr, m128i, u64x2);
171impl_vvv!("lsx", lsx_vbitclr_b, ls::simd_bitclr, m128i, u8x16);
172impl_vvv!("lsx", lsx_vbitclr_h, ls::simd_bitclr, m128i, u16x8);
173impl_vvv!("lsx", lsx_vbitclr_w, ls::simd_bitclr, m128i, u32x4);
174impl_vvv!("lsx", lsx_vbitclr_d, ls::simd_bitclr, m128i, u64x2);
175impl_vvv!("lsx", lsx_vbitset_b, ls::simd_bitset, m128i, u8x16);
176impl_vvv!("lsx", lsx_vbitset_h, ls::simd_bitset, m128i, u16x8);
177impl_vvv!("lsx", lsx_vbitset_w, ls::simd_bitset, m128i, u32x4);
178impl_vvv!("lsx", lsx_vbitset_d, ls::simd_bitset, m128i, u64x2);
179impl_vvv!("lsx", lsx_vbitrev_b, ls::simd_bitrev, m128i, u8x16);
180impl_vvv!("lsx", lsx_vbitrev_h, ls::simd_bitrev, m128i, u16x8);
181impl_vvv!("lsx", lsx_vbitrev_w, ls::simd_bitrev, m128i, u32x4);
182impl_vvv!("lsx", lsx_vbitrev_d, ls::simd_bitrev, m128i, u64x2);
183impl_vvv!("lsx", lsx_vsadd_b, is::simd_saturating_add, m128i, i8x16);
184impl_vvv!("lsx", lsx_vsadd_h, is::simd_saturating_add, m128i, i16x8);
185impl_vvv!("lsx", lsx_vsadd_w, is::simd_saturating_add, m128i, i32x4);
186impl_vvv!("lsx", lsx_vsadd_d, is::simd_saturating_add, m128i, i64x2);
187impl_vvv!("lsx", lsx_vsadd_bu, is::simd_saturating_add, m128i, u8x16);
188impl_vvv!("lsx", lsx_vsadd_hu, is::simd_saturating_add, m128i, u16x8);
189impl_vvv!("lsx", lsx_vsadd_wu, is::simd_saturating_add, m128i, u32x4);
190impl_vvv!("lsx", lsx_vsadd_du, is::simd_saturating_add, m128i, u64x2);
191impl_vvv!("lsx", lsx_vssub_b, is::simd_saturating_sub, m128i, i8x16);
192impl_vvv!("lsx", lsx_vssub_h, is::simd_saturating_sub, m128i, i16x8);
193impl_vvv!("lsx", lsx_vssub_w, is::simd_saturating_sub, m128i, i32x4);
194impl_vvv!("lsx", lsx_vssub_d, is::simd_saturating_sub, m128i, i64x2);
195impl_vvv!("lsx", lsx_vssub_bu, is::simd_saturating_sub, m128i, u8x16);
196impl_vvv!("lsx", lsx_vssub_hu, is::simd_saturating_sub, m128i, u16x8);
197impl_vvv!("lsx", lsx_vssub_wu, is::simd_saturating_sub, m128i, u32x4);
198impl_vvv!("lsx", lsx_vssub_du, is::simd_saturating_sub, m128i, u64x2);
199impl_vvv!("lsx", lsx_vadda_b, ls::simd_adda, m128i, i8x16);
200impl_vvv!("lsx", lsx_vadda_h, ls::simd_adda, m128i, i16x8);
201impl_vvv!("lsx", lsx_vadda_w, ls::simd_adda, m128i, i32x4);
202impl_vvv!("lsx", lsx_vadda_d, ls::simd_adda, m128i, i64x2);
203impl_vvv!("lsx", lsx_vabsd_b, ls::simd_absd, m128i, i8x16);
204impl_vvv!("lsx", lsx_vabsd_h, ls::simd_absd, m128i, i16x8);
205impl_vvv!("lsx", lsx_vabsd_w, ls::simd_absd, m128i, i32x4);
206impl_vvv!("lsx", lsx_vabsd_d, ls::simd_absd, m128i, i64x2);
207impl_vvv!("lsx", lsx_vabsd_bu, ls::simd_absd, m128i, u8x16);
208impl_vvv!("lsx", lsx_vabsd_hu, ls::simd_absd, m128i, u16x8);
209impl_vvv!("lsx", lsx_vabsd_wu, ls::simd_absd, m128i, u32x4);
210impl_vvv!("lsx", lsx_vabsd_du, ls::simd_absd, m128i, u64x2);
211impl_vvv!("lsx", lsx_vpickev_b, simd_pickev_b, m128i, i8x16);
212impl_vvv!("lsx", lsx_vpickev_h, simd_pickev_h, m128i, i16x8);
213impl_vvv!("lsx", lsx_vpickev_w, simd_pickev_w, m128i, i32x4);
214impl_vvv!("lsx", lsx_vpickev_d, simd_pickev_d, m128i, i64x2);
215impl_vvv!("lsx", lsx_vpickod_b, simd_pickod_b, m128i, i8x16);
216impl_vvv!("lsx", lsx_vpickod_h, simd_pickod_h, m128i, i16x8);
217impl_vvv!("lsx", lsx_vpickod_w, simd_pickod_w, m128i, i32x4);
218impl_vvv!("lsx", lsx_vpickod_d, simd_pickod_d, m128i, i64x2);
219
220impl_vuv!("lsx", lsx_vslli_b, is::simd_shl, m128i, i8x16);
221impl_vuv!("lsx", lsx_vslli_h, is::simd_shl, m128i, i16x8);
222impl_vuv!("lsx", lsx_vslli_w, is::simd_shl, m128i, i32x4);
223impl_vuv!("lsx", lsx_vslli_d, is::simd_shl, m128i, i64x2);
224impl_vuv!("lsx", lsx_vsrai_b, is::simd_shr, m128i, i8x16);
225impl_vuv!("lsx", lsx_vsrai_h, is::simd_shr, m128i, i16x8);
226impl_vuv!("lsx", lsx_vsrai_w, is::simd_shr, m128i, i32x4);
227impl_vuv!("lsx", lsx_vsrai_d, is::simd_shr, m128i, i64x2);
228impl_vuv!("lsx", lsx_vsrli_b, is::simd_shr, m128i, u8x16);
229impl_vuv!("lsx", lsx_vsrli_h, is::simd_shr, m128i, u16x8);
230impl_vuv!("lsx", lsx_vsrli_w, is::simd_shr, m128i, u32x4);
231impl_vuv!("lsx", lsx_vsrli_d, is::simd_shr, m128i, u64x2);
232impl_vuv!("lsx", lsx_vaddi_bu, is::simd_add, m128i, u8x16, 5);
233impl_vuv!("lsx", lsx_vaddi_hu, is::simd_add, m128i, u16x8, 5);
234impl_vuv!("lsx", lsx_vaddi_wu, is::simd_add, m128i, u32x4, 5);
235impl_vuv!("lsx", lsx_vaddi_du, is::simd_add, m128i, u64x2, 5);
236impl_vuv!("lsx", lsx_vslti_bu, is::simd_lt, m128i, u8x16, 5);
237impl_vuv!("lsx", lsx_vslti_hu, is::simd_lt, m128i, u16x8, 5);
238impl_vuv!("lsx", lsx_vslti_wu, is::simd_lt, m128i, u32x4, 5);
239impl_vuv!("lsx", lsx_vslti_du, is::simd_lt, m128i, u64x2, 5);
240impl_vuv!("lsx", lsx_vslei_bu, is::simd_le, m128i, u8x16, 5);
241impl_vuv!("lsx", lsx_vslei_hu, is::simd_le, m128i, u16x8, 5);
242impl_vuv!("lsx", lsx_vslei_wu, is::simd_le, m128i, u32x4, 5);
243impl_vuv!("lsx", lsx_vslei_du, is::simd_le, m128i, u64x2, 5);
244impl_vuv!("lsx", lsx_vmaxi_bu, cs::simd_imax, m128i, u8x16, 5);
245impl_vuv!("lsx", lsx_vmaxi_hu, cs::simd_imax, m128i, u16x8, 5);
246impl_vuv!("lsx", lsx_vmaxi_wu, cs::simd_imax, m128i, u32x4, 5);
247impl_vuv!("lsx", lsx_vmaxi_du, cs::simd_imax, m128i, u64x2, 5);
248impl_vuv!("lsx", lsx_vmini_bu, cs::simd_imin, m128i, u8x16, 5);
249impl_vuv!("lsx", lsx_vmini_hu, cs::simd_imin, m128i, u16x8, 5);
250impl_vuv!("lsx", lsx_vmini_wu, cs::simd_imin, m128i, u32x4, 5);
251impl_vuv!("lsx", lsx_vmini_du, cs::simd_imin, m128i, u64x2, 5);
252
253impl_vug!("lsx", lsx_vpickve2gr_b, is::simd_extract, m128i, i8x16, i32, 4);
254impl_vug!("lsx", lsx_vpickve2gr_h, is::simd_extract, m128i, i16x8, i32, 3);
255impl_vug!("lsx", lsx_vpickve2gr_w, is::simd_extract, m128i, i32x4, i32, 2);
256impl_vug!("lsx", lsx_vpickve2gr_d, is::simd_extract, m128i, i64x2, i64, 1);
257impl_vug!("lsx", lsx_vpickve2gr_bu, is::simd_extract, m128i, u8x16, u32, 4);
258impl_vug!("lsx", lsx_vpickve2gr_hu, is::simd_extract, m128i, u16x8, u32, 3);
259impl_vug!("lsx", lsx_vpickve2gr_wu, is::simd_extract, m128i, u32x4, u32, 2);
260impl_vug!("lsx", lsx_vpickve2gr_du, is::simd_extract, m128i, u64x2, u64, 1);
261
262impl_vsv!("lsx", lsx_vseqi_b, is::simd_eq, m128i, i8x16, 5);
263impl_vsv!("lsx", lsx_vseqi_h, is::simd_eq, m128i, i16x8, 5);
264impl_vsv!("lsx", lsx_vseqi_w, is::simd_eq, m128i, i32x4, 5);
265impl_vsv!("lsx", lsx_vseqi_d, is::simd_eq, m128i, i64x2, 5);
266impl_vsv!("lsx", lsx_vslti_b, is::simd_lt, m128i, i8x16, 5);
267impl_vsv!("lsx", lsx_vslti_h, is::simd_lt, m128i, i16x8, 5);
268impl_vsv!("lsx", lsx_vslti_w, is::simd_lt, m128i, i32x4, 5);
269impl_vsv!("lsx", lsx_vslti_d, is::simd_lt, m128i, i64x2, 5);
270impl_vsv!("lsx", lsx_vslei_b, is::simd_le, m128i, i8x16, 5);
271impl_vsv!("lsx", lsx_vslei_h, is::simd_le, m128i, i16x8, 5);
272impl_vsv!("lsx", lsx_vslei_w, is::simd_le, m128i, i32x4, 5);
273impl_vsv!("lsx", lsx_vslei_d, is::simd_le, m128i, i64x2, 5);
274impl_vsv!("lsx", lsx_vmaxi_b, cs::simd_imax, m128i, i8x16, 5);
275impl_vsv!("lsx", lsx_vmaxi_h, cs::simd_imax, m128i, i16x8, 5);
276impl_vsv!("lsx", lsx_vmaxi_w, cs::simd_imax, m128i, i32x4, 5);
277impl_vsv!("lsx", lsx_vmaxi_d, cs::simd_imax, m128i, i64x2, 5);
278impl_vsv!("lsx", lsx_vmini_b, cs::simd_imin, m128i, i8x16, 5);
279impl_vsv!("lsx", lsx_vmini_h, cs::simd_imin, m128i, i16x8, 5);
280impl_vsv!("lsx", lsx_vmini_w, cs::simd_imin, m128i, i32x4, 5);
281impl_vsv!("lsx", lsx_vmini_d, cs::simd_imin, m128i, i64x2, 5);
282
283impl_vvvv!("lsx", lsx_vmadd_b, ls::simd_madd, m128i, i8x16);
284impl_vvvv!("lsx", lsx_vmadd_h, ls::simd_madd, m128i, i16x8);
285impl_vvvv!("lsx", lsx_vmadd_w, ls::simd_madd, m128i, i32x4);
286impl_vvvv!("lsx", lsx_vmadd_d, ls::simd_madd, m128i, i64x2);
287impl_vvvv!("lsx", lsx_vmsub_b, ls::simd_msub, m128i, i8x16);
288impl_vvvv!("lsx", lsx_vmsub_h, ls::simd_msub, m128i, i16x8);
289impl_vvvv!("lsx", lsx_vmsub_w, ls::simd_msub, m128i, i32x4);
290impl_vvvv!("lsx", lsx_vmsub_d, ls::simd_msub, m128i, i64x2);
291impl_vvvv!("lsx", lsx_vfmadd_s, is::simd_fma, m128, f32x4);
292impl_vvvv!("lsx", lsx_vfmadd_d, is::simd_fma, m128d, f64x2);
293impl_vvvv!("lsx", lsx_vfmsub_s, ls::simd_fmsub, m128, f32x4);
294impl_vvvv!("lsx", lsx_vfmsub_d, ls::simd_fmsub, m128d, f64x2);
295impl_vvvv!("lsx", lsx_vfnmadd_s, ls::simd_fnmadd, m128, f32x4);
296impl_vvvv!("lsx", lsx_vfnmadd_d, ls::simd_fnmadd, m128d, f64x2);
297impl_vvvv!("lsx", lsx_vfnmsub_s, ls::simd_fnmsub, m128, f32x4);
298impl_vvvv!("lsx", lsx_vfnmsub_d, ls::simd_fnmsub, m128d, f64x2);
299
300impl_vugv!("lsx", lsx_vinsgr2vr_b, is::simd_insert, m128i, i8x16, i32, 4);
301impl_vugv!("lsx", lsx_vinsgr2vr_h, is::simd_insert, m128i, i16x8, i32, 3);
302impl_vugv!("lsx", lsx_vinsgr2vr_w, is::simd_insert, m128i, i32x4, i32, 2);
303impl_vugv!("lsx", lsx_vinsgr2vr_d, is::simd_insert, m128i, i64x2, i64, 1);