Fix AOT compiler simd shift opcodes (#2715)

This commit is contained in:
Wenyong Huang 2023-11-03 10:38:53 +08:00 committed by GitHub
parent 68a627ea2c
commit caf805ece7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -30,11 +30,11 @@ simd_shift(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
LLVM_CONST(i16x8_vec_zero), LLVM_CONST(i16x8_vec_zero),
LLVM_CONST(i32x4_vec_zero), LLVM_CONST(i32x4_vec_zero),
LLVM_CONST(i64x2_vec_zero) }; LLVM_CONST(i64x2_vec_zero) };
LLVMValueRef lane_bits[] = { LLVMValueRef lane_shift_masks[] = {
LLVM_CONST(i32_eight), LLVMConstInt(I32_TYPE, 7, true),
LLVMConstInt(I32_TYPE, 16, true), LLVMConstInt(I32_TYPE, 15, true),
LLVMConstInt(I32_TYPE, 32, true), LLVMConstInt(I32_TYPE, 31, true),
LLVMConstInt(I32_TYPE, 64, true), LLVMConstInt(I32_TYPE, 63, true),
}; };
POP_I32(offset); POP_I32(offset);
@ -44,11 +44,11 @@ simd_shift(AOTCompContext *comp_ctx, AOTFuncContext *func_ctx,
return false; return false;
} }
/* offset mod LaneBits */ /* offset = offset & shift_mask */
if (!lane_bits[itype] if (!lane_shift_masks[itype]
|| !(offset = LLVMBuildSRem(comp_ctx->builder, offset, lane_bits[itype], || !(offset = LLVMBuildAnd(comp_ctx->builder, offset,
"offset_fix"))) { lane_shift_masks[itype], "offset_fix"))) {
HANDLE_FAILURE("LLVMBuildSRem"); HANDLE_FAILURE("LLVMBuildAnd");
return false; return false;
} }