Author: leo
Date: Tue Nov  1 23:41:22 2005
New Revision: 9703

Modified:
   trunk/jit/ppc/core.jit
   trunk/jit/ppc/jit_emit.h
Log:
Variable-sized reg frames 21 - improve ppc JIT

* use offsets instead of absolute addresses in ppc/core.jit
* implement offset register move functions

make testj gives 88.61% ok - failures are caused by PGE mostly


Modified: trunk/jit/ppc/core.jit
==============================================================================
--- trunk/jit/ppc/core.jit      (original)
+++ trunk/jit/ppc/core.jit      Tue Nov  1 23:41:22 2005
@@ -30,7 +30,7 @@ Parrot_set_i_ic {
     }
     else {
         jit_emit_mov_ri_i(NATIVECODE, ISR1, *INT_CONST[2]);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1); 
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1); 
     }
 }
 
@@ -39,7 +39,7 @@ Parrot_null_i {
         jit_emit_mov_rr(NATIVECODE, MAP[1], r31);
     }
     else {
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], r31); 
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), r31); 
     }
 }
 
@@ -48,14 +48,14 @@ TEMPLATE Parrot_set_x_x {
         jit_emit_mov_rr(NATIVECODE, MAP[1], MAP[2]);
     }
     else if (MAP[1]) {
-        jit_emit_mov_rm_i(NATIVECODE, MAP[1], &INT_REG[2]); 
+        jit_emit_mov_rm_i(NATIVECODE, MAP[1], ROFFS_INT(2)); 
     } 
     else if (MAP[2]) {
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], MAP[2]); 
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), MAP[2]); 
     }
     else {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[2]); 
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1); 
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(2)); 
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1); 
     }
 }
 
@@ -79,7 +79,7 @@ Parrot_set_n_nc {
     else {
         jit_emit_mov_ri_i(NATIVECODE, ISR1, &NUM_CONST[2]);
         jit_emit_lfd(NATIVECODE, FSR1, 0, ISR1);
-        jit_emit_mov_mr_n(NATIVECODE, &NUM_REG[1], FSR1); 
+        jit_emit_mov_mr_n(NATIVECODE, ROFFS_NUM(1), FSR1); 
     }
 }
 
@@ -88,17 +88,17 @@ Parrot_neg_i_i {
         jit_emit_neg_rr(NATIVECODE, MAP[1], MAP[2]);
     }
     else if (MAP[1]) {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[2]); 
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(2)); 
         jit_emit_neg_rr(NATIVECODE, MAP[1], ISR1);
     }
     else if (MAP[2]) {
         jit_emit_neg_rr(NATIVECODE, ISR1, MAP[1]);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
     else {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[2]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(2));
         jit_emit_neg_rr(NATIVECODE, ISR1, ISR1);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
 }
 
@@ -108,10 +108,10 @@ TEMPLATE Parrot_binop_i_ic {
         jit_emit_<op>_rrr(NATIVECODE, MAP[1], MAP[1], ISR1);
     }
     else {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[1]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(1));
         jit_emit_mov_ri_i(NATIVECODE, ISR2, *INT_CONST[2]);
         jit_emit_<op>_rrr(NATIVECODE, ISR1, ISR2, ISR1);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
 }
 
@@ -120,19 +120,19 @@ TEMPLATE Parrot_binop_x_x {
         jit_emit_<op>_rrr(NATIVECODE, MAP[1], MAP[1], MAP[2]);
     }
     else if (MAP[1]) {
-        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, &<T>_REG[2]); 
+        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, ROFFS_<T>(2)); 
         jit_emit_<op>_rrr(NATIVECODE, MAP[1], MAP[1], <s1>);
     }
     else if (MAP[2]) {
-        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, &<T>_REG[1]);
+        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, ROFFS_<T>(1));
         jit_emit_<op>_rrr(NATIVECODE, <s1>, <s1>, MAP[2]);
