+#define VSLLWIL(NAME, BIT, E1, E2) \
+void HELPER(NAME)(CPULoongArchState *env, uint32_t oprsz, \
+ uint32_t vd, uint32_t vj, uint32_t imm) \
+{ \
+ int i, max; \
+ VReg temp; \
+ VReg *Vd = &(env->fpr[vd].vreg); \
+ VReg *Vj = &(env->fpr[vj].vreg); \
+ typedef __typeof(temp.E1(0)) TD; \
+ \
+ temp.Q(0) = int128_zero(); \
+ \
+ if (oprsz == 32) { \
+ temp.Q(1) = int128_zero(); \
+ } \
+ \
+ max = LSX_LEN / BIT; \
+ for (i = 0; i < max; i++) { \
+ temp.E1(i) = (TD)Vj->E2(i) << (imm % BIT); \
+ if (oprsz == 32) { \
+ temp.E1(i + max) = (TD)Vj->E2(i + max * 2) << (imm % BIT); \
+ } \
+ } \
+ *Vd = temp; \
+}