__lasx_insert_128_lo
LASX intrinsic · group: Misc
Synopsis
__m256i __lasx_insert_128_lo (__m256i a, __m128i b)
#include <lsxintrin.h>
#include <lasxintrin.h>
CPU Flags: LASX
Description
Replace the low 128-bit half of a with the integer vector b.
This helper intrinsic does not name a distinct LASX instruction. Depending on the operation and optimization, it may lower to a no-op, a register move, or an existing LASX permutation instruction such as xvpermi.q.
Operation
for (int i = 0;i < 2;i++) {
dst.dword[i] = b.dword[i];
dst.dword[i + 2] = a.dword[i + 2];
}
GCC Compatibility
Supported by GCC 16 and later.
GCC 14 and GCC 15 do not provide this intrinsic. The fallback below uses a non-volatile GNU inline assembly register alias where the older compiler has no 128/256-bit cast operator, and otherwise uses regular LASX intrinsics. It is intended for source compatibility; the native GCC 16 intrinsic may still generate better code.
#if defined(__loongarch_asx) && !defined(__loongarch_asx_sx_conv)
static inline __m256i __lasx_insert_128_lo (__m256i a, __m128i b) {
__m256i bb;
__asm__("" : "=f"(bb) : "0"(b));
return __lasx_xvpermi_q(bb, a, 0x12);
}
#endif