-        jit_emit_mov_mr<_N>(NATIVECODE, &<T>_REG[1], <s1>);
+        jit_emit_mov_mr<_N>(NATIVECODE, ROFFS_<T>(1), <s1>);
     }
     else {
-        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, &<T>_REG[1]);
-        jit_emit_mov_rm<_N>(NATIVECODE, <s2>, &<T>_REG[2]);
+        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, ROFFS_<T>(1));
+        jit_emit_mov_rm<_N>(NATIVECODE, <s2>, ROFFS_<T>(2));
         jit_emit_<op>_rrr(NATIVECODE, <s1>, <s2>, <s1>);
-        jit_emit_mov_mr<_N>(NATIVECODE, &<T>_REG[1], <s1>);
+        jit_emit_mov_mr<_N>(NATIVECODE, ROFFS_<T>(1), <s1>);
     }
 }
 
@@ -141,37 +141,37 @@ TEMPLATE Parrot_binop_x_x_x {
         jit_emit_<op>_rrr(NATIVECODE, MAP[1], MAP[2], MAP[3]);
     }
     else if (MAP[1] && MAP[2]) {
-        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, &<T>_REG[3]); 
+        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, ROFFS_<T>(3)); 
         jit_emit_<op>_rrr(NATIVECODE, MAP[1], MAP[2], <s1>);
     }
     else if (MAP[1] && MAP[3]) {
-        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, &<T>_REG[2]);
+        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, ROFFS_<T>(2));
         jit_emit_<op>_rrr(NATIVECODE, MAP[1], <s1>, MAP[3]);
     }
     else if (MAP[2] && MAP[3]) {
         jit_emit_<op>_rrr(NATIVECODE, <s1>, MAP[2], MAP[3]);
-        jit_emit_mov_mr<_N>(NATIVECODE, &<T>_REG[1], <s1>);
+        jit_emit_mov_mr<_N>(NATIVECODE, ROFFS_<T>(1), <s1>);
     }
     else if (MAP[1]) {
-        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, &<T>_REG[3]);
-        jit_emit_mov_rm<_N>(NATIVECODE, <s2>, &<T>_REG[2]);
+        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, ROFFS_<T>(3));
+        jit_emit_mov_rm<_N>(NATIVECODE, <s2>, ROFFS_<T>(2));
         jit_emit_<op>_rrr(NATIVECODE, MAP[1], <s2>, <s1>);
     }
     else if (MAP[2]) {
-        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, &<T>_REG[3]);
+        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, ROFFS_<T>(3));
         jit_emit_<op>_rrr(NATIVECODE, <s1>, MAP[2], <s1>);
-        jit_emit_mov_mr<_N>(NATIVECODE, &<T>_REG[1], <s1>);
+        jit_emit_mov_mr<_N>(NATIVECODE, ROFFS_<T>(1), <s1>);
     }
     else if (MAP[3]) {
-        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, &<T>_REG[2]);
+        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, ROFFS_<T>(2));
         jit_emit_<op>_rrr(NATIVECODE, <s1>, <s1>, MAP[3]);
-        jit_emit_mov_mr<_N>(NATIVECODE, &<T>_REG[1], <s1>);
+        jit_emit_mov_mr<_N>(NATIVECODE, ROFFS_<T>(1), <s1>);
     }
     else {
-        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, &<T>_REG[3]);
-        jit_emit_mov_rm<_N>(NATIVECODE, <s2>, &<T>_REG[2]);
+        jit_emit_mov_rm<_N>(NATIVECODE, <s1>, ROFFS_<T>(3));
+        jit_emit_mov_rm<_N>(NATIVECODE, <s2>, ROFFS_<T>(2));
         jit_emit_<op>_rrr(NATIVECODE, <s1>, <s2>, <s1>);
-        jit_emit_mov_mr<_N>(NATIVECODE, &<T>_REG[1], <s1>);
+        jit_emit_mov_mr<_N>(NATIVECODE, ROFFS_<T>(1), <s1>);
     }
 }
 
@@ -181,20 +181,20 @@ TEMPLATE Parrot_binop_i_ic_i {
         jit_emit_<op>_rrr(NATIVECODE, MAP[1], ISR1, MAP[3]);
     }
     else if (MAP[1]) {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[3]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(3));
         jit_emit_mov_ri_i(NATIVECODE, ISR2, *INT_CONST[2]);
         jit_emit_<op>_rrr(NATIVECODE, MAP[1], ISR2, ISR1);
     }
     else if (MAP[3]) {
         jit_emit_mov_ri_i(NATIVECODE, ISR1, *INT_CONST[2]);
         jit_emit_<op>_rrr(NATIVECODE, ISR1, ISR1, MAP[3]);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
     else {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[3]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(3));
         jit_emit_mov_ri_i(NATIVECODE, ISR2, *INT_CONST[2]);
         jit_emit_<op>_rrr(NATIVECODE, ISR1, ISR2, ISR1);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
 }
 
