+2006-10-23 Aleksey Demakov <ademakov@gmail.com>
+
+ * jit/jit-rules-x86.ins: JIT_OP_EXPAND_INT and JIT_OP_EXPAND_UINT
+ rules were broken for local byte or short values. Fixed by removing
+ the local pattern altogether as the reg pattern produces the same
+ code but without the bug.
+
2006-10-18 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-reg-alloc.c (clobbers_register, bind_value): enable
}
JIT_OP_EXPAND_INT:
- [=lreg, imm] -> {
- x86_mov_reg_imm(inst, $1, $2);
- x86_mov_reg_reg(inst, %1, $1, 4);
- x86_shift_reg_imm(inst, X86_SAR, %1, 31);
- }
- [=lreg, local] -> {
- x86_mov_reg_membase(inst, $1, X86_EBP, $2, 4);
- x86_mov_reg_reg(inst, %1, $1, 4);
- x86_shift_reg_imm(inst, X86_SAR, %1, 31);
- }
[=lreg, reg] -> {
if($1 != $2)
{
}
JIT_OP_EXPAND_UINT:
- [=lreg, imm] -> {
- x86_mov_reg_imm(inst, $1, $2);
- x86_clear_reg(inst, %1);
- }
- [=lreg, local] -> {
- x86_mov_reg_membase(inst, $1, X86_EBP, $2, 4);
- x86_clear_reg(inst, %1);
- }
[=lreg, reg] -> {
if($1 != $2)
{