+2006-11-26 Kirill Kononenko <Kirill.Kononenko@gmail.com>
+
+ * jit/jit-rules-x86.ins: if JIT_USE_SIGNALS is defined do not emit
+ explicit division by zero check (patch #5278).
+
2006-11-26 Aleksey Demakov <ademakov@gmail.com>
* jit/jit-reg-alloc.c (choose_output_register): fix global register
* jit/Makefile.am: add jit/jit-signal.c;
* jit/jit-signal.c, jit/jit-internal.h: add _jit_signal_init();
* jit/jit-init.c: call _jit_signal_init() if JIT_USE_SIGNALS is
- defined.
+ defined. (patch #5278.)
2006-08-11 Thomas Cort <linuxgeek@gmail.com>
}
[reg("eax"), reg, scratch("edx")] -> {
unsigned char *patch, *patch2;
+#ifndef JIT_USE_SIGNALS
x86_alu_reg_reg(inst, X86_OR, $2, $2);
patch = inst;
x86_branch8(inst, X86_CC_NE, 0, 0);
inst = throw_builtin(inst, func, JIT_RESULT_DIVISION_BY_ZERO);
x86_patch(patch, inst);
+#endif
x86_alu_reg_imm(inst, X86_CMP, $2, -1);
patch = inst;
x86_branch8(inst, X86_CC_NE, 0, 0);
x86_div_reg(inst, $3, 0);
}
[reg("eax"), reg, scratch("edx")] -> {
+#ifndef JIT_USE_SIGNALS
unsigned char *patch;
x86_alu_reg_reg(inst, X86_OR, $2, $2);
patch = inst;
x86_branch8(inst, X86_CC_NE, 0, 0);
inst = throw_builtin(inst, func, JIT_RESULT_DIVISION_BY_ZERO);
x86_patch(patch, inst);
+#endif
x86_clear_reg(inst, X86_EDX);
x86_div_reg(inst, $2, 0);
}
}
[=reg("edx"), *reg("eax"), reg, scratch("edx")] -> {
unsigned char *patch, *patch2;
+#ifndef JIT_USE_SIGNALS
x86_alu_reg_reg(inst, X86_OR, $3, $3);
patch = inst;
x86_branch8(inst, X86_CC_NE, 0, 0);
inst = throw_builtin(inst, func, JIT_RESULT_DIVISION_BY_ZERO);
x86_patch(patch, inst);
+#endif
x86_alu_reg_imm(inst, X86_CMP, $3, -1);
patch = inst;
x86_branch8(inst, X86_CC_NE, 0, 0);
x86_div_reg(inst, $4, 0);
}
[=reg("edx"), *reg("eax"), reg, scratch("edx")] -> {
+#ifndef JIT_USE_SIGNALS
unsigned char *patch;
x86_alu_reg_reg(inst, X86_OR, $3, $3);
patch = inst;
x86_branch8(inst, X86_CC_NE, 0, 0);
inst = throw_builtin(inst, func, JIT_RESULT_DIVISION_BY_ZERO);
x86_patch(patch, inst);
+#endif
x86_clear_reg(inst, X86_EDX);
x86_div_reg(inst, $3, 0);
}