@@ -205,19 +205,19 @@ TEMPLATE Parrot_binop_i_i_ic {
     }
     else if (MAP[1]) {
         jit_emit_mov_ri_i(NATIVECODE, ISR1, *INT_CONST[3]);
-        jit_emit_mov_rm_i(NATIVECODE, ISR2, &INT_REG[2]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR2, ROFFS_INT(2));
         jit_emit_<op>_rrr(NATIVECODE, MAP[1], ISR2, ISR1);
     }
     else if (MAP[2]) {
         jit_emit_mov_ri_i(NATIVECODE, ISR1, *INT_CONST[3]);
         jit_emit_<op>_rrr(NATIVECODE, ISR1, MAP[2], ISR1);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
     else {
         jit_emit_mov_ri_i(NATIVECODE, ISR1, *INT_CONST[3]);
-        jit_emit_mov_rm_i(NATIVECODE, ISR2, &INT_REG[2]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR2, ROFFS_INT(2));
         jit_emit_<op>_rrr(NATIVECODE, ISR1, ISR2, ISR1);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
 }
 
@@ -400,13 +400,13 @@ Parrot_cmod_i_i_i {
         jit_emit_sub_rrr(NATIVECODE, MAP[1], MAP[2], MAP[1]);
     }
     else if (MAP[1] && MAP[2]) {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[3]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(3));
         jit_emit_div_rrr(NATIVECODE, MAP[1], MAP[2], ISR1);
         jit_emit_mul_rrr(NATIVECODE, MAP[1], MAP[1], ISR1);
         jit_emit_sub_rrr(NATIVECODE, MAP[1], MAP[2], MAP[1]);
     }
     else if (MAP[1] && MAP[3]) {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[2]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(2));
         jit_emit_div_rrr(NATIVECODE, MAP[1], ISR1, MAP[3]);
         jit_emit_mul_rrr(NATIVECODE, MAP[1], MAP[1], MAP[3]);
         jit_emit_sub_rrr(NATIVECODE, MAP[1], ISR1, MAP[1]);
@@ -415,38 +415,38 @@ Parrot_cmod_i_i_i {
         jit_emit_div_rrr(NATIVECODE, ISR1, MAP[2], MAP[3]);
         jit_emit_mul_rrr(NATIVECODE, ISR1, ISR1, MAP[3]);
         jit_emit_sub_rrr(NATIVECODE, ISR1, MAP[2], ISR1);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
     else if (MAP[1]) {
-        jit_emit_mov_rm_i(NATIVECODE, ISR2, &INT_REG[3]);
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[2]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR2, ROFFS_INT(3));
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(2));
         jit_emit_div_rrr(NATIVECODE, MAP[1], ISR1, ISR2);
         jit_emit_mul_rrr(NATIVECODE, MAP[1], MAP[1], ISR2);
         jit_emit_sub_rrr(NATIVECODE, MAP[1], ISR1, MAP[1]);
     }
     else if (MAP[2]) {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[3]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(3));
         jit_emit_div_rrr(NATIVECODE, ISR2, MAP[2], ISR1);
         jit_emit_mul_rrr(NATIVECODE, ISR2, ISR2, ISR1);
         jit_emit_sub_rrr(NATIVECODE, ISR2, MAP[2], ISR2);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR2);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR2);
     }
     else if (MAP[3]) {
-        jit_emit_mov_rm_i(NATIVECODE, ISR2, &INT_REG[2]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR2, ROFFS_INT(2));
         jit_emit_div_rrr(NATIVECODE, ISR1, ISR2, MAP[3]);
         jit_emit_mul_rrr(NATIVECODE, ISR1, ISR1, MAP[3]);
         jit_emit_sub_rrr(NATIVECODE, ISR1, ISR2, ISR1);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
     else {
 ; XXX: blech.  Not enough temp registers.
-        jit_emit_mov_rm_i(NATIVECODE, ISR2, &INT_REG[3]);
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[2]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR2, ROFFS_INT(3));
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(2));
         jit_emit_div_rrr(NATIVECODE, ISR1, ISR1, ISR2);
         jit_emit_mul_rrr(NATIVECODE, ISR1, ISR1, ISR2);
