JIT_OP_BR_LFALSE: [imm] -> { jit_long value = ((jit_long *)($1))[0]; if(!value) inst = output_branch(func, inst, 0xEB /* jmp */, insn); } [local] -> { unsigned char *patch; x86_alu_membase_imm(inst, X86_CMP, X86_EBP, $1, 0); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_membase_imm(inst, X86_CMP, X86_EBP, $1 + 4, 0); inst = output_branch(func, inst, 0x74 /* eq */, insn); x86_patch(patch, inst); } [lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_OR, $1, $1); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_reg(inst, X86_OR, %1, %1); inst = output_branch(func, inst, 0x74 /* eq */, insn); x86_patch(patch, inst); } JIT_OP_BR_LTRUE: [imm] -> { jit_long value = ((jit_long *)($1))[0]; if(value) inst = output_branch(func, inst, 0xEB /* jmp */, insn); } [local] -> { x86_alu_membase_imm(inst, X86_CMP, X86_EBP, $1, 0); inst = output_branch(func, inst, 0x75 /* ne */, insn); x86_alu_membase_imm(inst, X86_CMP, X86_EBP, $1 + 4, 0); inst = output_branch(func, inst, 0x75 /* ne */, insn); } [lreg] -> { x86_alu_reg_reg(inst, X86_OR, $1, $1); inst = output_branch(func, inst, 0x75 /* ne */, insn); x86_alu_reg_reg(inst, X86_OR, %1, %1); inst = output_branch(func, inst, 0x75 /* ne */, insn); } JIT_OP_BR_LEQ: [lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($2))[0]; jit_uint value2 = ((jit_uint *)($2))[1]; x86_alu_reg_imm(inst, X86_CMP, $1, value1); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_imm(inst, X86_CMP, %1, value2); inst = output_branch(func, inst, 0x74 /* eq */, insn); x86_patch(patch, inst); } [lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, $1, X86_EBP, $2); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_membase(inst, X86_CMP, %1, X86_EBP, $2 + 4); inst = output_branch(func, inst, 0x74 /* eq */, insn); x86_patch(patch, inst); } [lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, $1, $2); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_reg(inst, X86_CMP, %1, %2); inst = output_branch(func, inst, 0x74 /* eq */, insn); x86_patch(patch, inst); } JIT_OP_BR_LNE: [lreg, imm] -> { jit_uint value1 = ((jit_uint *)($2))[0]; jit_uint value2 = ((jit_uint *)($2))[1]; x86_alu_reg_imm(inst, X86_CMP, $1, value1); inst = output_branch(func, inst, 0x75 /* ne */, insn); x86_alu_reg_imm(inst, X86_CMP, %1, value2); inst = output_branch(func, inst, 0x75 /* ne */, insn); } [lreg, local] -> { x86_alu_reg_membase(inst, X86_CMP, $1, X86_EBP, $2); inst = output_branch(func, inst, 0x75 /* ne */, insn); x86_alu_reg_membase(inst, X86_CMP, %1, X86_EBP, $2 + 4); inst = output_branch(func, inst, 0x75 /* ne */, insn); } [lreg, lreg] -> { x86_alu_reg_reg(inst, X86_CMP, $1, $2); inst = output_branch(func, inst, 0x75 /* ne */, insn); x86_alu_reg_reg(inst, X86_CMP, %1, %2); inst = output_branch(func, inst, 0x75 /* ne */, insn); } JIT_OP_BR_LLT: [lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($2))[0]; jit_int value2 = ((jit_int *)($2))[1]; x86_alu_reg_imm(inst, X86_CMP, %1, value2); inst = output_branch(func, inst, 0x7C /* lt */, insn); patch = inst; x86_branch8(inst, X86_CC_GT, 0, 1); x86_alu_reg_imm(inst, X86_CMP, $1, value1); inst = output_branch(func, inst, 0x72 /* lt_un */, insn); x86_patch(patch, inst); } [lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %1, X86_EBP, $2 + 4); inst = output_branch(func, inst, 0x7C /* lt */, insn); patch = inst; x86_branch8(inst, X86_CC_GT, 0, 1); x86_alu_reg_membase(inst, X86_CMP, $1, X86_EBP, $2); inst = output_branch(func, inst, 0x72 /* lt_un */, insn); x86_patch(patch, inst); } [lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %1, %2); inst = output_branch(func, inst, 0x7C /* lt */, insn); patch = inst; x86_branch8(inst, X86_CC_GT, 0, 1); x86_alu_reg_reg(inst, X86_CMP, $1, $2); inst = output_branch(func, inst, 0x72 /* lt_un */, insn); x86_patch(patch, inst); } JIT_OP_BR_LLT_UN: [lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($2))[0]; jit_uint value2 = ((jit_uint *)($2))[1]; x86_alu_reg_imm(inst, X86_CMP, %1, value2); inst = output_branch(func, inst, 0x72 /* lt_un */, insn); patch = inst; x86_branch8(inst, X86_CC_GT, 0, 0); x86_alu_reg_imm(inst, X86_CMP, $1, value1); inst = output_branch(func, inst, 0x72 /* lt_un */, insn); x86_patch(patch, inst); } [lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %1, X86_EBP, $2 + 4); inst = output_branch(func, inst, 0x72 /* lt_un */, insn); patch = inst; x86_branch8(inst, X86_CC_GT, 0, 0); x86_alu_reg_membase(inst, X86_CMP, $1, X86_EBP, $2); inst = output_branch(func, inst, 0x72 /* lt_un */, insn); x86_patch(patch, inst); } [lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %1, %2); inst = output_branch(func, inst, 0x72 /* lt_un */, insn); patch = inst; x86_branch8(inst, X86_CC_GT, 0, 0); x86_alu_reg_reg(inst, X86_CMP, $1, $2); inst = output_branch(func, inst, 0x72 /* lt_un */, insn); x86_patch(patch, inst); } JIT_OP_BR_LLE: [lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($2))[0]; jit_int value2 = ((jit_int *)($2))[1]; x86_alu_reg_imm(inst, X86_CMP, %1, value2); inst = output_branch(func, inst, 0x7C /* lt */, insn); patch = inst; x86_branch8(inst, X86_CC_GT, 0, 1); x86_alu_reg_imm(inst, X86_CMP, $1, value1); inst = output_branch(func, inst, 0x76 /* le_un */, insn); x86_patch(patch, inst); } [lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %1, X86_EBP, $2 + 4); inst = output_branch(func, inst, 0x7C /* lt */, insn); patch = inst; x86_branch8(inst, X86_CC_GT, 0, 1); x86_alu_reg_membase(inst, X86_CMP, $1, X86_EBP, $2); inst = output_branch(func, inst, 0x76 /* le_un */, insn); x86_patch(patch, inst); } [lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %1, %2); inst = output_branch(func, inst, 0x7C /* lt */, insn); patch = inst; x86_branch8(inst, X86_CC_GT, 0, 1); x86_alu_reg_reg(inst, X86_CMP, $1, $2); inst = output_branch(func, inst, 0x76 /* le_un */, insn); x86_patch(patch, inst); } JIT_OP_BR_LLE_UN: [lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($2))[0]; jit_uint value2 = ((jit_uint *)($2))[1]; x86_alu_reg_imm(inst, X86_CMP, %1, value2); inst = output_branch(func, inst, 0x72 /* lt_un */, insn); patch = inst; x86_branch8(inst, X86_CC_GT, 0, 0); x86_alu_reg_imm(inst, X86_CMP, $1, value1); inst = output_branch(func, inst, 0x76 /* le_un */, insn); x86_patch(patch, inst); } [lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %1, X86_EBP, $2 + 4); inst = output_branch(func, inst, 0x72 /* lt_un */, insn); patch = inst; x86_branch8(inst, X86_CC_GT, 0, 0); x86_alu_reg_membase(inst, X86_CMP, $1, X86_EBP, $2); inst = output_branch(func, inst, 0x76 /* le_un */, insn); x86_patch(patch, inst); } [lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %1, %2); inst = output_branch(func, inst, 0x72 /* lt_un */, insn); patch = inst; x86_branch8(inst, X86_CC_GT, 0, 0); x86_alu_reg_reg(inst, X86_CMP, $1, $2); inst = output_branch(func, inst, 0x76 /* le_un */, insn); x86_patch(patch, inst); } JIT_OP_BR_LGT: [lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($2))[0]; jit_int value2 = ((jit_int *)($2))[1]; x86_alu_reg_imm(inst, X86_CMP, %1, value2); inst = output_branch(func, inst, 0x7F /* gt */, insn); patch = inst; x86_branch8(inst, X86_CC_LT, 0, 1); x86_alu_reg_imm(inst, X86_CMP, $1, value1); inst = output_branch(func, inst, 0x77 /* gt_un */, insn); x86_patch(patch, inst); } [lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %1, X86_EBP, $2 + 4); inst = output_branch(func, inst, 0x7F /* gt */, insn); patch = inst; x86_branch8(inst, X86_CC_LT, 0, 1); x86_alu_reg_membase(inst, X86_CMP, $1, X86_EBP, $2); inst = output_branch(func, inst, 0x77 /* gt_un */, insn); x86_patch(patch, inst); } [lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %1, %2); inst = output_branch(func, inst, 0x7F /* gt */, insn); patch = inst; x86_branch8(inst, X86_CC_LT, 0, 1); x86_alu_reg_reg(inst, X86_CMP, $1, $2); inst = output_branch(func, inst, 0x77 /* gt_un */, insn); x86_patch(patch, inst); } JIT_OP_BR_LGT_UN: [lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($2))[0]; jit_uint value2 = ((jit_uint *)($2))[1]; x86_alu_reg_imm(inst, X86_CMP, %1, value2); inst = output_branch(func, inst, 0x77 /* gt_un */, insn); patch = inst; x86_branch8(inst, X86_CC_LT, 0, 0); x86_alu_reg_imm(inst, X86_CMP, $1, value1); inst = output_branch(func, inst, 0x77 /* gt_un */, insn); x86_patch(patch, inst); } [lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %1, X86_EBP, $2 + 4); inst = output_branch(func, inst, 0x77 /* gt_un */, insn); patch = inst; x86_branch8(inst, X86_CC_LT, 0, 0); x86_alu_reg_membase(inst, X86_CMP, $1, X86_EBP, $2); inst = output_branch(func, inst, 0x77 /* gt_un */, insn); x86_patch(patch, inst); } [lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %1, %2); inst = output_branch(func, inst, 0x77 /* gt_un */, insn); patch = inst; x86_branch8(inst, X86_CC_LT, 0, 0); x86_alu_reg_reg(inst, X86_CMP, $1, $2); inst = output_branch(func, inst, 0x77 /* gt_un */, insn); x86_patch(patch, inst); } JIT_OP_BR_LGE: [lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($2))[0]; jit_int value2 = ((jit_int *)($2))[1]; x86_alu_reg_imm(inst, X86_CMP, %1, value2); inst = output_branch(func, inst, 0x7F /* gt */, insn); patch = inst; x86_branch8(inst, X86_CC_LT, 0, 1); x86_alu_reg_imm(inst, X86_CMP, $1, value1); inst = output_branch(func, inst, 0x73 /* ge_un */, insn); x86_patch(patch, inst); } [lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %1, X86_EBP, $2 + 4); inst = output_branch(func, inst, 0x7F /* gt */, insn); patch = inst; x86_branch8(inst, X86_CC_LT, 0, 1); x86_alu_reg_membase(inst, X86_CMP, $1, X86_EBP, $2); inst = output_branch(func, inst, 0x73 /* ge_un */, insn); x86_patch(patch, inst); } [lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %1, %2); inst = output_branch(func, inst, 0x7F /* gt */, insn); patch = inst; x86_branch8(inst, X86_CC_LT, 0, 1); x86_alu_reg_reg(inst, X86_CMP, $1, $2); inst = output_branch(func, inst, 0x73 /* ge_un */, insn); x86_patch(patch, inst); } JIT_OP_BR_LGE_UN: [lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($2))[0]; jit_uint value2 = ((jit_uint *)($2))[1]; x86_alu_reg_imm(inst, X86_CMP, %1, value2); inst = output_branch(func, inst, 0x77 /* gt_un */, insn); patch = inst; x86_branch8(inst, X86_CC_LT, 0, 0); x86_alu_reg_imm(inst, X86_CMP, $1, value1); inst = output_branch(func, inst, 0x73 /* ge_un */, insn); x86_patch(patch, inst); } [lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %1, X86_EBP, $2 + 4); inst = output_branch(func, inst, 0x77 /* gt_un */, insn); patch = inst; x86_branch8(inst, X86_CC_LT, 0, 0); x86_alu_reg_membase(inst, X86_CMP, $1, X86_EBP, $2); inst = output_branch(func, inst, 0x73 /* ge_un */, insn); x86_patch(patch, inst); } [lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %1, %2); inst = output_branch(func, inst, 0x77 /* gt_un */, insn); patch = inst; x86_branch8(inst, X86_CC_LT, 0, 0); x86_alu_reg_reg(inst, X86_CMP, $1, $2); inst = output_branch(func, inst, 0x73 /* ge_un */, insn); x86_patch(patch, inst); } JIT_OP_LEQ: [=reg, lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($3))[0]; jit_uint value2 = ((jit_uint *)($3))[1]; x86_alu_reg_imm(inst, X86_CMP, %2, value2); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_imm(inst, X86_CMP, $2, value1); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_EQ, 0); } [=reg, lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %2, X86_EBP, $3 + 4); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_membase(inst, X86_CMP, $2, X86_EBP, $3); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_EQ, 0); } [=reg, lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %2, %3); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_reg(inst, X86_CMP, $2, $3); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_EQ, 0); } JIT_OP_LNE: [=reg, lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($3))[0]; jit_uint value2 = ((jit_uint *)($3))[1]; x86_alu_reg_imm(inst, X86_CMP, %2, value2); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_imm(inst, X86_CMP, $2, value1); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_NE, 0); } [=reg, lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %2, X86_EBP, $3 + 4); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_membase(inst, X86_CMP, $2, X86_EBP, $3); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_NE, 0); } [=reg, lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %2, %3); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_reg(inst, X86_CMP, $2, $3); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_NE, 0); } JIT_OP_LLT: [=reg, lreg, imm] -> { unsigned char *patch1, *patch2; jit_uint value1 = ((jit_uint *)($3))[0]; jit_int value2 = ((jit_int *)($3))[1]; x86_alu_reg_imm(inst, X86_CMP, %2, value2); patch1 = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_imm(inst, X86_CMP, $2, value1); inst = setcc_reg(inst, $1, X86_CC_LT, 0); patch2 = inst; x86_jump8(inst, 0); x86_patch(patch1, inst); inst = setcc_reg(inst, $1, X86_CC_LT, 1); x86_patch(patch2, inst); } [=reg, lreg, local] -> { unsigned char *patch1, *patch2; x86_alu_reg_membase(inst, X86_CMP, %2, X86_EBP, $3 + 4); patch1 = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_membase(inst, X86_CMP, $2, X86_EBP, $3); inst = setcc_reg(inst, $1, X86_CC_LT, 0); patch2 = inst; x86_jump8(inst, 0); x86_patch(patch1, inst); inst = setcc_reg(inst, $1, X86_CC_LT, 1); x86_patch(patch2, inst); } [=reg, lreg, lreg] -> { unsigned char *patch1, *patch2; x86_alu_reg_reg(inst, X86_CMP, %2, %3); patch1 = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_reg(inst, X86_CMP, $2, $3); inst = setcc_reg(inst, $1, X86_CC_LT, 0); patch2 = inst; x86_jump8(inst, 0); x86_patch(patch1, inst); inst = setcc_reg(inst, $1, X86_CC_LT, 1); x86_patch(patch2, inst); } JIT_OP_LLT_UN: [=reg, lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($3))[0]; jit_uint value2 = ((jit_uint *)($3))[1]; x86_alu_reg_imm(inst, X86_CMP, %2, value2); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_imm(inst, X86_CMP, $2, value1); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_LT, 0); } [=reg, lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %2, X86_EBP, $3 + 4); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_membase(inst, X86_CMP, $2, X86_EBP, $3); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_LT, 0); } [=reg, lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %2, %3); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_reg(inst, X86_CMP, $2, $3); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_LT, 0); } JIT_OP_LLE: [=reg, lreg, imm] -> { unsigned char *patch1, *patch2; jit_uint value1 = ((jit_uint *)($3))[0]; jit_int value2 = ((jit_int *)($3))[1]; x86_alu_reg_imm(inst, X86_CMP, %2, value2); patch1 = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_imm(inst, X86_CMP, $2, value1); inst = setcc_reg(inst, $1, X86_CC_LE, 0); patch2 = inst; x86_jump8(inst, 0); x86_patch(patch1, inst); inst = setcc_reg(inst, $1, X86_CC_BE, 1); x86_patch(patch2, inst); } [=reg, lreg, local] -> { unsigned char *patch1, *patch2; x86_alu_reg_membase(inst, X86_CMP, %2, X86_EBP, $3 + 4); patch1 = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_membase(inst, X86_CMP, $2, X86_EBP, $3); inst = setcc_reg(inst, $1, X86_CC_LE, 0); patch2 = inst; x86_jump8(inst, 0); x86_patch(patch1, inst); inst = setcc_reg(inst, $1, X86_CC_BE, 1); x86_patch(patch2, inst); } [=reg, lreg, lreg] -> { unsigned char *patch1, *patch2; x86_alu_reg_reg(inst, X86_CMP, %2, %3); patch1 = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_reg(inst, X86_CMP, $2, $3); inst = setcc_reg(inst, $1, X86_CC_LE, 0); patch2 = inst; x86_jump8(inst, 0); x86_patch(patch1, inst); inst = setcc_reg(inst, $1, X86_CC_BE, 1); x86_patch(patch2, inst); } JIT_OP_LLE_UN: [=reg, lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($3))[0]; jit_uint value2 = ((jit_uint *)($3))[1]; x86_alu_reg_imm(inst, X86_CMP, %2, value2); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_imm(inst, X86_CMP, $2, value1); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_LE, 0); } [=reg, lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %2, X86_EBP, $3 + 4); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_membase(inst, X86_CMP, $2, X86_EBP, $3); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_LE, 0); } [=reg, lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %2, %3); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_reg(inst, X86_CMP, $2, $3); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_LE, 0); } JIT_OP_LGT: [=reg, lreg, imm] -> { jit_uint value1 = ((jit_uint *)($3))[0]; jit_int value2 = ((jit_int *)($3))[1]; unsigned char *patch1, *patch2; x86_alu_reg_imm(inst, X86_CMP, %2, value2); patch1 = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_imm(inst, X86_CMP, $2, value1); inst = setcc_reg(inst, $1, X86_CC_GT, 0); patch2 = inst; x86_jump8(inst, 0); x86_patch(patch1, inst); inst = setcc_reg(inst, $1, X86_CC_GT, 1); x86_patch(patch2, inst); } [=reg, lreg, local] -> { unsigned char *patch1, *patch2; x86_alu_reg_membase(inst, X86_CMP, %2, X86_EBP, $3 + 4); patch1 = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_membase(inst, X86_CMP, $2, X86_EBP, $3); inst = setcc_reg(inst, $1, X86_CC_GT, 0); patch2 = inst; x86_jump8(inst, 0); x86_patch(patch1, inst); inst = setcc_reg(inst, $1, X86_CC_GT, 1); x86_patch(patch2, inst); } [=reg, lreg, lreg] -> { unsigned char *patch1, *patch2; x86_alu_reg_reg(inst, X86_CMP, %2, %3); patch1 = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_reg(inst, X86_CMP, $2, $3); inst = setcc_reg(inst, $1, X86_CC_GT, 0); patch2 = inst; x86_jump8(inst, 0); x86_patch(patch1, inst); inst = setcc_reg(inst, $1, X86_CC_GT, 1); x86_patch(patch2, inst); } JIT_OP_LGT_UN: [=reg, lreg, imm] -> { unsigned char *patch; jit_uint value1 = ((jit_uint *)($3))[0]; jit_uint value2 = ((jit_uint *)($3))[1]; x86_alu_reg_imm(inst, X86_CMP, %2, value2); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_imm(inst, X86_CMP, $2, value1); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_GT, 0); } [=reg, lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %2, X86_EBP, $3 + 4); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_membase(inst, X86_CMP, $2, X86_EBP, $3); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_GT, 0); } [=reg, lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %2, %3); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_reg(inst, X86_CMP, $2, $3); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_GT, 0); } JIT_OP_LGE: [=reg, lreg, imm] -> { jit_uint value1 = ((jit_uint *)($3))[0]; jit_int value2 = ((jit_int *)($3))[1]; unsigned char *patch1, *patch2; x86_alu_reg_imm(inst, X86_CMP, %2, value2); patch1 = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_imm(inst, X86_CMP, $2, value1); inst = setcc_reg(inst, $1, X86_CC_GE, 0); patch2 = inst; x86_jump8(inst, 0); x86_patch(patch1, inst); inst = setcc_reg(inst, $1, X86_CC_GE, 1); x86_patch(patch2, inst); } [=reg, lreg, local] -> { unsigned char *patch1, *patch2; x86_alu_reg_membase(inst, X86_CMP, %2, X86_EBP, $3 + 4); patch1 = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_membase(inst, X86_CMP, $2, X86_EBP, $3); inst = setcc_reg(inst, $1, X86_CC_GE, 0); patch2 = inst; x86_jump8(inst, 0); x86_patch(patch1, inst); inst = setcc_reg(inst, $1, X86_CC_GE, 1); x86_patch(patch2, inst); } [=reg, lreg, lreg] -> { unsigned char *patch1, *patch2; x86_alu_reg_reg(inst, X86_CMP, %2, %3); patch1 = inst; x86_branch8(inst, X86_CC_NE, 0, 1); x86_alu_reg_reg(inst, X86_CMP, $2, $3); inst = setcc_reg(inst, $1, X86_CC_GE, 0); patch2 = inst; x86_jump8(inst, 0); x86_patch(patch1, inst); inst = setcc_reg(inst, $1, X86_CC_GE, 1); x86_patch(patch2, inst); } JIT_OP_LGE_UN: [=reg, lreg, imm] -> { unsigned char *patch; jit_int value1 = ((jit_int *)($3))[0]; jit_int value2 = ((jit_int *)($3))[1]; x86_alu_reg_imm(inst, X86_CMP, %2, value2); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_imm(inst, X86_CMP, $2, value1); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_GE, 0); } [=reg, lreg, local] -> { unsigned char *patch; x86_alu_reg_membase(inst, X86_CMP, %2, X86_EBP, $3 + 4); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_membase(inst, X86_CMP, $2, X86_EBP, $3); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_GE, 0); } [=reg, lreg, lreg] -> { unsigned char *patch; x86_alu_reg_reg(inst, X86_CMP, %2, %3); patch = inst; x86_branch8(inst, X86_CC_NE, 0, 0); x86_alu_reg_reg(inst, X86_CMP, $2, $3); x86_patch(patch, inst); inst = setcc_reg(inst, $1, X86_CC_GE, 0); }