Fix fast-jit codegen lower_select issue (#1082)

Directly patch the offset in condition jmp instructions as
the offset generated by asmjit is always 0.
This commit is contained in:
Wenyong Huang 2022-04-12 10:23:54 +08:00 committed by GitHub
parent d4fe9fcbdc
commit aeeaf4b02e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -3545,12 +3545,9 @@ static bool
cmp_r_and_jmp_relative(x86::Assembler &a, int32 reg_no, COND_OP op,
int32 offset)
{
Imm target;
if (offset >= -127 && offset <= 127)
target.setValue((int8)offset);
else
target.setValue(offset);
Imm target(INT32_MAX);
char *stream = (char *)a.code()->sectionById(0)->buffer().data()
+ a.code()->sectionById(0)->buffer().size();
switch (op) {
case EQ:
@ -3588,6 +3585,8 @@ cmp_r_and_jmp_relative(x86::Assembler &a, int32 reg_no, COND_OP op,
break;
}
/* The offset written by asmjit is always 0, we patch it again */
*(int32 *)(stream + 2) = offset;
return true;
}