-        jit_emit_mov_rm_i(NATIVECODE, ISR2, &INT_REG[2]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR2, ROFFS_INT(2));
         jit_emit_sub_rrr(NATIVECODE, ISR1, ISR1, ISR2);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
 }
 
@@ -455,9 +455,9 @@ Parrot_inc_i {
         jit_emit_add_rri_i (NATIVECODE, MAP[1], MAP[1], 1);
     }
     else {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[1]); 
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(1)); 
         jit_emit_add_rri_i (NATIVECODE, ISR1, ISR1, 1);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
 }
 
@@ -466,9 +466,9 @@ Parrot_dec_i {
         jit_emit_add_rri_i (NATIVECODE, MAP[1], MAP[1], -1);
     }
     else {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[1]); 
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(1)); 
         jit_emit_add_rri_i (NATIVECODE, ISR1, ISR1, -1);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
 }
 
@@ -480,9 +480,9 @@ Parrot_inc_n {
         jit_emit_fadd_rrr(NATIVECODE, MAP[1], MAP[1], FSR1);
     }
     else {
-       jit_emit_mov_rm_n(NATIVECODE, FSR2, &NUM_REG[1]);
+       jit_emit_mov_rm_n(NATIVECODE, FSR2, ROFFS_NUM(1));
         jit_emit_fadd_rrr(NATIVECODE, FSR2, FSR2, FSR1);
-        jit_emit_mov_mr_n(NATIVECODE, &NUM_REG[1], FSR2);
+        jit_emit_mov_mr_n(NATIVECODE, ROFFS_NUM(1), FSR2);
     }
 }
 
@@ -494,9 +494,9 @@ Parrot_dec_n {
         jit_emit_fsub_rrr(NATIVECODE, MAP[1], MAP[1], FSR1);
     }
     else {
-       jit_emit_mov_rm_n(NATIVECODE, FSR2, &NUM_REG[1]);
+       jit_emit_mov_rm_n(NATIVECODE, FSR2, ROFFS_NUM(1));
         jit_emit_fsub_rrr(NATIVECODE, FSR2, FSR2, FSR1);
-        jit_emit_mov_mr_n(NATIVECODE, &NUM_REG[1], FSR2);
+        jit_emit_mov_mr_n(NATIVECODE, ROFFS_NUM(1), FSR2);
     }
 }
 
@@ -505,17 +505,17 @@ Parrot_neg_n_n {
         jit_emit_fneg_rrr(NATIVECODE, MAP[1], MAP[2]);
     }
     else if (MAP[1]) {
-        jit_emit_mov_rm_n(NATIVECODE, FSR1, &NUM_REG[2]);
+        jit_emit_mov_rm_n(NATIVECODE, FSR1, ROFFS_NUM(2));
         jit_emit_fneg_rrr(NATIVECODE, MAP[1], FSR1);
     }
     else if (MAP[2]) {
         jit_emit_fneg_rrr(NATIVECODE, FSR1, MAP[2]);
-        jit_emit_mov_mr_n(NATIVECODE, &NUM_REG[1], FSR1);
+        jit_emit_mov_mr_n(NATIVECODE, ROFFS_NUM(1), FSR1);
     }
     else {
-        jit_emit_mov_rm_n(NATIVECODE, FSR1, &NUM_REG[2]);
+        jit_emit_mov_rm_n(NATIVECODE, FSR1, ROFFS_NUM(2));
         jit_emit_fneg_rrr(NATIVECODE, FSR1, FSR1);
-        jit_emit_mov_mr_n(NATIVECODE, &NUM_REG[1], FSR1);
+        jit_emit_mov_mr_n(NATIVECODE, ROFFS_NUM(1), FSR1);
     }
 }
 
