Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
simde
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
simde
Commits
2ad64c9f
Commit
2ad64c9f
authored
Dec 05, 2024
by
jinboson
Committed by
GitHub
Dec 05, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
x86 avx2: add loongarch lasx optimized implementations (#1241)
parent
5cae2261
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
434 additions
and
55 deletions
+434
-55
simde-features.h
simde-features.h
+2
-1
x86/avx2.h
x86/avx2.h
+432
-54
No files found.
simde-features.h
View file @
2ad64c9f
...
@@ -553,7 +553,8 @@
...
@@ -553,7 +553,8 @@
defined(SIMDE_WASM_SIMD128_NATIVE) || \
defined(SIMDE_WASM_SIMD128_NATIVE) || \
defined(SIMDE_POWER_ALTIVEC_P5_NATIVE) || \
defined(SIMDE_POWER_ALTIVEC_P5_NATIVE) || \
defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) || \
defined(SIMDE_ZARCH_ZVECTOR_13_NATIVE) || \
defined(SIMDE_MIPS_MSA_NATIVE)
defined(SIMDE_MIPS_MSA_NATIVE) || \
defined(SIMDE_LOONGARCH_LSX_NATIVE)
#define SIMDE_NATURAL_VECTOR_SIZE (128)
#define SIMDE_NATURAL_VECTOR_SIZE (128)
#elif defined(SIMDE_X86_SSE_NATIVE)
#elif defined(SIMDE_X86_SSE_NATIVE)
#define SIMDE_NATURAL_FLOAT_VECTOR_SIZE (128)
#define SIMDE_NATURAL_FLOAT_VECTOR_SIZE (128)
...
...
x86/avx2.h
View file @
2ad64c9f
...
@@ -41,6 +41,8 @@ simde__m256i
...
@@ -41,6 +41,8 @@ simde__m256i
simde_mm256_abs_epi8
(
simde__m256i
a
)
{
simde_mm256_abs_epi8
(
simde__m256i
a
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_abs_epi8
(
a
);
return
_mm256_abs_epi8
(
a
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvabsd_b
(
a
,
__lasx_xvreplgr2vr_b
(
0
));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -69,6 +71,8 @@ simde__m256i
...
@@ -69,6 +71,8 @@ simde__m256i
simde_mm256_abs_epi16
(
simde__m256i
a
)
{
simde_mm256_abs_epi16
(
simde__m256i
a
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_abs_epi16
(
a
);
return
_mm256_abs_epi16
(
a
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvabsd_h
(
a
,
__lasx_xvreplgr2vr_h
(
0
));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -97,6 +101,8 @@ simde__m256i
...
@@ -97,6 +101,8 @@ simde__m256i
simde_mm256_abs_epi32
(
simde__m256i
a
)
{
simde_mm256_abs_epi32
(
simde__m256i
a
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_abs_epi32
(
a
);
return
_mm256_abs_epi32
(
a
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvabsd_w
(
a
,
__lasx_xvreplgr2vr_w
(
0
));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -125,6 +131,8 @@ simde__m256i
...
@@ -125,6 +131,8 @@ simde__m256i
simde_mm256_add_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_add_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_add_epi8
(
a
,
b
);
return
_mm256_add_epi8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvadd_b
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -156,6 +164,8 @@ simde__m256i
...
@@ -156,6 +164,8 @@ simde__m256i
simde_mm256_add_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_add_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_add_epi16
(
a
,
b
);
return
_mm256_add_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvadd_h
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -201,6 +211,8 @@ simde__m256i
...
@@ -201,6 +211,8 @@ simde__m256i
simde_mm256_add_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_add_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_add_epi32
(
a
,
b
);
return
_mm256_add_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvadd_w
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -246,6 +258,8 @@ simde__m256i
...
@@ -246,6 +258,8 @@ simde__m256i
simde_mm256_add_epi64
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_add_epi64
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_add_epi64
(
a
,
b
);
return
_mm256_add_epi64
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvadd_d
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -318,6 +332,8 @@ simde__m256i
...
@@ -318,6 +332,8 @@ simde__m256i
simde_mm256_and_si256
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_and_si256
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_and_si256
(
a
,
b
);
return
_mm256_and_si256
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvand_v
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -349,6 +365,8 @@ simde__m256i
...
@@ -349,6 +365,8 @@ simde__m256i
simde_mm256_andnot_si256
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_andnot_si256
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_andnot_si256
(
a
,
b
);
return
_mm256_andnot_si256
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvandn_v
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -378,6 +396,8 @@ simde__m256i
...
@@ -378,6 +396,8 @@ simde__m256i
simde_mm256_adds_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_adds_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_adds_epi8
(
a
,
b
);
return
_mm256_adds_epi8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsadd_b
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -407,6 +427,8 @@ simde__m256i
...
@@ -407,6 +427,8 @@ simde__m256i
simde_mm256_adds_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_adds_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_adds_epi16
(
a
,
b
);
return
_mm256_adds_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsadd_h
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -450,6 +472,8 @@ simde__m256i
...
@@ -450,6 +472,8 @@ simde__m256i
simde_mm256_adds_epu8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_adds_epu8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_adds_epu8
(
a
,
b
);
return
_mm256_adds_epu8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsadd_bu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -479,6 +503,8 @@ simde__m256i
...
@@ -479,6 +503,8 @@ simde__m256i
simde_mm256_adds_epu16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_adds_epu16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_adds_epu16
(
a
,
b
);
return
_mm256_adds_epu16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsadd_hu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -508,6 +534,8 @@ simde__m256i
...
@@ -508,6 +534,8 @@ simde__m256i
simde_mm256_avg_epu8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_avg_epu8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_avg_epu8
(
a
,
b
);
return
_mm256_avg_epu8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvavgr_bu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -532,6 +560,8 @@ simde__m256i
...
@@ -532,6 +560,8 @@ simde__m256i
simde_mm256_avg_epu16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_avg_epu16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_avg_epu16
(
a
,
b
);
return
_mm256_avg_epu16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvavgr_hu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -569,6 +599,9 @@ simde_mm_blend_epi32(simde__m128i a, simde__m128i b, const int imm8)
...
@@ -569,6 +599,9 @@ simde_mm_blend_epi32(simde__m128i a, simde__m128i b, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm_blend_epi32(a, b, imm8) _mm_blend_epi32(a, b, imm8)
# define simde_mm_blend_epi32(a, b, imm8) _mm_blend_epi32(a, b, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm_blend_epi32(a, b, imm8) __lsx_vbitsel_v(a, b, \
simde_mm_set_epi32(-((imm8 >> 3) & 1), -((imm8 >> 2) & 1), -((imm8 >> 1)& 1), -(imm8 & 1)))
#elif SIMDE_NATURAL_FLOAT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_FLOAT_VECTOR_SIZE_LE(128)
# define simde_mm_blend_epi32(a, b, imm8) \
# define simde_mm_blend_epi32(a, b, imm8) \
simde_mm_castps_si128(simde_mm_blend_ps(simde_mm_castsi128_ps(a), simde_mm_castsi128_ps(b), (imm8)))
simde_mm_castps_si128(simde_mm_blend_ps(simde_mm_castsi128_ps(a), simde_mm_castsi128_ps(b), (imm8)))
...
@@ -596,8 +629,12 @@ simde_mm256_blend_epi16(simde__m256i a, simde__m256i b, const int imm8)
...
@@ -596,8 +629,12 @@ simde_mm256_blend_epi16(simde__m256i a, simde__m256i b, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE) && defined(SIMDE_BUG_CLANG_REV_234560)
#if defined(SIMDE_X86_AVX2_NATIVE) && defined(SIMDE_BUG_CLANG_REV_234560)
# define simde_mm256_blend_epi16(a, b, imm8) _mm256_castpd_si256(_mm256_blend_epi16(a, b, imm8))
# define simde_mm256_blend_epi16(a, b, imm8) _mm256_castpd_si256(_mm256_blend_epi16(a, b, imm8))
#elif defined(SIMDE_X86_AVX2_NATIVE)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_blend_epi16(a, b, imm8) _mm256_blend_epi16(a, b, imm8)
# undef sr
# define sr(i, j) -((i >> j) & 1)
# define simde_mm256_blend_epi16(a, b, imm8) __lasx_xvbitsel_v(a, b, \
simde_mm256_set_epi16(sr(imm8, 7), sr(imm8, 6), sr(imm8, 5), sr(imm8, 4), sr(imm8, 3), sr(imm8, 2), sr(imm8, 1), sr(imm8, 0), \
sr(imm8, 7), sr(imm8, 6), sr(imm8, 5), sr(imm8, 4), sr(imm8, 3), sr(imm8, 2), sr(imm8, 1), sr(imm8, 0)))
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
# define simde_mm256_blend_epi16(a, b, imm8) \
# define simde_mm256_blend_epi16(a, b, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -628,6 +665,11 @@ simde_mm256_blend_epi32(simde__m256i a, simde__m256i b, const int imm8)
...
@@ -628,6 +665,11 @@ simde_mm256_blend_epi32(simde__m256i a, simde__m256i b, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_blend_epi32(a, b, imm8) _mm256_blend_epi32(a, b, imm8)
# define simde_mm256_blend_epi32(a, b, imm8) _mm256_blend_epi32(a, b, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# undef sr
# define sr(i, j) -((i >> j) & 1)
# define simde_mm256_blend_epi32(a, b, imm8) __lasx_xvbitsel_v(a, b, \
simde_mm256_set_epi32(sr(imm8, 7), sr(imm8, 6), sr(imm8, 5), sr(imm8, 4), sr(imm8, 3), sr(imm8, 2), sr(imm8, 1), sr(imm8, 0)))
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
# define simde_mm256_blend_epi32(a, b, imm8) \
# define simde_mm256_blend_epi32(a, b, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -645,6 +687,8 @@ simde__m256i
...
@@ -645,6 +687,8 @@ simde__m256i
simde_mm256_blendv_epi8
(
simde__m256i
a
,
simde__m256i
b
,
simde__m256i
mask
)
{
simde_mm256_blendv_epi8
(
simde__m256i
a
,
simde__m256i
b
,
simde__m256i
mask
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_blendv_epi8
(
a
,
b
,
mask
);
return
_mm256_blendv_epi8
(
a
,
b
,
mask
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvbitsel_v
(
a
,
b
,
__lasx_xvslti_b
(
mask
,
0
));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -682,6 +726,8 @@ simde__m128i
...
@@ -682,6 +726,8 @@ simde__m128i
simde_mm_broadcastb_epi8
(
simde__m128i
a
)
{
simde_mm_broadcastb_epi8
(
simde__m128i
a
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm_broadcastb_epi8
(
a
);
return
_mm_broadcastb_epi8
(
a
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lsx_vreplvei_b
(
a
,
0
);
#else
#else
simde__m128i_private
r_
;
simde__m128i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
...
@@ -704,6 +750,8 @@ simde__m256i
...
@@ -704,6 +750,8 @@ simde__m256i
simde_mm256_broadcastb_epi8
(
simde__m128i
a
)
{
simde_mm256_broadcastb_epi8
(
simde__m128i
a
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_broadcastb_epi8
(
a
);
return
_mm256_broadcastb_epi8
(
a
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvreplgr2vr_b
(
__lsx_vpickve2gr_b
(
a
,
0
));
#else
#else
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
...
@@ -726,6 +774,8 @@ simde__m128i
...
@@ -726,6 +774,8 @@ simde__m128i
simde_mm_broadcastw_epi16
(
simde__m128i
a
)
{
simde_mm_broadcastw_epi16
(
simde__m128i
a
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm_broadcastw_epi16
(
a
);
return
_mm_broadcastw_epi16
(
a
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lsx_vreplvei_h
(
a
,
0
);
#else
#else
simde__m128i_private
r_
;
simde__m128i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
...
@@ -748,6 +798,8 @@ simde__m256i
...
@@ -748,6 +798,8 @@ simde__m256i
simde_mm256_broadcastw_epi16
(
simde__m128i
a
)
{
simde_mm256_broadcastw_epi16
(
simde__m128i
a
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_broadcastw_epi16
(
a
);
return
_mm256_broadcastw_epi16
(
a
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvreplgr2vr_h
(
__lsx_vpickve2gr_h
(
a
,
0
));
#else
#else
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
...
@@ -770,6 +822,8 @@ simde__m128i
...
@@ -770,6 +822,8 @@ simde__m128i
simde_mm_broadcastd_epi32
(
simde__m128i
a
)
{
simde_mm_broadcastd_epi32
(
simde__m128i
a
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm_broadcastd_epi32
(
a
);
return
_mm_broadcastd_epi32
(
a
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lsx_vreplvei_w
(
a
,
0
);
#else
#else
simde__m128i_private
r_
;
simde__m128i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
...
@@ -792,6 +846,8 @@ simde__m256i
...
@@ -792,6 +846,8 @@ simde__m256i
simde_mm256_broadcastd_epi32
(
simde__m128i
a
)
{
simde_mm256_broadcastd_epi32
(
simde__m128i
a
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_broadcastd_epi32
(
a
);
return
_mm256_broadcastd_epi32
(
a
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvreplgr2vr_w
(
__lsx_vpickve2gr_w
(
a
,
0
));
#else
#else
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
...
@@ -814,6 +870,8 @@ simde__m128i
...
@@ -814,6 +870,8 @@ simde__m128i
simde_mm_broadcastq_epi64
(
simde__m128i
a
)
{
simde_mm_broadcastq_epi64
(
simde__m128i
a
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm_broadcastq_epi64
(
a
);
return
_mm_broadcastq_epi64
(
a
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lsx_vreplvei_d
(
a
,
0
);
#else
#else
simde__m128i_private
r_
;
simde__m128i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
...
@@ -836,6 +894,8 @@ simde__m256i
...
@@ -836,6 +894,8 @@ simde__m256i
simde_mm256_broadcastq_epi64
(
simde__m128i
a
)
{
simde_mm256_broadcastq_epi64
(
simde__m128i
a
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_broadcastq_epi64
(
a
);
return
_mm256_broadcastq_epi64
(
a
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvreplgr2vr_d
(
__lsx_vpickve2gr_d
(
a
,
0
));
#else
#else
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
...
@@ -864,7 +924,9 @@ simde_mm_broadcastss_ps (simde__m128 a) {
...
@@ -864,7 +924,9 @@ simde_mm_broadcastss_ps (simde__m128 a) {
simde__m128_private
r_
;
simde__m128_private
r_
;
simde__m128_private
a_
=
simde__m128_to_private
(
a
);
simde__m128_private
a_
=
simde__m128_to_private
(
a
);
#if defined(SIMDE_SHUFFLE_VECTOR_)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
lsx_i64
=
__lsx_vreplvei_w
(
a_
.
lsx_i64
,
0
);
#elif defined(SIMDE_SHUFFLE_VECTOR_)
r_
.
f32
=
SIMDE_SHUFFLE_VECTOR_
(
32
,
16
,
a_
.
f32
,
a_
.
f32
,
0
,
0
,
0
,
0
);
r_
.
f32
=
SIMDE_SHUFFLE_VECTOR_
(
32
,
16
,
a_
.
f32
,
a_
.
f32
,
0
,
0
,
0
,
0
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
...
@@ -893,6 +955,8 @@ simde_mm256_broadcastss_ps (simde__m128 a) {
...
@@ -893,6 +955,8 @@ simde_mm256_broadcastss_ps (simde__m128 a) {
#if defined(SIMDE_X86_AVX_NATIVE)
#if defined(SIMDE_X86_AVX_NATIVE)
__m128
tmp
=
_mm_permute_ps
(
a_
.
n
,
0
);
__m128
tmp
=
_mm_permute_ps
(
a_
.
n
,
0
);
r_
.
n
=
_mm256_insertf128_ps
(
_mm256_castps128_ps256
(
tmp
),
tmp
,
1
);
r_
.
n
=
_mm256_insertf128_ps
(
_mm256_castps128_ps256
(
tmp
),
tmp
,
1
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
i256
=
__lasx_xvreplgr2vr_w
(
__lsx_vpickve2gr_w
(
a_
.
lsx_i64
,
0
));
#elif HEDLEY_HAS_BUILTIN(__builtin_shufflevector)
#elif HEDLEY_HAS_BUILTIN(__builtin_shufflevector)
r_
.
f32
=
__builtin_shufflevector
(
a_
.
f32
,
a_
.
f32
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
);
r_
.
f32
=
__builtin_shufflevector
(
a_
.
f32
,
a_
.
f32
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
);
#elif SIMDE_NATURAL_FLOAT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_FLOAT_VECTOR_SIZE_LE(128)
...
@@ -931,10 +995,14 @@ simde_mm256_broadcastsd_pd (simde__m128d a) {
...
@@ -931,10 +995,14 @@ simde_mm256_broadcastsd_pd (simde__m128d a) {
simde__m256d_private
r_
;
simde__m256d_private
r_
;
simde__m128d_private
a_
=
simde__m128d_to_private
(
a
);
simde__m128d_private
a_
=
simde__m128d_to_private
(
a
);
SIMDE_VECTORIZE
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
f64
)
/
sizeof
(
r_
.
f64
[
0
]))
;
i
++
)
{
r_
.
i256
=
__lasx_xvreplgr2vr_d
(
__lsx_vpickve2gr_d
(
a_
.
lsx_i64
,
0
));
r_
.
f64
[
i
]
=
a_
.
f64
[
0
];
#else
}
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
f64
)
/
sizeof
(
r_
.
f64
[
0
]))
;
i
++
)
{
r_
.
f64
[
i
]
=
a_
.
f64
[
0
];
}
#endif
return
simde__m256d_from_private
(
r_
);
return
simde__m256d_from_private
(
r_
);
#endif
#endif
...
@@ -954,7 +1022,10 @@ simde_mm256_broadcastsi128_si256 (simde__m128i a) {
...
@@ -954,7 +1022,10 @@ simde_mm256_broadcastsi128_si256 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
#if SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i256
=
__lasx_xvpermi_q
(
r_
.
i256
,
r_
.
i256
,
0x00
);
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
m128i_private
[
1
]
=
a_
;
r_
.
m128i_private
[
1
]
=
a_
;
#else
#else
...
@@ -1007,6 +1078,8 @@ simde_mm256_bslli_epi128 (simde__m256i a, const int imm8)
...
@@ -1007,6 +1078,8 @@ simde_mm256_bslli_epi128 (simde__m256i a, const int imm8)
(!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(4,8,0)) && \
(!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(4,8,0)) && \
SIMDE_DETECT_CLANG_VERSION_CHECK(3,7,0)
SIMDE_DETECT_CLANG_VERSION_CHECK(3,7,0)
#define simde_mm256_bslli_epi128(a, imm8) _mm256_bslli_epi128(a, imm8)
#define simde_mm256_bslli_epi128(a, imm8) _mm256_bslli_epi128(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
#define simde_mm256_bslli_epi128(a, imm8) (imm8 > 15 ? __lasx_xvreplgr2vr_d(0) : __lasx_xvbsll_v(a, imm8))
#endif
#endif
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#undef _mm256_bslli_epi128
#undef _mm256_bslli_epi128
...
@@ -1045,6 +1118,8 @@ simde_mm256_bsrli_epi128 (simde__m256i a, const int imm8)
...
@@ -1045,6 +1118,8 @@ simde_mm256_bsrli_epi128 (simde__m256i a, const int imm8)
(!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(4,8,0)) && \
(!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(4,8,0)) && \
SIMDE_DETECT_CLANG_VERSION_CHECK(3,7,0)
SIMDE_DETECT_CLANG_VERSION_CHECK(3,7,0)
#define simde_mm256_bsrli_epi128(a, imm8) _mm256_bsrli_epi128(a, imm8)
#define simde_mm256_bsrli_epi128(a, imm8) _mm256_bsrli_epi128(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
#define simde_mm256_bslli_epi128(a, imm8) (imm8 > 15 ? __lasx_xvreplgr2vr_d(0) : __lasx_xvbsll_v(a, imm8))
#endif
#endif
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#undef _mm256_bsrli_epi128
#undef _mm256_bsrli_epi128
...
@@ -1056,6 +1131,8 @@ simde__m256i
...
@@ -1056,6 +1131,8 @@ simde__m256i
simde_mm256_cmpeq_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_cmpeq_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_cmpeq_epi8
(
a
,
b
);
return
_mm256_cmpeq_epi8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvseq_b
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -1085,6 +1162,8 @@ simde__m256i
...
@@ -1085,6 +1162,8 @@ simde__m256i
simde_mm256_cmpeq_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_cmpeq_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_cmpeq_epi16
(
a
,
b
);
return
_mm256_cmpeq_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvseq_h
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -1114,6 +1193,8 @@ simde__m256i
...
@@ -1114,6 +1193,8 @@ simde__m256i
simde_mm256_cmpeq_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_cmpeq_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_cmpeq_epi32
(
a
,
b
);
return
_mm256_cmpeq_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvseq_w
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -1143,6 +1224,8 @@ simde__m256i
...
@@ -1143,6 +1224,8 @@ simde__m256i
simde_mm256_cmpeq_epi64
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_cmpeq_epi64
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_cmpeq_epi64
(
a
,
b
);
return
_mm256_cmpeq_epi64
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvseq_d
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -1172,6 +1255,8 @@ simde__m256i
...
@@ -1172,6 +1255,8 @@ simde__m256i
simde_mm256_cmpgt_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_cmpgt_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_cmpgt_epi8
(
a
,
b
);
return
_mm256_cmpgt_epi8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvslt_b
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -1203,6 +1288,8 @@ simde__m256i
...
@@ -1203,6 +1288,8 @@ simde__m256i
simde_mm256_cmpgt_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_cmpgt_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_cmpgt_epi16
(
a
,
b
);
return
_mm256_cmpgt_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvslt_h
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -1234,6 +1321,8 @@ simde__m256i
...
@@ -1234,6 +1321,8 @@ simde__m256i
simde_mm256_cmpgt_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_cmpgt_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_cmpgt_epi32
(
a
,
b
);
return
_mm256_cmpgt_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvslt_w
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -1265,6 +1354,8 @@ simde__m256i
...
@@ -1265,6 +1354,8 @@ simde__m256i
simde_mm256_cmpgt_epi64
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_cmpgt_epi64
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_cmpgt_epi64
(
a
,
b
);
return
_mm256_cmpgt_epi64
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvslt_d
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -1300,7 +1391,11 @@ simde_mm256_cvtepi8_epi16 (simde__m128i a) {
...
@@ -1300,7 +1391,11 @@ simde_mm256_cvtepi8_epi16 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
#if defined(SIMDE_CONVERT_VECTOR_)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i256
=
__lasx_xvpermi_d
(
r_
.
i256
,
0xd8
);
r_
.
i256
=
__lasx_xvsllwil_h_b
(
r_
.
i256
,
0
);
#elif defined(SIMDE_CONVERT_VECTOR_)
SIMDE_CONVERT_VECTOR_
(
r_
.
i16
,
a_
.
i8
);
SIMDE_CONVERT_VECTOR_
(
r_
.
i16
,
a_
.
i8
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
...
@@ -1326,7 +1421,12 @@ simde_mm256_cvtepi8_epi32 (simde__m128i a) {
...
@@ -1326,7 +1421,12 @@ simde_mm256_cvtepi8_epi32 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
#if defined(SIMDE_CONVERT_VECTOR_)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i256
=
__lasx_xvsllwil_h_b
(
r_
.
i256
,
0
);
r_
.
i256
=
__lasx_xvpermi_d
(
r_
.
i256
,
0xd8
);
r_
.
i256
=
__lasx_xvsllwil_w_h
(
r_
.
i256
,
0
);
#elif defined(SIMDE_CONVERT_VECTOR_)
SIMDE_CONVERT_VECTOR_
(
r_
.
i32
,
a_
.
m64_private
[
0
].
i8
);
SIMDE_CONVERT_VECTOR_
(
r_
.
i32
,
a_
.
m64_private
[
0
].
i8
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
...
@@ -1352,10 +1452,18 @@ simde_mm256_cvtepi8_epi64 (simde__m128i a) {
...
@@ -1352,10 +1452,18 @@ simde_mm256_cvtepi8_epi64 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
SIMDE_VECTORIZE
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
i64
)
/
sizeof
(
r_
.
i64
[
0
]))
;
i
++
)
{
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i64
[
i
]
=
a_
.
i8
[
i
];
r_
.
i256
=
__lasx_xvsllwil_h_b
(
r_
.
i256
,
0
);
}
r_
.
i256
=
__lasx_xvsllwil_w_h
(
r_
.
i256
,
0
);
r_
.
i256
=
__lasx_xvpermi_d
(
r_
.
i256
,
0xd8
);
r_
.
i256
=
__lasx_xvsllwil_d_w
(
r_
.
i256
,
0
);
#else
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
i64
)
/
sizeof
(
r_
.
i64
[
0
]))
;
i
++
)
{
r_
.
i64
[
i
]
=
a_
.
i8
[
i
];
}
#endif
return
simde__m256i_from_private
(
r_
);
return
simde__m256i_from_private
(
r_
);
#endif
#endif
...
@@ -1374,7 +1482,11 @@ simde_mm256_cvtepi16_epi32 (simde__m128i a) {
...
@@ -1374,7 +1482,11 @@ simde_mm256_cvtepi16_epi32 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
#if defined(SIMDE_CONVERT_VECTOR_)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i256
=
__lasx_xvpermi_d
(
r_
.
i256
,
0xd8
);
r_
.
i256
=
__lasx_xvsllwil_w_h
(
r_
.
i256
,
0
);
#elif defined(SIMDE_CONVERT_VECTOR_)
SIMDE_CONVERT_VECTOR_
(
r_
.
i32
,
a_
.
i16
);
SIMDE_CONVERT_VECTOR_
(
r_
.
i32
,
a_
.
i16
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
...
@@ -1400,7 +1512,12 @@ simde_mm256_cvtepi16_epi64 (simde__m128i a) {
...
@@ -1400,7 +1512,12 @@ simde_mm256_cvtepi16_epi64 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
#if defined(SIMDE_CONVERT_VECTOR_)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i256
=
__lasx_xvsllwil_w_h
(
r_
.
i256
,
0
);
r_
.
i256
=
__lasx_xvpermi_d
(
r_
.
i256
,
0xd8
);
r_
.
i256
=
__lasx_xvsllwil_d_w
(
r_
.
i256
,
0
);
#elif defined(SIMDE_CONVERT_VECTOR_)
SIMDE_CONVERT_VECTOR_
(
r_
.
i64
,
a_
.
m64_private
[
0
].
i16
);
SIMDE_CONVERT_VECTOR_
(
r_
.
i64
,
a_
.
m64_private
[
0
].
i16
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
...
@@ -1426,7 +1543,11 @@ simde_mm256_cvtepi32_epi64 (simde__m128i a) {
...
@@ -1426,7 +1543,11 @@ simde_mm256_cvtepi32_epi64 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
#if defined(SIMDE_CONVERT_VECTOR_)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i256
=
__lasx_xvpermi_d
(
r_
.
i256
,
0xd8
);
r_
.
i256
=
__lasx_xvsllwil_d_w
(
r_
.
i256
,
0
);
#elif defined(SIMDE_CONVERT_VECTOR_)
SIMDE_CONVERT_VECTOR_
(
r_
.
i64
,
a_
.
i32
);
SIMDE_CONVERT_VECTOR_
(
r_
.
i64
,
a_
.
i32
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
...
@@ -1452,7 +1573,11 @@ simde_mm256_cvtepu8_epi16 (simde__m128i a) {
...
@@ -1452,7 +1573,11 @@ simde_mm256_cvtepu8_epi16 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
#if defined(SIMDE_CONVERT_VECTOR_)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i256
=
__lasx_xvpermi_d
(
r_
.
i256
,
0xd8
);
r_
.
i256
=
__lasx_xvsllwil_hu_bu
(
r_
.
i256
,
0
);
#elif defined(SIMDE_CONVERT_VECTOR_)
SIMDE_CONVERT_VECTOR_
(
r_
.
i16
,
a_
.
u8
);
SIMDE_CONVERT_VECTOR_
(
r_
.
i16
,
a_
.
u8
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
...
@@ -1478,7 +1603,12 @@ simde_mm256_cvtepu8_epi32 (simde__m128i a) {
...
@@ -1478,7 +1603,12 @@ simde_mm256_cvtepu8_epi32 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
#if defined(SIMDE_CONVERT_VECTOR_)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i256
=
__lasx_xvsllwil_hu_bu
(
r_
.
i256
,
0
);
r_
.
i256
=
__lasx_xvpermi_d
(
r_
.
i256
,
0xd8
);
r_
.
i256
=
__lasx_xvsllwil_wu_hu
(
r_
.
i256
,
0
);
#elif defined(SIMDE_CONVERT_VECTOR_)
SIMDE_CONVERT_VECTOR_
(
r_
.
i32
,
a_
.
m64_private
[
0
].
u8
);
SIMDE_CONVERT_VECTOR_
(
r_
.
i32
,
a_
.
m64_private
[
0
].
u8
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
...
@@ -1504,10 +1634,18 @@ simde_mm256_cvtepu8_epi64 (simde__m128i a) {
...
@@ -1504,10 +1634,18 @@ simde_mm256_cvtepu8_epi64 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
SIMDE_VECTORIZE
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
i64
)
/
sizeof
(
r_
.
i64
[
0
]))
;
i
++
)
{
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i64
[
i
]
=
a_
.
u8
[
i
];
r_
.
i256
=
__lasx_xvsllwil_hu_bu
(
r_
.
i256
,
0
);
}
r_
.
i256
=
__lasx_xvsllwil_wu_hu
(
r_
.
i256
,
0
);
r_
.
i256
=
__lasx_xvpermi_d
(
r_
.
i256
,
0xd8
);
r_
.
i256
=
__lasx_xvsllwil_du_wu
(
r_
.
i256
,
0
);
#else
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
i64
)
/
sizeof
(
r_
.
i64
[
0
]))
;
i
++
)
{
r_
.
i64
[
i
]
=
a_
.
u8
[
i
];
}
#endif
return
simde__m256i_from_private
(
r_
);
return
simde__m256i_from_private
(
r_
);
#endif
#endif
...
@@ -1526,7 +1664,11 @@ simde_mm256_cvtepu16_epi32 (simde__m128i a) {
...
@@ -1526,7 +1664,11 @@ simde_mm256_cvtepu16_epi32 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
#if defined(SIMDE_CONVERT_VECTOR_)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i256
=
__lasx_xvpermi_d
(
r_
.
i256
,
0xd8
);
r_
.
i256
=
__lasx_xvsllwil_wu_hu
(
r_
.
i256
,
0
);
#elif defined(SIMDE_CONVERT_VECTOR_)
SIMDE_CONVERT_VECTOR_
(
r_
.
i32
,
a_
.
u16
);
SIMDE_CONVERT_VECTOR_
(
r_
.
i32
,
a_
.
u16
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
...
@@ -1552,7 +1694,12 @@ simde_mm256_cvtepu16_epi64 (simde__m128i a) {
...
@@ -1552,7 +1694,12 @@ simde_mm256_cvtepu16_epi64 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
#if defined(SIMDE_CONVERT_VECTOR_)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i256
=
__lasx_xvsllwil_wu_hu
(
r_
.
i256
,
0
);
r_
.
i256
=
__lasx_xvpermi_d
(
r_
.
i256
,
0xd8
);
r_
.
i256
=
__lasx_xvsllwil_du_wu
(
r_
.
i256
,
0
);
#elif defined(SIMDE_CONVERT_VECTOR_)
SIMDE_CONVERT_VECTOR_
(
r_
.
i64
,
a_
.
m64_private
[
0
].
u16
);
SIMDE_CONVERT_VECTOR_
(
r_
.
i64
,
a_
.
m64_private
[
0
].
u16
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
...
@@ -1578,7 +1725,11 @@ simde_mm256_cvtepu32_epi64 (simde__m128i a) {
...
@@ -1578,7 +1725,11 @@ simde_mm256_cvtepu32_epi64 (simde__m128i a) {
simde__m256i_private
r_
;
simde__m256i_private
r_
;
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
#if defined(SIMDE_CONVERT_VECTOR_)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
m128i_private
[
0
]
=
a_
;
r_
.
i256
=
__lasx_xvpermi_d
(
r_
.
i256
,
0xd8
);
r_
.
i256
=
__lasx_xvsllwil_du_wu
(
r_
.
i256
,
0
);
#elif defined(SIMDE_CONVERT_VECTOR_)
SIMDE_CONVERT_VECTOR_
(
r_
.
i64
,
a_
.
u32
);
SIMDE_CONVERT_VECTOR_
(
r_
.
i64
,
a_
.
u32
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
...
@@ -2726,6 +2877,8 @@ simde__m256i
...
@@ -2726,6 +2877,8 @@ simde__m256i
simde_mm256_madd_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_madd_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_madd_epi16
(
a
,
b
);
return
_mm256_madd_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmaddwod_w_h
(
__lasx_xvmulwev_w_h
(
a
,
b
),
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -2770,6 +2923,8 @@ simde__m256i
...
@@ -2770,6 +2923,8 @@ simde__m256i
simde_mm256_maddubs_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_maddubs_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_maddubs_epi16
(
a
,
b
);
return
_mm256_maddubs_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsadd_h
(
__lasx_xvmulwod_h_bu_b
(
a
,
b
),
__lasx_xvmulwev_h_bu_b
(
a
,
b
));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -2811,6 +2966,8 @@ simde_mm_maskload_epi32 (const int32_t mem_addr[HEDLEY_ARRAY_PARAM(4)], simde__m
...
@@ -2811,6 +2966,8 @@ simde_mm_maskload_epi32 (const int32_t mem_addr[HEDLEY_ARRAY_PARAM(4)], simde__m
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
mask_shr_
.
neon_i32
=
vshrq_n_s32
(
mask_
.
neon_i32
,
31
);
mask_shr_
.
neon_i32
=
vshrq_n_s32
(
mask_
.
neon_i32
,
31
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
mask_shr_
.
lsx_i64
=
__lsx_vsrli_w
(
mask_
.
lsx_i64
,
31
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
i32
)
/
sizeof
(
r_
.
i32
[
0
]))
;
i
++
)
{
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
i32
)
/
sizeof
(
r_
.
i32
[
0
]))
;
i
++
)
{
...
@@ -2833,17 +2990,27 @@ simde_mm_maskload_epi32 (const int32_t mem_addr[HEDLEY_ARRAY_PARAM(4)], simde__m
...
@@ -2833,17 +2990,27 @@ simde_mm_maskload_epi32 (const int32_t mem_addr[HEDLEY_ARRAY_PARAM(4)], simde__m
SIMDE_FUNCTION_ATTRIBUTES
SIMDE_FUNCTION_ATTRIBUTES
simde__m256i
simde__m256i
simde_mm256_maskload_epi32
(
const
int32_t
mem_addr
[
HEDLEY_ARRAY_PARAM
(
4
)],
simde__m256i
mask
)
{
simde_mm256_maskload_epi32
(
const
int32_t
mem_addr
[
HEDLEY_ARRAY_PARAM
(
8
)],
simde__m256i
mask
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_maskload_epi32
(
mem_addr
,
mask
);
return
_mm256_maskload_epi32
(
mem_addr
,
mask
);
#else
#else
simde__m256i_private
simde__m256i_private
mask_
=
simde__m256i_to_private
(
mask
),
mask_
=
simde__m256i_to_private
(
mask
),
r_
;
r_
,
mask_shr_
;
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
mask_shr_
.
i256
=
__lasx_xvsrli_w
(
mask_
.
i256
,
31
);
#else
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
i32
)
/
sizeof
(
r_
.
i32
[
0
]))
;
i
++
)
{
mask_shr_
.
i32
[
i
]
=
mask_
.
i32
[
i
]
>>
31
;
}
#endif
SIMDE_VECTORIZE
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
i32
)
/
sizeof
(
r_
.
i32
[
0
]))
;
i
++
)
{
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
i32
)
/
sizeof
(
r_
.
i32
[
0
]))
;
i
++
)
{
r_
.
i32
[
i
]
=
(
mask_
.
i32
[
i
]
>>
31
)
?
mem_addr
[
i
]
:
INT32_C
(
0
);
r_
.
i32
[
i
]
=
mask_shr_
.
i32
[
i
]
?
mem_addr
[
i
]
:
INT32_C
(
0
);
}
}
return
simde__m256i_from_private
(
r_
);
return
simde__m256i_from_private
(
r_
);
...
@@ -2867,6 +3034,8 @@ simde_mm_maskload_epi64 (const int64_t mem_addr[HEDLEY_ARRAY_PARAM(2)], simde__m
...
@@ -2867,6 +3034,8 @@ simde_mm_maskload_epi64 (const int64_t mem_addr[HEDLEY_ARRAY_PARAM(2)], simde__m
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
mask_shr_
.
neon_i64
=
vshrq_n_s64
(
mask_
.
neon_i64
,
63
);
mask_shr_
.
neon_i64
=
vshrq_n_s64
(
mask_
.
neon_i64
,
63
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
mask_shr_
.
lsx_i64
=
__lsx_vsrli_d
(
mask_
.
lsx_i64
,
63
);
#else
#else
SIMDE_VECTORIZE
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
mask_
.
i64
)
/
sizeof
(
mask_
.
i64
[
0
]))
;
i
++
)
{
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
mask_
.
i64
)
/
sizeof
(
mask_
.
i64
[
0
]))
;
i
++
)
{
...
@@ -2895,11 +3064,21 @@ simde_mm256_maskload_epi64 (const int64_t mem_addr[HEDLEY_ARRAY_PARAM(4)], simde
...
@@ -2895,11 +3064,21 @@ simde_mm256_maskload_epi64 (const int64_t mem_addr[HEDLEY_ARRAY_PARAM(4)], simde
#else
#else
simde__m256i_private
simde__m256i_private
mask_
=
simde__m256i_to_private
(
mask
),
mask_
=
simde__m256i_to_private
(
mask
),
r_
;
r_
,
mask_shr_
;
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
mask_shr_
.
i256
=
__lasx_xvsrli_d
(
mask_
.
i256
,
63
);
#else
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
i64
)
/
sizeof
(
r_
.
i64
[
0
]))
;
i
++
)
{
mask_shr_
.
i64
[
i
]
=
mask_
.
i64
[
i
]
>>
63
;
}
#endif
SIMDE_VECTORIZE
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
i64
)
/
sizeof
(
r_
.
i64
[
0
]))
;
i
++
)
{
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
r_
.
i64
)
/
sizeof
(
r_
.
i64
[
0
]))
;
i
++
)
{
r_
.
i64
[
i
]
=
(
mask_
.
i64
[
i
]
>>
63
)
?
mem_addr
[
i
]
:
INT64_C
(
0
);
r_
.
i64
[
i
]
=
mask_shr_
.
i64
[
i
]
?
mem_addr
[
i
]
:
INT64_C
(
0
);
}
}
return
simde__m256i_from_private
(
r_
);
return
simde__m256i_from_private
(
r_
);
...
@@ -2919,11 +3098,17 @@ simde_mm_maskstore_epi32 (int32_t mem_addr[HEDLEY_ARRAY_PARAM(4)], simde__m128i
...
@@ -2919,11 +3098,17 @@ simde_mm_maskstore_epi32 (int32_t mem_addr[HEDLEY_ARRAY_PARAM(4)], simde__m128i
simde__m128i_private
mask_
=
simde__m128i_to_private
(
mask
);
simde__m128i_private
mask_
=
simde__m128i_to_private
(
mask
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
SIMDE_VECTORIZE
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
a_
.
i32
)
/
sizeof
(
a_
.
i32
[
0
]))
;
i
++
)
{
mask_
.
lsx_i64
=
__lsx_vslti_w
(
mask_
.
lsx_i64
,
0
);
if
(
mask_
.
u32
[
i
]
&
(
UINT32_C
(
1
)
<<
31
))
a_
.
lsx_i64
=
__lsx_vbitsel_v
(
__lsx_vld
(
mem_addr
,
0
),
a_
.
lsx_i64
,
mask_
.
lsx_i64
);
mem_addr
[
i
]
=
a_
.
i32
[
i
];
__lsx_vst
(
a_
.
lsx_i64
,
mem_addr
,
0
);
}
#else
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
a_
.
i32
)
/
sizeof
(
a_
.
i32
[
0
]))
;
i
++
)
{
if
(
mask_
.
u32
[
i
]
&
(
UINT32_C
(
1
)
<<
31
))
mem_addr
[
i
]
=
a_
.
i32
[
i
];
}
#endif
#endif
#endif
}
}
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
...
@@ -2940,11 +3125,17 @@ simde_mm256_maskstore_epi32 (int32_t mem_addr[HEDLEY_ARRAY_PARAM(8)], simde__m25
...
@@ -2940,11 +3125,17 @@ simde_mm256_maskstore_epi32 (int32_t mem_addr[HEDLEY_ARRAY_PARAM(8)], simde__m25
simde__m256i_private
mask_
=
simde__m256i_to_private
(
mask
);
simde__m256i_private
mask_
=
simde__m256i_to_private
(
mask
);
simde__m256i_private
a_
=
simde__m256i_to_private
(
a
);
simde__m256i_private
a_
=
simde__m256i_to_private
(
a
);
SIMDE_VECTORIZE
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
a_
.
i32
)
/
sizeof
(
a_
.
i32
[
0
]))
;
i
++
)
{
mask_
.
i256
=
__lasx_xvslti_w
(
mask_
.
i256
,
0
);
if
(
mask_
.
u32
[
i
]
&
(
UINT32_C
(
1
)
<<
31
))
a_
.
i256
=
__lasx_xvbitsel_v
(
__lasx_xvld
(
mem_addr
,
0
),
a_
.
i256
,
mask_
.
i256
);
mem_addr
[
i
]
=
a_
.
i32
[
i
];
__lasx_xvst
(
a_
.
i256
,
mem_addr
,
0
);
}
#else
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
a_
.
i32
)
/
sizeof
(
a_
.
i32
[
0
]))
;
i
++
)
{
if
(
mask_
.
u32
[
i
]
&
(
UINT32_C
(
1
)
<<
31
))
mem_addr
[
i
]
=
a_
.
i32
[
i
];
}
#endif
#endif
#endif
}
}
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
...
@@ -2961,11 +3152,16 @@ simde_mm_maskstore_epi64 (int64_t mem_addr[HEDLEY_ARRAY_PARAM(2)], simde__m128i
...
@@ -2961,11 +3152,16 @@ simde_mm_maskstore_epi64 (int64_t mem_addr[HEDLEY_ARRAY_PARAM(2)], simde__m128i
simde__m128i_private
mask_
=
simde__m128i_to_private
(
mask
);
simde__m128i_private
mask_
=
simde__m128i_to_private
(
mask
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
simde__m128i_private
a_
=
simde__m128i_to_private
(
a
);
SIMDE_VECTORIZE
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
a_
.
i64
)
/
sizeof
(
a_
.
i64
[
0
]))
;
i
++
)
{
if
(
__lsx_vpickve2gr_d
(
mask_
.
lsx_i64
,
0
)
<
0
)
__lsx_vstelm_d
(
a_
.
lsx_i64
,
mem_addr
,
0
,
0
);
if
(
mask_
.
u64
[
i
]
>>
63
)
if
(
__lsx_vpickve2gr_d
(
mask_
.
lsx_i64
,
1
)
<
0
)
__lsx_vstelm_d
(
a_
.
lsx_i64
,
mem_addr
,
8
,
1
);
mem_addr
[
i
]
=
a_
.
i64
[
i
];
#else
}
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
a_
.
i64
)
/
sizeof
(
a_
.
i64
[
0
]))
;
i
++
)
{
if
(
mask_
.
u64
[
i
]
>>
63
)
mem_addr
[
i
]
=
a_
.
i64
[
i
];
}
#endif
#endif
#endif
}
}
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
...
@@ -2982,11 +3178,17 @@ simde_mm256_maskstore_epi64 (int64_t mem_addr[HEDLEY_ARRAY_PARAM(4)], simde__m25
...
@@ -2982,11 +3178,17 @@ simde_mm256_maskstore_epi64 (int64_t mem_addr[HEDLEY_ARRAY_PARAM(4)], simde__m25
simde__m256i_private
mask_
=
simde__m256i_to_private
(
mask
);
simde__m256i_private
mask_
=
simde__m256i_to_private
(
mask
);
simde__m256i_private
a_
=
simde__m256i_to_private
(
a
);
simde__m256i_private
a_
=
simde__m256i_to_private
(
a
);
SIMDE_VECTORIZE
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
a_
.
i64
)
/
sizeof
(
a_
.
i64
[
0
]))
;
i
++
)
{
mask_
.
i256
=
__lasx_xvslti_d
(
mask_
.
i256
,
0
);
if
(
mask_
.
u64
[
i
]
&
(
UINT64_C
(
1
)
<<
63
))
a_
.
i256
=
__lasx_xvbitsel_v
(
__lasx_xvld
(
mem_addr
,
0
),
a_
.
i256
,
mask_
.
i256
);
mem_addr
[
i
]
=
a_
.
i64
[
i
];
__lasx_xvst
(
a_
.
i256
,
mem_addr
,
0
);
}
#else
SIMDE_VECTORIZE
for
(
size_t
i
=
0
;
i
<
(
sizeof
(
a_
.
i64
)
/
sizeof
(
a_
.
i64
[
0
]))
;
i
++
)
{
if
(
mask_
.
u64
[
i
]
&
(
UINT64_C
(
1
)
<<
63
))
mem_addr
[
i
]
=
a_
.
i64
[
i
];
}
#endif
#endif
#endif
}
}
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
...
@@ -2999,6 +3201,8 @@ simde__m256i
...
@@ -2999,6 +3201,8 @@ simde__m256i
simde_mm256_max_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_max_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE) && !defined(__PGI)
#if defined(SIMDE_X86_AVX2_NATIVE) && !defined(__PGI)
return
_mm256_max_epi8
(
a
,
b
);
return
_mm256_max_epi8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmax_b
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3028,6 +3232,8 @@ simde__m256i
...
@@ -3028,6 +3232,8 @@ simde__m256i
simde_mm256_max_epu8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_max_epu8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_max_epu8
(
a
,
b
);
return
_mm256_max_epu8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmax_bu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3057,6 +3263,8 @@ simde__m256i
...
@@ -3057,6 +3263,8 @@ simde__m256i
simde_mm256_max_epu16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_max_epu16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_max_epu16
(
a
,
b
);
return
_mm256_max_epu16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmax_hu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3086,6 +3294,8 @@ simde__m256i
...
@@ -3086,6 +3294,8 @@ simde__m256i
simde_mm256_max_epu32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_max_epu32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_max_epu32
(
a
,
b
);
return
_mm256_max_epu32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmax_wu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3115,6 +3325,8 @@ simde__m256i
...
@@ -3115,6 +3325,8 @@ simde__m256i
simde_mm256_max_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_max_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_max_epi16
(
a
,
b
);
return
_mm256_max_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmax_h
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3144,6 +3356,8 @@ simde__m256i
...
@@ -3144,6 +3356,8 @@ simde__m256i
simde_mm256_max_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_max_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_max_epi32
(
a
,
b
);
return
_mm256_max_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmax_w
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3173,6 +3387,8 @@ simde__m256i
...
@@ -3173,6 +3387,8 @@ simde__m256i
simde_mm256_min_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_min_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE) && !defined(__PGI)
#if defined(SIMDE_X86_AVX2_NATIVE) && !defined(__PGI)
return
_mm256_min_epi8
(
a
,
b
);
return
_mm256_min_epi8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmin_b
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3202,6 +3418,8 @@ simde__m256i
...
@@ -3202,6 +3418,8 @@ simde__m256i
simde_mm256_min_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_min_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_min_epi16
(
a
,
b
);
return
_mm256_min_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmin_h
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3231,6 +3449,8 @@ simde__m256i
...
@@ -3231,6 +3449,8 @@ simde__m256i
simde_mm256_min_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_min_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_min_epi32
(
a
,
b
);
return
_mm256_min_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmin_w
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3260,6 +3480,8 @@ simde__m256i
...
@@ -3260,6 +3480,8 @@ simde__m256i
simde_mm256_min_epu8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_min_epu8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_min_epu8
(
a
,
b
);
return
_mm256_min_epu8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmin_bu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3289,6 +3511,8 @@ simde__m256i
...
@@ -3289,6 +3511,8 @@ simde__m256i
simde_mm256_min_epu16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_min_epu16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_min_epu16
(
a
,
b
);
return
_mm256_min_epu16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmin_hu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3318,6 +3542,8 @@ simde__m256i
...
@@ -3318,6 +3542,8 @@ simde__m256i
simde_mm256_min_epu32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_min_epu32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_min_epu32
(
a
,
b
);
return
_mm256_min_epu32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmin_wu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3347,6 +3573,9 @@ int32_t
...
@@ -3347,6 +3573,9 @@ int32_t
simde_mm256_movemask_epi8
(
simde__m256i
a
)
{
simde_mm256_movemask_epi8
(
simde__m256i
a
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_movemask_epi8
(
a
);
return
_mm256_movemask_epi8
(
a
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
a
=
__lasx_xvmskltz_b
(
a
);
return
(
__lasx_xvpickve2gr_w
(
a
,
0
)
|
(
__lasx_xvpickve2gr_w
(
a
,
4
)
<<
16
));
#else
#else
simde__m256i_private
a_
=
simde__m256i_to_private
(
a
);
simde__m256i_private
a_
=
simde__m256i_to_private
(
a
);
uint32_t
r
=
0
;
uint32_t
r
=
0
;
...
@@ -3423,6 +3652,8 @@ simde__m256i
...
@@ -3423,6 +3652,8 @@ simde__m256i
simde_mm256_mul_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_mul_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_mul_epi32
(
a
,
b
);
return
_mm256_mul_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmulwev_d_w
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3453,6 +3684,8 @@ simde__m256i
...
@@ -3453,6 +3684,8 @@ simde__m256i
simde_mm256_mul_epu32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_mul_epu32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_mul_epu32
(
a
,
b
);
return
_mm256_mul_epu32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmulwev_d_wu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3481,6 +3714,8 @@ simde__m256i
...
@@ -3481,6 +3714,8 @@ simde__m256i
simde_mm256_mulhi_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_mulhi_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_mulhi_epi16
(
a
,
b
);
return
_mm256_mulhi_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmuh_h
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3504,6 +3739,8 @@ simde__m256i
...
@@ -3504,6 +3739,8 @@ simde__m256i
simde_mm256_mulhi_epu16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_mulhi_epu16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_mulhi_epu16
(
a
,
b
);
return
_mm256_mulhi_epu16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmuh_hu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3527,6 +3764,12 @@ simde__m256i
...
@@ -3527,6 +3764,12 @@ simde__m256i
simde_mm256_mulhrs_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_mulhrs_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_mulhrs_epi16
(
a
,
b
);
return
_mm256_mulhrs_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
__m256i
t1_
=
__lasx_xvmulwev_w_h
(
a
,
b
),
t2_
=
__lasx_xvmulwod_w_h
(
a
,
b
);
t1_
=
__lasx_xvssrarni_h_w
(
t1_
,
t1_
,
15
);
t2_
=
__lasx_xvssrarni_h_w
(
t2_
,
t2_
,
15
);
return
__lasx_xvilvl_h
(
t2_
,
t1_
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3550,6 +3793,8 @@ simde__m256i
...
@@ -3550,6 +3793,8 @@ simde__m256i
simde_mm256_mullo_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_mullo_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_mullo_epi16
(
a
,
b
);
return
_mm256_mullo_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmul_h
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
a_
=
simde__m256i_to_private
(
a
),
a_
=
simde__m256i_to_private
(
a
),
...
@@ -3574,6 +3819,8 @@ simde__m256i
...
@@ -3574,6 +3819,8 @@ simde__m256i
simde_mm256_mullo_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_mullo_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_mullo_epi32
(
a
,
b
);
return
_mm256_mullo_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvmul_w
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
a_
=
simde__m256i_to_private
(
a
),
a_
=
simde__m256i_to_private
(
a
),
...
@@ -3618,6 +3865,8 @@ simde__m256i
...
@@ -3618,6 +3865,8 @@ simde__m256i
simde_mm256_or_si256
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_or_si256
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_or_si256
(
a
,
b
);
return
_mm256_or_si256
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvor_v
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3649,6 +3898,8 @@ simde__m256i
...
@@ -3649,6 +3898,8 @@ simde__m256i
simde_mm256_packs_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_packs_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_packs_epi16
(
a
,
b
);
return
_mm256_packs_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvssrarni_b_h
(
b
,
a
,
0
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3683,6 +3934,8 @@ simde__m256i
...
@@ -3683,6 +3934,8 @@ simde__m256i
simde_mm256_packs_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_packs_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_packs_epi32
(
a
,
b
);
return
_mm256_packs_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvssrarni_h_w
(
b
,
a
,
0
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3715,6 +3968,8 @@ simde__m256i
...
@@ -3715,6 +3968,8 @@ simde__m256i
simde_mm256_packus_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_packus_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_packus_epi16
(
a
,
b
);
return
_mm256_packus_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvssrarni_bu_h
(
b
,
a
,
0
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3749,6 +4004,8 @@ simde__m256i
...
@@ -3749,6 +4004,8 @@ simde__m256i
simde_mm256_packus_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_packus_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_packus_epi32
(
a
,
b
);
return
_mm256_packus_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvssrarni_hu_w
(
b
,
a
,
0
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3817,6 +4074,8 @@ simde_mm256_permute4x64_epi64 (simde__m256i a, const int imm8)
...
@@ -3817,6 +4074,8 @@ simde_mm256_permute4x64_epi64 (simde__m256i a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_permute4x64_epi64(a, imm8) _mm256_permute4x64_epi64(a, imm8)
# define simde_mm256_permute4x64_epi64(a, imm8) _mm256_permute4x64_epi64(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_permute4x64_epi64(a, imm8) __lasx_xvpermi_d(a, imm8)
#endif
#endif
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#undef _mm256_permute4x64_epi64
#undef _mm256_permute4x64_epi64
...
@@ -3840,6 +4099,8 @@ simde_mm256_permute4x64_pd (simde__m256d a, const int imm8)
...
@@ -3840,6 +4099,8 @@ simde_mm256_permute4x64_pd (simde__m256d a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_permute4x64_pd(a, imm8) _mm256_permute4x64_pd(a, imm8)
# define simde_mm256_permute4x64_pd(a, imm8) _mm256_permute4x64_pd(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_permute4x64_pd(a, imm8) HEDLEY_REINTERPRET_CAST(simde__m256d, __lasx_xvpermi_d(a, imm8))
#endif
#endif
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#undef _mm256_permute4x64_pd
#undef _mm256_permute4x64_pd
...
@@ -3851,6 +4112,8 @@ simde__m256i
...
@@ -3851,6 +4112,8 @@ simde__m256i
simde_mm256_permutevar8x32_epi32
(
simde__m256i
a
,
simde__m256i
idx
)
{
simde_mm256_permutevar8x32_epi32
(
simde__m256i
a
,
simde__m256i
idx
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_permutevar8x32_epi32
(
a
,
idx
);
return
_mm256_permutevar8x32_epi32
(
a
,
idx
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvperm_w
(
a
,
idx
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -3879,6 +4142,8 @@ simde_mm256_permutevar8x32_ps (simde__m256 a, simde__m256i idx) {
...
@@ -3879,6 +4142,8 @@ simde_mm256_permutevar8x32_ps (simde__m256 a, simde__m256i idx) {
#else
#else
return
_mm256_permutevar8x32_ps
(
a
,
idx
);
return
_mm256_permutevar8x32_ps
(
a
,
idx
);
#endif
#endif
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
HEDLEY_REINTERPRET_CAST
(
simde__m256
,
__lasx_xvperm_w
(
HEDLEY_REINTERPRET_CAST
(
simde__m256i
,
a
),
idx
));
#else
#else
simde__m256_private
simde__m256_private
r_
,
r_
,
...
@@ -3944,7 +4209,12 @@ simde_mm256_shuffle_epi8 (simde__m256i a, simde__m256i b) {
...
@@ -3944,7 +4209,12 @@ simde_mm256_shuffle_epi8 (simde__m256i a, simde__m256i b) {
a_
=
simde__m256i_to_private
(
a
),
a_
=
simde__m256i_to_private
(
a
),
b_
=
simde__m256i_to_private
(
b
);
b_
=
simde__m256i_to_private
(
b
);
#if SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
i256
=
__lasx_xvslti_b
(
b
,
0
);
r_
.
i256
=
__lasx_xvnor_v
(
r_
.
i256
,
r_
.
i256
);
a_
.
i256
=
__lasx_xvshuf_b
(
a_
.
i256
,
a_
.
i256
,
__lasx_xvand_v
(
b_
.
i256
,
__lasx_xvreplgr2vr_b
(
15
)));
r_
.
i256
=
__lasx_xvand_v
(
r_
.
i256
,
a_
.
i256
);
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
r_
.
m128i
[
0
]
=
simde_mm_shuffle_epi8
(
a_
.
m128i
[
0
],
b_
.
m128i
[
0
]);
r_
.
m128i
[
0
]
=
simde_mm_shuffle_epi8
(
a_
.
m128i
[
0
],
b_
.
m128i
[
0
]);
r_
.
m128i
[
1
]
=
simde_mm_shuffle_epi8
(
a_
.
m128i
[
1
],
b_
.
m128i
[
1
]);
r_
.
m128i
[
1
]
=
simde_mm_shuffle_epi8
(
a_
.
m128i
[
1
],
b_
.
m128i
[
1
]);
#else
#else
...
@@ -3982,6 +4252,8 @@ simde_mm256_shuffle_epi32 (simde__m256i a, const int imm8)
...
@@ -3982,6 +4252,8 @@ simde_mm256_shuffle_epi32 (simde__m256i a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_shuffle_epi32(a, imm8) _mm256_shuffle_epi32(a, imm8)
# define simde_mm256_shuffle_epi32(a, imm8) _mm256_shuffle_epi32(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_shuffle_epi32(a, imm8) __lasx_xvshuf4i_w(a, imm8)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128) && !defined(__PGI)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128) && !defined(__PGI)
# define simde_mm256_shuffle_epi32(a, imm8) \
# define simde_mm256_shuffle_epi32(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -4010,6 +4282,8 @@ simde_mm256_shuffle_epi32 (simde__m256i a, const int imm8)
...
@@ -4010,6 +4282,8 @@ simde_mm256_shuffle_epi32 (simde__m256i a, const int imm8)
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_shufflehi_epi16(a, imm8) _mm256_shufflehi_epi16(a, imm8)
# define simde_mm256_shufflehi_epi16(a, imm8) _mm256_shufflehi_epi16(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_shufflehi_epi16(a, imm8) __lasx_xvextrins_d(__lasx_xvshuf4i_h(a, imm8), a, 0)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
# define simde_mm256_shufflehi_epi16(a, imm8) \
# define simde_mm256_shufflehi_epi16(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -4046,6 +4320,8 @@ simde_mm256_shuffle_epi32 (simde__m256i a, const int imm8)
...
@@ -4046,6 +4320,8 @@ simde_mm256_shuffle_epi32 (simde__m256i a, const int imm8)
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_shufflelo_epi16(a, imm8) _mm256_shufflelo_epi16(a, imm8)
# define simde_mm256_shufflelo_epi16(a, imm8) _mm256_shufflelo_epi16(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_shufflelo_epi16(a, imm8) __lasx_xvextrins_d(__lasx_xvshuf4i_h(a, imm8), a, 0x11)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
# define simde_mm256_shufflelo_epi16(a, imm8) \
# define simde_mm256_shufflelo_epi16(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -4084,6 +4360,8 @@ simde__m256i
...
@@ -4084,6 +4360,8 @@ simde__m256i
simde_mm256_sign_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_sign_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_sign_epi8
(
a
,
b
);
return
_mm256_sign_epi8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsigncov_b
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -4108,6 +4386,8 @@ simde__m256i
...
@@ -4108,6 +4386,8 @@ simde__m256i
simde_mm256_sign_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_sign_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_sign_epi16
(
a
,
b
);
return
_mm256_sign_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsigncov_h
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -4132,6 +4412,8 @@ simde__m256i
...
@@ -4132,6 +4412,8 @@ simde__m256i
simde_mm256_sign_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_sign_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_sign_epi32
(
a
,
b
);
return
_mm256_sign_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsigncov_w
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -4156,6 +4438,8 @@ simde__m256i
...
@@ -4156,6 +4438,8 @@ simde__m256i
simde_mm256_sll_epi16
(
simde__m256i
a
,
simde__m128i
count
)
{
simde_mm256_sll_epi16
(
simde__m256i
a
,
simde__m128i
count
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_sll_epi16
(
a
,
count
);
return
_mm256_sll_epi16
(
a
,
count
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsll_h
(
a
,
__lasx_xvreplgr2vr_h
(
count
[
0
]));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -4195,6 +4479,8 @@ simde__m256i
...
@@ -4195,6 +4479,8 @@ simde__m256i
simde_mm256_sll_epi32
(
simde__m256i
a
,
simde__m128i
count
)
{
simde_mm256_sll_epi32
(
simde__m256i
a
,
simde__m128i
count
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_sll_epi32
(
a
,
count
);
return
_mm256_sll_epi32
(
a
,
count
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsll_w
(
a
,
__lasx_xvreplgr2vr_w
(
count
[
0
]));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -4234,6 +4520,8 @@ simde__m256i
...
@@ -4234,6 +4520,8 @@ simde__m256i
simde_mm256_sll_epi64
(
simde__m256i
a
,
simde__m128i
count
)
{
simde_mm256_sll_epi64
(
simde__m256i
a
,
simde__m128i
count
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_sll_epi64
(
a
,
count
);
return
_mm256_sll_epi64
(
a
,
count
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsll_d
(
a
,
__lasx_xvreplgr2vr_d
(
count
[
0
]));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -4298,6 +4586,8 @@ simde_mm256_slli_epi16 (simde__m256i a, const int imm8)
...
@@ -4298,6 +4586,8 @@ simde_mm256_slli_epi16 (simde__m256i a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_slli_epi16(a, imm8) _mm256_slli_epi16(a, imm8)
# define simde_mm256_slli_epi16(a, imm8) _mm256_slli_epi16(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_slli_epi16(a, imm8) (imm8 > 15 ? __lasx_xvreplgr2vr_h(0) : __lasx_xvslli_h(a, imm8 & 15))
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
# define simde_mm256_slli_epi16(a, imm8) \
# define simde_mm256_slli_epi16(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -4335,6 +4625,8 @@ simde_mm256_slli_epi32 (simde__m256i a, const int imm8)
...
@@ -4335,6 +4625,8 @@ simde_mm256_slli_epi32 (simde__m256i a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_slli_epi32(a, imm8) _mm256_slli_epi32(a, imm8)
# define simde_mm256_slli_epi32(a, imm8) _mm256_slli_epi32(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_slli_epi32(a, imm8) (imm8 > 31 ? __lasx_xvreplgr2vr_w(0) : __lasx_xvslli_w(a, imm8 & 31))
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
# define simde_mm256_slli_epi32(a, imm8) \
# define simde_mm256_slli_epi32(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -4367,6 +4659,8 @@ simde_mm256_slli_epi64 (simde__m256i a, const int imm8)
...
@@ -4367,6 +4659,8 @@ simde_mm256_slli_epi64 (simde__m256i a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_slli_epi64(a, imm8) _mm256_slli_epi64(a, imm8)
# define simde_mm256_slli_epi64(a, imm8) _mm256_slli_epi64(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_slli_epi64(a, imm8) (imm8 > 63 ? __lasx_xvreplgr2vr_d(0) : __lasx_xvslli_d(a, imm8))
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
# define simde_mm256_slli_epi64(a, imm8) \
# define simde_mm256_slli_epi64(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -4398,6 +4692,8 @@ simde_mm256_slli_si256 (simde__m256i a, const int imm8)
...
@@ -4398,6 +4692,8 @@ simde_mm256_slli_si256 (simde__m256i a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_slli_si256(a, imm8) _mm256_slli_si256(a, imm8)
# define simde_mm256_slli_si256(a, imm8) _mm256_slli_si256(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_slli_si256(a, imm8) __lasx_xvbsll_v(a, imm8)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128) && !defined(__PGI)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128) && !defined(__PGI)
# define simde_mm256_slli_si256(a, imm8) \
# define simde_mm256_slli_si256(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -4425,6 +4721,9 @@ simde_mm_sllv_epi32 (simde__m128i a, simde__m128i b) {
...
@@ -4425,6 +4721,9 @@ simde_mm_sllv_epi32 (simde__m128i a, simde__m128i b) {
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
#if defined(SIMDE_ARM_NEON_A32V7_NATIVE)
r_
.
neon_u32
=
vshlq_u32
(
a_
.
neon_u32
,
vreinterpretq_s32_u32
(
b_
.
neon_u32
));
r_
.
neon_u32
=
vshlq_u32
(
a_
.
neon_u32
,
vreinterpretq_s32_u32
(
b_
.
neon_u32
));
r_
.
neon_u32
=
vandq_u32
(
r_
.
neon_u32
,
vcltq_u32
(
b_
.
neon_u32
,
vdupq_n_u32
(
32
)));
r_
.
neon_u32
=
vandq_u32
(
r_
.
neon_u32
,
vcltq_u32
(
b_
.
neon_u32
,
vdupq_n_u32
(
32
)));
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
lsx_i64
=
__lsx_vsll_w
(
a_
.
lsx_i64
,
b_
.
lsx_i64
);
r_
.
lsx_i64
=
__lsx_vand_v
(
r_
.
lsx_i64
,
__lsx_vslei_wu
(
b_
.
lsx_i64
,
31
));
#elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
#elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
r_
.
u32
=
HEDLEY_REINTERPRET_CAST
(
__typeof__
(
r_
.
u32
),
(
b_
.
u32
<
UINT32_C
(
32
)))
&
(
a_
.
u32
<<
b_
.
u32
);
r_
.
u32
=
HEDLEY_REINTERPRET_CAST
(
__typeof__
(
r_
.
u32
),
(
b_
.
u32
<
UINT32_C
(
32
)))
&
(
a_
.
u32
<<
b_
.
u32
);
#else
#else
...
@@ -4452,7 +4751,10 @@ simde_mm256_sllv_epi32 (simde__m256i a, simde__m256i b) {
...
@@ -4452,7 +4751,10 @@ simde_mm256_sllv_epi32 (simde__m256i a, simde__m256i b) {
b_
=
simde__m256i_to_private
(
b
),
b_
=
simde__m256i_to_private
(
b
),
r_
;
r_
;
#if SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
i256
=
__lasx_xvsll_w
(
a_
.
i256
,
b_
.
i256
);
r_
.
i256
=
__lasx_xvand_v
(
r_
.
i256
,
__lasx_xvslei_wu
(
b_
.
i256
,
31
));
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
r_
.
m128i
[
0
]
=
simde_mm_sllv_epi32
(
a_
.
m128i
[
0
],
b_
.
m128i
[
0
]);
r_
.
m128i
[
0
]
=
simde_mm_sllv_epi32
(
a_
.
m128i
[
0
],
b_
.
m128i
[
0
]);
r_
.
m128i
[
1
]
=
simde_mm_sllv_epi32
(
a_
.
m128i
[
1
],
b_
.
m128i
[
1
]);
r_
.
m128i
[
1
]
=
simde_mm_sllv_epi32
(
a_
.
m128i
[
1
],
b_
.
m128i
[
1
]);
#elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
#elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
...
@@ -4485,6 +4787,9 @@ simde_mm_sllv_epi64 (simde__m128i a, simde__m128i b) {
...
@@ -4485,6 +4787,9 @@ simde_mm_sllv_epi64 (simde__m128i a, simde__m128i b) {
#if defined(SIMDE_ARM_NEON_A64V8_NATIVE)
#if defined(SIMDE_ARM_NEON_A64V8_NATIVE)
r_
.
neon_u64
=
vshlq_u64
(
a_
.
neon_u64
,
vreinterpretq_s64_u64
(
b_
.
neon_u64
));
r_
.
neon_u64
=
vshlq_u64
(
a_
.
neon_u64
,
vreinterpretq_s64_u64
(
b_
.
neon_u64
));
r_
.
neon_u64
=
vandq_u64
(
r_
.
neon_u64
,
vcltq_u64
(
b_
.
neon_u64
,
vdupq_n_u64
(
64
)));
r_
.
neon_u64
=
vandq_u64
(
r_
.
neon_u64
,
vcltq_u64
(
b_
.
neon_u64
,
vdupq_n_u64
(
64
)));
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
lsx_i64
=
__lsx_vsll_d
(
a_
.
lsx_i64
,
b_
.
lsx_i64
);
r_
.
lsx_i64
=
__lsx_vand_v
(
r_
.
lsx_i64
,
__lsx_vsle_du
(
b_
.
lsx_i64
,
__lsx_vreplgr2vr_d
(
63
)));
#elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
#elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
r_
.
u64
=
HEDLEY_REINTERPRET_CAST
(
__typeof__
(
r_
.
u64
),
(
b_
.
u64
<
64
))
&
(
a_
.
u64
<<
b_
.
u64
);
r_
.
u64
=
HEDLEY_REINTERPRET_CAST
(
__typeof__
(
r_
.
u64
),
(
b_
.
u64
<
64
))
&
(
a_
.
u64
<<
b_
.
u64
);
#else
#else
...
@@ -4512,7 +4817,10 @@ simde_mm256_sllv_epi64 (simde__m256i a, simde__m256i b) {
...
@@ -4512,7 +4817,10 @@ simde_mm256_sllv_epi64 (simde__m256i a, simde__m256i b) {
b_
=
simde__m256i_to_private
(
b
),
b_
=
simde__m256i_to_private
(
b
),
r_
;
r_
;
#if SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#if defined(SIMDE_LOONGARCH_LASX_NATIVE)
r_
.
i256
=
__lasx_xvsll_d
(
a_
.
i256
,
b_
.
i256
);
r_
.
i256
=
__lasx_xvand_v
(
r_
.
i256
,
__lasx_xvsle_du
(
b_
.
i256
,
__lasx_xvreplgr2vr_d
(
63
)));
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
r_
.
m128i
[
0
]
=
simde_mm_sllv_epi64
(
a_
.
m128i
[
0
],
b_
.
m128i
[
0
]);
r_
.
m128i
[
0
]
=
simde_mm_sllv_epi64
(
a_
.
m128i
[
0
],
b_
.
m128i
[
0
]);
r_
.
m128i
[
1
]
=
simde_mm_sllv_epi64
(
a_
.
m128i
[
1
],
b_
.
m128i
[
1
]);
r_
.
m128i
[
1
]
=
simde_mm_sllv_epi64
(
a_
.
m128i
[
1
],
b_
.
m128i
[
1
]);
#elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
#elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
...
@@ -4539,6 +4847,8 @@ simde__m256i
...
@@ -4539,6 +4847,8 @@ simde__m256i
simde_mm256_sra_epi16
(
simde__m256i
a
,
simde__m128i
count
)
{
simde_mm256_sra_epi16
(
simde__m256i
a
,
simde__m128i
count
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_sra_epi16
(
a
,
count
);
return
_mm256_sra_epi16
(
a
,
count
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsra_h
(
a
,
__lasx_xvreplgr2vr_h
(
count
[
0
]
>
15
?
15
:
count
[
0
]));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -4578,6 +4888,8 @@ simde__m256i
...
@@ -4578,6 +4888,8 @@ simde__m256i
simde_mm256_sra_epi32
(
simde__m256i
a
,
simde__m128i
count
)
{
simde_mm256_sra_epi32
(
simde__m256i
a
,
simde__m128i
count
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_sra_epi32
(
a
,
count
);
return
_mm256_sra_epi32
(
a
,
count
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsra_w
(
a
,
__lasx_xvreplgr2vr_w
(
count
[
0
]
>
31
?
31
:
count
[
0
]));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -4635,6 +4947,8 @@ simde_mm256_srai_epi16 (simde__m256i a, const int imm8)
...
@@ -4635,6 +4947,8 @@ simde_mm256_srai_epi16 (simde__m256i a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_srai_epi16(a, imm8) _mm256_srai_epi16(a, imm8)
# define simde_mm256_srai_epi16(a, imm8) _mm256_srai_epi16(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_srai_epi16(a, imm8) __lasx_xvsrai_h(a, (imm8 > 15 ? 15 : imm8))
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
# define simde_mm256_srai_epi16(a, imm8) \
# define simde_mm256_srai_epi16(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -4670,6 +4984,8 @@ simde_mm256_srai_epi32 (simde__m256i a, const int imm8)
...
@@ -4670,6 +4984,8 @@ simde_mm256_srai_epi32 (simde__m256i a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_srai_epi32(a, imm8) _mm256_srai_epi32(a, imm8)
# define simde_mm256_srai_epi32(a, imm8) _mm256_srai_epi32(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_srai_epi32(a, imm8) __lasx_xvsrai_w(a, (imm8 > 31 ? 31 : imm8))
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
# define simde_mm256_srai_epi32(a, imm8) \
# define simde_mm256_srai_epi32(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -4686,6 +5002,8 @@ simde__m128i
...
@@ -4686,6 +5002,8 @@ simde__m128i
simde_mm_srav_epi32
(
simde__m128i
a
,
simde__m128i
count
)
{
simde_mm_srav_epi32
(
simde__m128i
a
,
simde__m128i
count
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm_srav_epi32
(
a
,
count
);
return
_mm_srav_epi32
(
a
,
count
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lsx_vsra_w
(
a
,
__lsx_vmini_wu
(
count
,
31
));
#else
#else
simde__m128i_private
simde__m128i_private
r_
,
r_
,
...
@@ -4716,6 +5034,8 @@ simde__m256i
...
@@ -4716,6 +5034,8 @@ simde__m256i
simde_mm256_srav_epi32
(
simde__m256i
a
,
simde__m256i
count
)
{
simde_mm256_srav_epi32
(
simde__m256i
a
,
simde__m256i
count
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_srav_epi32
(
a
,
count
);
return
_mm256_srav_epi32
(
a
,
count
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsra_w
(
a
,
__lasx_xvmini_wu
(
count
,
31
));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -4747,6 +5067,8 @@ simde__m256i
...
@@ -4747,6 +5067,8 @@ simde__m256i
simde_mm256_srl_epi16
(
simde__m256i
a
,
simde__m128i
count
)
{
simde_mm256_srl_epi16
(
simde__m256i
a
,
simde__m128i
count
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_srl_epi16
(
a
,
count
);
return
_mm256_srl_epi16
(
a
,
count
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsrl_h
(
a
,
__lasx_xvreplgr2vr_h
(
count
[
0
]
>
16
?
16
:
count
[
0
]));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -4784,6 +5106,8 @@ simde__m256i
...
@@ -4784,6 +5106,8 @@ simde__m256i
simde_mm256_srl_epi32
(
simde__m256i
a
,
simde__m128i
count
)
{
simde_mm256_srl_epi32
(
simde__m256i
a
,
simde__m128i
count
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_srl_epi32
(
a
,
count
);
return
_mm256_srl_epi32
(
a
,
count
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsrl_w
(
a
,
__lasx_xvreplgr2vr_w
(
count
[
0
]
>
32
?
32
:
count
[
0
]));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -4821,6 +5145,8 @@ simde__m256i
...
@@ -4821,6 +5145,8 @@ simde__m256i
simde_mm256_srl_epi64
(
simde__m256i
a
,
simde__m128i
count
)
{
simde_mm256_srl_epi64
(
simde__m256i
a
,
simde__m128i
count
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_srl_epi64
(
a
,
count
);
return
_mm256_srl_epi64
(
a
,
count
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsrl_d
(
a
,
__lasx_xvreplgr2vr_d
(
count
[
0
]
>
64
?
64
:
count
[
0
]));
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -4888,6 +5214,8 @@ simde_mm256_srli_epi16 (simde__m256i a, const int imm8)
...
@@ -4888,6 +5214,8 @@ simde_mm256_srli_epi16 (simde__m256i a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_srli_epi16(a, imm8) _mm256_srli_epi16(a, imm8)
# define simde_mm256_srli_epi16(a, imm8) _mm256_srli_epi16(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_srli_epi16(a, imm8) (imm8 > 15 ? __lasx_xvreplgr2vr_h(0) : __lasx_xvsrli_h(a, imm8 & 15))
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
# define simde_mm256_srli_epi16(a, imm8) \
# define simde_mm256_srli_epi16(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -4925,6 +5253,8 @@ simde_mm256_srli_epi32 (simde__m256i a, const int imm8)
...
@@ -4925,6 +5253,8 @@ simde_mm256_srli_epi32 (simde__m256i a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_srli_epi32(a, imm8) _mm256_srli_epi32(a, imm8)
# define simde_mm256_srli_epi32(a, imm8) _mm256_srli_epi32(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_srli_epi32(a, imm8) __lasx_xvsrli_w(a, imm8)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
# define simde_mm256_srli_epi32(a, imm8) \
# define simde_mm256_srli_epi32(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -4957,6 +5287,8 @@ simde_mm256_srli_epi64 (simde__m256i a, const int imm8)
...
@@ -4957,6 +5287,8 @@ simde_mm256_srli_epi64 (simde__m256i a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_srli_epi64(a, imm8) _mm256_srli_epi64(a, imm8)
# define simde_mm256_srli_epi64(a, imm8) _mm256_srli_epi64(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_srli_epi64(a, imm8) __lasx_xvsrli_d(a, imm8)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128)
# define simde_mm256_srli_epi64(a, imm8) \
# define simde_mm256_srli_epi64(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -4988,6 +5320,8 @@ simde_mm256_srli_si256 (simde__m256i a, const int imm8)
...
@@ -4988,6 +5320,8 @@ simde_mm256_srli_si256 (simde__m256i a, const int imm8)
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
# define simde_mm256_srli_si256(a, imm8) _mm256_srli_si256(a, imm8)
# define simde_mm256_srli_si256(a, imm8) _mm256_srli_si256(a, imm8)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
# define simde_mm256_srli_si256(a, imm8) __lasx_xvbsrl_v(a, imm8)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128) && !defined(__PGI)
#elif SIMDE_NATURAL_INT_VECTOR_SIZE_LE(128) && !defined(__PGI)
# define simde_mm256_srli_si256(a, imm8) \
# define simde_mm256_srli_si256(a, imm8) \
simde_mm256_set_m128i( \
simde_mm256_set_m128i( \
...
@@ -5025,6 +5359,8 @@ simde_mm_srlv_epi32 (simde__m128i a, simde__m128i b) {
...
@@ -5025,6 +5359,8 @@ simde_mm_srlv_epi32 (simde__m128i a, simde__m128i b) {
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
#define simde_mm_srlv_epi32(a, b) _mm_srlv_epi32(a, b)
#define simde_mm_srlv_epi32(a, b) _mm_srlv_epi32(a, b)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
#define simde_mm_srlv_epi32(a, b) __lsx_vand_v(__lsx_vsrl_w(a, b), __lsx_vslei_wu(b, 31))
#endif
#endif
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#undef _mm_srlv_epi32
#undef _mm_srlv_epi32
...
@@ -5052,6 +5388,8 @@ simde_mm256_srlv_epi32 (simde__m256i a, simde__m256i b) {
...
@@ -5052,6 +5388,8 @@ simde_mm256_srlv_epi32 (simde__m256i a, simde__m256i b) {
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
#define simde_mm256_srlv_epi32(a, b) _mm256_srlv_epi32(a, b)
#define simde_mm256_srlv_epi32(a, b) _mm256_srlv_epi32(a, b)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
#define simde_mm256_srlv_epi32(a, b) __lasx_xvand_v(__lasx_xvsrl_w(a, b), __lasx_xvslei_wu(b, 31))
#endif
#endif
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#undef _mm256_srlv_epi32
#undef _mm256_srlv_epi32
...
@@ -5079,6 +5417,8 @@ simde_mm_srlv_epi64 (simde__m128i a, simde__m128i b) {
...
@@ -5079,6 +5417,8 @@ simde_mm_srlv_epi64 (simde__m128i a, simde__m128i b) {
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
#define simde_mm_srlv_epi64(a, b) _mm_srlv_epi64(a, b)
#define simde_mm_srlv_epi64(a, b) _mm_srlv_epi64(a, b)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
#define simde_mm_srlv_epi64(a, b) __lsx_vand_v(__lsx_vsrl_d(a, b), __lsx_vsle_du(b, __lsx_vreplgr2vr_d(63)))
#endif
#endif
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#undef _mm_srlv_epi64
#undef _mm_srlv_epi64
...
@@ -5106,6 +5446,8 @@ simde_mm256_srlv_epi64 (simde__m256i a, simde__m256i b) {
...
@@ -5106,6 +5446,8 @@ simde_mm256_srlv_epi64 (simde__m256i a, simde__m256i b) {
}
}
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
#define simde_mm256_srlv_epi64(a, b) _mm256_srlv_epi64(a, b)
#define simde_mm256_srlv_epi64(a, b) _mm256_srlv_epi64(a, b)
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
#define simde_mm256_srlv_epi64(a, b) __lasx_xvand_v(__lasx_xvsrl_d(a, b), __lasx_xvsle_du(b, __lasx_xvreplgr2vr_d(63)))
#endif
#endif
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#if defined(SIMDE_X86_AVX2_ENABLE_NATIVE_ALIASES)
#undef _mm256_srlv_epi64
#undef _mm256_srlv_epi64
...
@@ -5117,6 +5459,8 @@ simde__m256i
...
@@ -5117,6 +5459,8 @@ simde__m256i
simde_mm256_stream_load_si256
(
const
simde__m256i
*
mem_addr
)
{
simde_mm256_stream_load_si256
(
const
simde__m256i
*
mem_addr
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_stream_load_si256
(
HEDLEY_CONST_CAST
(
simde__m256i
*
,
mem_addr
));
return
_mm256_stream_load_si256
(
HEDLEY_CONST_CAST
(
simde__m256i
*
,
mem_addr
));
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvld
(
mem_addr
,
0
);
#elif HEDLEY_HAS_BUILTIN(__builtin_nontemporal_store) && defined(SIMDE_VECTOR_SUBSCRIPT)
#elif HEDLEY_HAS_BUILTIN(__builtin_nontemporal_store) && defined(SIMDE_VECTOR_SUBSCRIPT)
return
__builtin_nontemporal_load
(
mem_addr
);
return
__builtin_nontemporal_load
(
mem_addr
);
#else
#else
...
@@ -5134,6 +5478,8 @@ simde__m256i
...
@@ -5134,6 +5478,8 @@ simde__m256i
simde_mm256_sub_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_sub_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_sub_epi8
(
a
,
b
);
return
_mm256_sub_epi8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsub_b
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5165,6 +5511,8 @@ simde__m256i
...
@@ -5165,6 +5511,8 @@ simde__m256i
simde_mm256_sub_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_sub_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_sub_epi16
(
a
,
b
);
return
_mm256_sub_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsub_h
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5210,6 +5558,8 @@ simde__m256i
...
@@ -5210,6 +5558,8 @@ simde__m256i
simde_mm256_sub_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_sub_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_sub_epi32
(
a
,
b
);
return
_mm256_sub_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsub_w
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5255,6 +5605,8 @@ simde__m256i
...
@@ -5255,6 +5605,8 @@ simde__m256i
simde_mm256_sub_epi64
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_sub_epi64
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_sub_epi64
(
a
,
b
);
return
_mm256_sub_epi64
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvsub_d
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5309,6 +5661,8 @@ simde__m256i
...
@@ -5309,6 +5661,8 @@ simde__m256i
simde_mm256_subs_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_subs_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_subs_epi8
(
a
,
b
);
return
_mm256_subs_epi8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvssub_b
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5338,6 +5692,8 @@ simde__m256i
...
@@ -5338,6 +5692,8 @@ simde__m256i
simde_mm256_subs_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_subs_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_subs_epi16
(
a
,
b
);
return
_mm256_subs_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvssub_h
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5381,6 +5737,8 @@ simde__m256i
...
@@ -5381,6 +5737,8 @@ simde__m256i
simde_mm256_subs_epu8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_subs_epu8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_subs_epu8
(
a
,
b
);
return
_mm256_subs_epu8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvssub_bu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5410,6 +5768,8 @@ simde__m256i
...
@@ -5410,6 +5768,8 @@ simde__m256i
simde_mm256_subs_epu16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_subs_epu16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_subs_epu16
(
a
,
b
);
return
_mm256_subs_epu16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvssub_hu
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5456,6 +5816,8 @@ simde__m256i
...
@@ -5456,6 +5816,8 @@ simde__m256i
simde_mm256_unpacklo_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_unpacklo_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_unpacklo_epi8
(
a
,
b
);
return
_mm256_unpacklo_epi8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvilvl_b
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5492,6 +5854,8 @@ simde__m256i
...
@@ -5492,6 +5854,8 @@ simde__m256i
simde_mm256_unpacklo_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_unpacklo_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_unpacklo_epi16
(
a
,
b
);
return
_mm256_unpacklo_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvilvl_h
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5525,6 +5889,8 @@ simde__m256i
...
@@ -5525,6 +5889,8 @@ simde__m256i
simde_mm256_unpacklo_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_unpacklo_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_unpacklo_epi32
(
a
,
b
);
return
_mm256_unpacklo_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvilvl_w
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5558,6 +5924,8 @@ simde__m256i
...
@@ -5558,6 +5924,8 @@ simde__m256i
simde_mm256_unpacklo_epi64
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_unpacklo_epi64
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_unpacklo_epi64
(
a
,
b
);
return
_mm256_unpacklo_epi64
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvilvl_d
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5590,6 +5958,8 @@ simde__m256i
...
@@ -5590,6 +5958,8 @@ simde__m256i
simde_mm256_unpackhi_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_unpackhi_epi8
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_unpackhi_epi8
(
a
,
b
);
return
_mm256_unpackhi_epi8
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvilvh_b
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5626,6 +5996,8 @@ simde__m256i
...
@@ -5626,6 +5996,8 @@ simde__m256i
simde_mm256_unpackhi_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_unpackhi_epi16
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_unpackhi_epi16
(
a
,
b
);
return
_mm256_unpackhi_epi16
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvilvh_h
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5660,6 +6032,8 @@ simde__m256i
...
@@ -5660,6 +6032,8 @@ simde__m256i
simde_mm256_unpackhi_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_unpackhi_epi32
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_unpackhi_epi32
(
a
,
b
);
return
_mm256_unpackhi_epi32
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvilvh_w
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5693,6 +6067,8 @@ simde__m256i
...
@@ -5693,6 +6067,8 @@ simde__m256i
simde_mm256_unpackhi_epi64
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_unpackhi_epi64
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_unpackhi_epi64
(
a
,
b
);
return
_mm256_unpackhi_epi64
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvilvh_d
(
b
,
a
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
@@ -5725,6 +6101,8 @@ simde__m256i
...
@@ -5725,6 +6101,8 @@ simde__m256i
simde_mm256_xor_si256
(
simde__m256i
a
,
simde__m256i
b
)
{
simde_mm256_xor_si256
(
simde__m256i
a
,
simde__m256i
b
)
{
#if defined(SIMDE_X86_AVX2_NATIVE)
#if defined(SIMDE_X86_AVX2_NATIVE)
return
_mm256_xor_si256
(
a
,
b
);
return
_mm256_xor_si256
(
a
,
b
);
#elif defined(SIMDE_LOONGARCH_LASX_NATIVE)
return
__lasx_xvxor_v
(
a
,
b
);
#else
#else
simde__m256i_private
simde__m256i_private
r_
,
r_
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment