Author: leo
Date: Fri Feb 10 09:03:40 2006
New Revision: 11499
Modified:
trunk/src/jit/i386/core.jit
Log:
JIT/x86 - save a few hw ins
* use lea for add_i_i_ic and sub_i_i_ic
* use lea for add_i_ic_i
Modified: trunk/src/jit/i386/core.jit
==============================================================================
--- trunk/src/jit/i386/core.jit (original)
+++ trunk/src/jit/i386/core.jit Fri Feb 10 09:03:40 2006
@@ -482,8 +482,16 @@ Parrot_cmod_n_nc_nc {
TEMPLATE Parrot_binop_x_x_xc {
if (MAP[1] && MAP[2]) {
- jit_emit_mov_rr<_N>(NATIVECODE, MAP[1], MAP[2]);
- jit_emit_<op>_ri<_N>(NATIVECODE, MAP[1], <typ>_CONST[3]);
+ if (*CUR_OPCODE == PARROT_OP_add_i_i_ic) {
+ emitm_lea_m_r(NATIVECODE, MAP(1), MAP(2), 0, 1, CUR_OPCODE[3]);
+ }
+ else if (*CUR_OPCODE == PARROT_OP_sub_i_i_ic) {
+ emitm_lea_m_r(NATIVECODE, MAP(1), MAP(2), 0, 1, -CUR_OPCODE[3]);
+ }
+ else {
+ jit_emit_mov_rr<_N>(NATIVECODE, MAP[1], MAP[2]);
+ jit_emit_<op>_ri<_N>(NATIVECODE, MAP[1], <typ>_CONST[3]);
+ }
}
else if (MAP[1]) {
jit_emit_mov_RM<_N>(NATIVECODE, MAP[1], ROFFS_INT(2));
@@ -583,14 +591,19 @@ Parrot_rot_i_i_ic_ic {
TEMPLATE Parrot_binop_x_xc_x {
if (MAP[1] && MAP[3]) {
- if (MAP[1] == MAP[3]) {
- jit_emit_mov_ri<_N>(NATIVECODE, ISR1, <typ>_CONST[2]);
- jit_emit_<op>_rr<_N>(NATIVECODE, ISR1, MAP[3]);
- jit_emit_mov_rr<_N>(NATIVECODE, MAP[1], ISR1)
+ if (*CUR_OPCODE == PARROT_OP_add_i_ic_i) {
+ emitm_lea_m_r(NATIVECODE, MAP(1), MAP(3), 0, 1, CUR_OPCODE[2]);
}
else {
- jit_emit_mov_ri<_N>(NATIVECODE, MAP[1], <typ>_CONST[2]);
- jit_emit_<op>_rr<_N>(NATIVECODE, MAP[1], MAP[3]);
+ if (MAP[1] == MAP[3]) {
+ jit_emit_mov_ri<_N>(NATIVECODE, ISR1, <typ>_CONST[2]);
+ jit_emit_<op>_rr<_N>(NATIVECODE, ISR1, MAP[3]);
+ jit_emit_mov_rr<_N>(NATIVECODE, MAP[1], ISR1)
+ }
+ else {
+ jit_emit_mov_ri<_N>(NATIVECODE, MAP[1], <typ>_CONST[2]);
+ jit_emit_<op>_rr<_N>(NATIVECODE, MAP[1], MAP[3]);
+ }
}
}
else if (MAP[1]) {