@@ -524,18 +524,18 @@ TEMPLATE Parrot_unaryop_x {
         jit_emit_<op>(NATIVECODE, MAP[1], MAP[1]);
     }
     else {
-        jit_emit_mov_rm<_N>(NATIVECODE, SCRATCH1, &SOME_REG[1]);
+        jit_emit_mov_rm<_N>(NATIVECODE, SCRATCH1, ROFFS_INT(1));
         jit_emit_<op>(NATIVECODE, SCRATCH1, SCRATCH1);
-        jit_emit_mov_mr<_N>(NATIVECODE, &SOME_REG[1], SCRATCH1);
+        jit_emit_mov_mr<_N>(NATIVECODE, ROFFS_INT(1), SCRATCH1);
     }
 }
 
 TEMPLATE Parrot_unaryop_i {
-    Parrot_unaryop_x s/<_N>/_i/ s/SOME_R/INT_R/ s/SCRATCH1/ISR1/
+    Parrot_unaryop_x s/<_N>/_i/  s/SCRATCH1/ISR1/
 }
 
 TEMPLATE Parrot_unaryop_n {
-    Parrot_unaryop_x s/<_N>/_n/ s/SOME_R/NUM_R/ s/SCRATCH1/FSR1/
+    Parrot_unaryop_x s/<_N>/_n/ s/INT/NUM/ s/SCRATCH1/FSR1/
 }
 
 Parrot_neg_i {
@@ -557,11 +557,11 @@ Parrot_abs_i {
         jit_emit_xor_rrr(NATIVECODE, MAP[1], ISR2, ISR1);
     }
     else {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[1]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(1));
         jit_emit_srawi(NATIVECODE, ISR2, ISR1, 31);
         jit_emit_add_rrr(NATIVECODE, ISR1, ISR2, ISR1);
         jit_emit_xor_rrr(NATIVECODE, ISR1, ISR1, ISR2);
-        jit_emit_mov_mr_i(NATIVECODE, &INT_REG[1], ISR1);
+        jit_emit_mov_mr_i(NATIVECODE, ROFFS_INT(1), ISR1);
     }
 }
 
@@ -570,17 +570,17 @@ Parrot_abs_n_n {
         jit_emit_fabs_rrr(NATIVECODE, MAP[1], MAP[2]);
     }
     else if (MAP[1]) {
-        jit_emit_mov_rm_n(NATIVECODE, FSR1, &NUM_REG[2]);
+        jit_emit_mov_rm_n(NATIVECODE, FSR1, ROFFS_NUM(2));
         jit_emit_fabs_rrr(NATIVECODE, MAP[1], FSR1);
     }
     else if (MAP[2]) {
         jit_emit_fabs_rrr(NATIVECODE, FSR1, MAP[2]);
-        jit_emit_mov_mr_n(NATIVECODE, &NUM_REG[1], FSR1);
+        jit_emit_mov_mr_n(NATIVECODE, ROFFS_NUM(1), FSR1);
     }
     else {
-        jit_emit_mov_rm_n(NATIVECODE, FSR1, &NUM_REG[2]);
+        jit_emit_mov_rm_n(NATIVECODE, FSR1, ROFFS_NUM(2));
         jit_emit_fabs_rrr(NATIVECODE, FSR1, FSR1);
-        jit_emit_mov_mr_n(NATIVECODE, &NUM_REG[1], FSR1);
+        jit_emit_mov_mr_n(NATIVECODE, ROFFS_NUM(1), FSR1);
     }
 }
 
@@ -593,7 +593,7 @@ TEMPLATE Parrot_ifunless_i_ic {
         jit_emit_cmp_ri(NATIVECODE, MAP[1], 0);
     }
     else {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[1]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(1));
         jit_emit_cmp_ri(NATIVECODE, ISR1, 0);
     }
     jit_emit_bc(jit_info, <COND>, *INT_CONST[2]);
@@ -615,7 +615,7 @@ TEMPLATE Parrot_ifunless_n_ic {
         jit_emit_fcmp_rr(NATIVECODE, MAP[1], FSR1);
     }
     else {
-       jit_emit_mov_rm_n(NATIVECODE, FSR2, &NUM_REG[1]);
+       jit_emit_mov_rm_n(NATIVECODE, FSR2, ROFFS_NUM(1));
         jit_emit_fcmp_rr(NATIVECODE, FSR2, FSR1);
     }
     jit_emit_bc(jit_info, <COND>, *INT_CONST[2]);
