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]) {

Reply via email to