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 */