@@ -635,16 +635,16 @@ TEMPLATE Parrot_branch_i_i_ic {
         jit_emit_cmp_rr(NATIVECODE, MAP[1], MAP[2]);
     }
     else if (MAP[1]) {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[2]); 
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(2)); 
         jit_emit_cmp_rr(NATIVECODE, MAP[1], ISR1);
     }
     else if (MAP[2]) {
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[1]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(1));
         jit_emit_cmp_rr(NATIVECODE, ISR1, MAP[2]);
     }
     else {
-        jit_emit_mov_rm_i(NATIVECODE, ISR2, &INT_REG[1]);
-        jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[2]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR2, ROFFS_INT(1));
+        jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(2));
         jit_emit_cmp_rr(NATIVECODE, ISR2, ISR1);
     }
 ; Now the branch. XXX: need to handle large displacements.
@@ -658,7 +658,7 @@ TEMPLATE Parrot_branch_i_ic_ic {
         jit_emit_cmp_rr(NATIVECODE, MAP[1], ISR1);
     }
     else {
-        jit_emit_mov_rm_i(NATIVECODE, ISR2, &INT_REG[1]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR2, ROFFS_INT(1));
         jit_emit_cmp_rr(NATIVECODE, ISR2, ISR1);
     }
 ; Now the branch. XXX: need to handle large displacements.
@@ -673,7 +673,7 @@ TEMPLATE Parrot_branch_ic_i_ic {
         jit_emit_cmp_rr(NATIVECODE, ISR1, MAP[2]);
     }
     else {
-        jit_emit_mov_rm_i(NATIVECODE, ISR2, &INT_REG[2]);
+        jit_emit_mov_rm_i(NATIVECODE, ISR2, ROFFS_INT(2));
         jit_emit_cmp_rr(NATIVECODE, ISR1, ISR2);
     }
 ; Now the branch. XXX: need to handle large displacements.
@@ -787,16 +787,16 @@ TEMPLATE Parrot_branch_n_n_ic {
         jit_emit_fcmp_rr(NATIVECODE, MAP[1], MAP[2]);
     }
     else if (MAP[1]) {
-        jit_emit_mov_rm_n(NATIVECODE, FSR1, &NUM_REG[2]);
+        jit_emit_mov_rm_n(NATIVECODE, FSR1, ROFFS_NUM(2));
         jit_emit_fcmp_rr(NATIVECODE, MAP[1], FSR1);
     }
     else if (MAP[2]) {
-        jit_emit_mov_rm_n(NATIVECODE, FSR1, &NUM_REG[1]);
+        jit_emit_mov_rm_n(NATIVECODE, FSR1, ROFFS_NUM(1));
         jit_emit_fcmp_rr(NATIVECODE, FSR1, MAP[2]);
     }
     else {
-        jit_emit_mov_rm_n(NATIVECODE, FSR2, &NUM_REG[1]);
-        jit_emit_mov_rm_n(NATIVECODE, FSR1, &NUM_REG[2]);
+        jit_emit_mov_rm_n(NATIVECODE, FSR2, ROFFS_NUM(1));
+        jit_emit_mov_rm_n(NATIVECODE, FSR1, ROFFS_NUM(2));
         jit_emit_fcmp_rr(NATIVECODE, FSR2, FSR1);
     }
     jit_emit_bc(jit_info, <CON>, *INT_CONST[3]);
@@ -809,7 +809,7 @@ TEMPLATE Parrot_branch_n_nc_ic {
         jit_emit_fcmp_rr(NATIVECODE, MAP[1], FSR1);
     }
     else {
-        jit_emit_mov_rm_n(NATIVECODE, FSR2, &NUM_REG[1]);
+        jit_emit_mov_rm_n(NATIVECODE, FSR2, ROFFS_NUM(1));
         jit_emit_mov_ri_i(NATIVECODE, ISR1, &NUM_CONST[2]);
         jit_emit_lfd(NATIVECODE, FSR1, 0, ISR1);
         jit_emit_fcmp_rr(NATIVECODE, FSR2, FSR1);
@@ -824,7 +824,7 @@ TEMPLATE Parrot_branch_nc_n_ic {
         jit_emit_fcmp_rr(NATIVECODE, FSR1, MAP[2]);
     }
     else {
-        jit_emit_mov_rm_n(NATIVECODE, FSR2, &NUM_REG[2]);
+        jit_emit_mov_rm_n(NATIVECODE, FSR2, ROFFS_NUM(2));
         jit_emit_mov_ri_i(NATIVECODE, ISR1, &NUM_CONST[1]);
         jit_emit_lfd(NATIVECODE, FSR1, 0, ISR1);
         jit_emit_fcmp_rr(NATIVECODE, FSR1, FSR2);
@@ -939,7 +939,7 @@ Parrot_branch_ic {
 }
 
 Parrot_branch_i {
-    jit_emit_mov_rm_i(NATIVECODE, ISR1, &INT_REG[1]);
+    jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_INT(1));
     jit_emit_mtlr(NATIVECODE, ISR1);
     jit_emit_blr(NATIVECODE);
 }
@@ -951,7 +951,7 @@ TEMPLATE Parrot_set_or_clone_s_sc {
 
     jit_emit_call_func(NATIVECODE, (void*) string_copy);
 
-    jit_emit_mov_mr_i(NATIVECODE, &STRING_REG[1], r3);
+    jit_emit_mov_mr_i(NATIVECODE, ROFFS_STR(1), r3);
 }
 
 Parrot_set_s_sc {
@@ -963,20 +963,20 @@ Parrot_clone_s_sc {
 }
 
 Parrot_set_s_s {
-       jit_emit_mov_rm_i(NATIVECODE, ISR1, &STRING_REG[2]); 
-       jit_emit_mov_mr_i(NATIVECODE, &STRING_REG[1], ISR1); 
+       jit_emit_mov_rm_i(NATIVECODE, ISR1, ROFFS_STR(2)); 
+       jit_emit_mov_mr_i(NATIVECODE, ROFFS_STR(1), ISR1); 
 }
 
 Parrot_clone_s_s {
     jit_emit_mov_rr(NATIVECODE, r3, r16);
-    jit_emit_mov_rm_i(NATIVECODE, r4, &STRING_REG[2]);
+    jit_emit_mov_rm_i(NATIVECODE, r4, ROFFS_STR(2));
 
     jit_emit_call_func(NATIVECODE, (void*) string_copy);
 
-    jit_emit_mov_mr_i(NATIVECODE, &STRING_REG[1], r3);
+    jit_emit_mov_mr_i(NATIVECODE,ROFFS_STR(1), r3);
 }
 
 Parrot_set_p_pc {
     jit_emit_mov_ri_i(NATIVECODE, ISR1, CONST(2)->u.key);
-    jit_emit_mov_mr_i(NATIVECODE, &PMC_REG[1], ISR1); 
+    jit_emit_mov_mr_i(NATIVECODE, ROFFS_PMC(1), ISR1); 
 }

Modified: trunk/jit/ppc/jit_emit.h
==============================================================================
--- trunk/jit/ppc/jit_emit.h    (original)
+++ trunk/jit/ppc/jit_emit.h    Tue Nov  1 23:41:22 2005
@@ -60,6 +60,8 @@ typedef enum {
     r31
 } ppc_iregister_t;
 
+#  define Parrot_jit_emit_get_base_reg_no(pc) r13
+
 typedef enum {
     f0,
     FSR1 = f0,
@@ -419,15 +421,11 @@ enum { JIT_PPC_CALL, JIT_PPC_BRANCH, JIT
 
 /* Load a CPU register from a Parrot register. */
 
-/* TODO use offsets directly - see also jit/i386 and src/jit.c JIT_USE_OFFS */
+#  define jit_emit_mov_rm_i(pc, reg, offs) \
+    jit_emit_lwz(pc, reg, offs, r13)
 
-#  define jit_emit_mov_rm_i(pc, reg, addr) \
-    jit_emit_lwz(pc, reg, (((char *)addr) - \
-      ((char *)interpreter->ctx.bp.regs_i)), r13)
-
-#  define jit_emit_mov_rm_n(pc, reg, addr) \
-    jit_emit_lfd(pc, reg, (((char *)addr) - \
-      ((char *)interpreter->ctx.bp.regs_i)), r13)
+#  define jit_emit_mov_rm_n(pc, reg, offs) \
+    jit_emit_lfd(pc, reg, offs, r13)
 
 /* compare operation.
  *
@@ -561,14 +559,11 @@ jit_emit_bx(Parrot_jit_info_t *jit_info,
 
 /* Store a CPU register back to a Parrot register. */
 
-#  define jit_emit_mov_mr_i(pc, addr, reg) \
-    jit_emit_stw(pc, reg, (((char *)addr) - \
-      ((char *)interpreter->ctx.bp.regs_i)), r13)
-
-#  define jit_emit_mov_mr_n(pc, addr, reg) \
-    jit_emit_stfd(pc, reg, (((char *)addr) - \
-      ((char *)interpreter->ctx.bp.regs_i)), r13)
+#  define jit_emit_mov_mr_i(pc, offs, reg) \
+    jit_emit_stw(pc, reg, offs, r13)
 
+#  define jit_emit_mov_mr_n(pc, offs, reg) \
+    jit_emit_stfd(pc, reg,  offs, r13)
 
 /*
  * Load a 32-bit immediate value.
@@ -804,10 +799,10 @@ Parrot_jit_dofixup(Parrot_jit_info_t *ji
 
 /* move reg to mem (i.e. intreg) */
 void
-Parrot_jit_emit_mov_mr(Interp * interpreter, char *mem, int reg)
+Parrot_jit_emit_mov_mr_offs(Interp * interpreter, int base, size_t offs, int 
reg)
 {
     jit_emit_mov_mr_i(
-        ((Parrot_jit_info_t *)(interpreter->code->jit_info))->native_ptr, mem, 
reg);
+        ((Parrot_jit_info_t *)(interpreter->code->jit_info))->native_ptr, 
offs, reg);
     /*
      * if we save registers, the last instruction isn't the ins that
      * sets condition codes, so the speed hack in Parrot_ifunless_i_ic
@@ -818,27 +813,27 @@ Parrot_jit_emit_mov_mr(Interp * interpre
 
 /* move mem (i.e. intreg) to reg */
 void
-Parrot_jit_emit_mov_rm(Interp * interpreter, int reg, char *mem)
+Parrot_jit_emit_mov_rm_offs(Interp * interpreter, int reg, int base, size_t 
offs)
 {
     jit_emit_mov_rm_i(
-        ((Parrot_jit_info_t *)(interpreter->code->jit_info))->native_ptr, reg, 
mem);
+        ((Parrot_jit_info_t *)(interpreter->code->jit_info))->native_ptr, reg, 
offs);
 }
 
 /* move reg to mem (i.e. numreg) */
 void
-Parrot_jit_emit_mov_mr_n(Interp * interpreter, char *mem,int reg)
+Parrot_jit_emit_mov_mr_n_offs(Interp * interpreter, int base, size_t offs, int 
reg)
 {
     jit_emit_mov_mr_n(
-        ((Parrot_jit_info_t *)(interpreter->code->jit_info))->native_ptr, mem, 
reg);
+        ((Parrot_jit_info_t *)(interpreter->code->jit_info))->native_ptr, 
offs, reg);
     ((Parrot_jit_info_t *)(interpreter->code->jit_info))->prev_op = 0;
 }
 
 /* move mem (i.e. numreg) to reg */
 void
-Parrot_jit_emit_mov_rm_n(Interp * interpreter, int reg,char *mem)
+Parrot_jit_emit_mov_rm_n_offs(Interp * interpreter, int reg, int base, size_t 
offs)
 {
     jit_emit_mov_rm_n(
-        ((Parrot_jit_info_t *)(interpreter->code->jit_info))->native_ptr, reg, 
mem);
+        ((Parrot_jit_info_t *)(interpreter->code->jit_info))->native_ptr, reg, 
offs);
 }
 
 #endif /* JIT_EMIT == 2 */

Reply via email to