diff --git a/ChangeLog b/ChangeLog index 942b3257f..41b04989a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2013-01-17 Paulo Andrade + + * check/add.tst, check/allocai.tst, check/bp.tst, check/divi.tst, + check/fib.tst, check/lightning.c, include/lightning/jit_arm.h, + include/lightning/jit_mips.h, include/lightning/jit_ppc.h, + include/lightning/jit_private.h, include/lightning/jit_x86.h: + Make JIT_RET, JIT_FRET and JIT_SP private. These should not be + used in any operations due to frequently having special + constraints (usually JIT_FRET). JIT_FP must be made available + because it must be used as the base register to access stack + space allocated with jit_allocai. + 2013-01-14 Paulo Andrade * include/lightning.h, lib/lightning.c: Add an extra align diff --git a/TODO b/TODO index 8cb265714..fb21097bc 100644 --- a/TODO +++ b/TODO @@ -6,6 +6,3 @@ * Update documentation to match new implementation. * Make an sparc port to not remove previous functionality. - - * Test and correct the ppc and mips ports, after the import and - adaptation of the code to lightning. diff --git a/check/add.tst b/check/add.tst index d849fce74..5ef50a312 100644 --- a/check/add.tst +++ b/check/add.tst @@ -11,8 +11,8 @@ test: arg $i1 getarg %r0 $i0 getarg %r1 $i1 - addr %ret %r0 %r1 - ret + addr %r0 %r0 %r1 + retr %r0 epilog main: diff --git a/check/allocai.tst b/check/allocai.tst index 9bb6cbe1f..bcfe3c4b6 100644 --- a/check/allocai.tst +++ b/check/allocai.tst @@ -79,11 +79,12 @@ main: prepare pushargi 7777 finishi identity_func - beqi succeeded %ret 7777 + retval %r0 + beqi succeeded %r0 7777 prepare pushargi report_message ellipsis - pushargr %ret + pushargr %r0 pushargi 7777 finishi @printf reti 1 diff --git a/check/bp.tst b/check/bp.tst index 487217b2b..e312e550e 100644 --- a/check/bp.tst +++ b/check/bp.tst @@ -22,11 +22,10 @@ rfibs: finishi rfibs retval %v2 /* V2 = rfibs(N-2) */ addi %v1 %v1 1 - addr %ret %v1 %v2 - ret + addr %r0 %v1 %v2 + retr %r0 out: - movi %ret 1 - ret + reti 1 epilog main: diff --git a/check/divi.tst b/check/divi.tst index 94bd3d688..c54a4360f 100644 --- a/check/divi.tst +++ b/check/divi.tst @@ -68,12 +68,14 @@ main: pushargi small_ops pushargi 3 finishi test_divider_8 - bnei fail %ret 0 + retval %r0 + bnei fail %r0 0 prepare pushargi large_ops pushargi 3 finishi test_divider_32768 - bnei fail %ret 0 + retval %r0 + bnei fail %r0 0 reti 0 fail: reti 1 diff --git a/check/fib.tst b/check/fib.tst index 6891de05a..0bb441f8d 100644 --- a/check/fib.tst +++ b/check/fib.tst @@ -20,8 +20,7 @@ loop: addi %r1 %v0 1 // R1 = V0 + 1 bnei loop %r2 0 // if (R2) goto loop ref: - movr %ret %r1 // RET = R1 - ret + retr %r1 // RET = R1 epilog main: diff --git a/check/lightning.c b/check/lightning.c index 90bdd7c3d..dc3179226 100644 --- a/check/lightning.c +++ b/check/lightning.c @@ -1827,10 +1827,6 @@ regname(void) case '0': parser.regval = JIT_R0; break; case '1': parser.regval = JIT_R1; break; case '2': parser.regval = JIT_R2; break; - case 'e': - if (getch() != 't') goto fail; - parser.regval = JIT_RET; - break; case '(': num = get_int(skip_none); if (num < 0 || num >= JIT_R_NUM) goto fail; @@ -1869,10 +1865,6 @@ regname(void) case 'p': parser.regtype = type_l; /* oops */ parser.regval = JIT_FP; break; - case 'r': - if (getch() != 'e' || getch() != 't') goto fail; - parser.regval = JIT_FRET; - break; case '(': num = get_int(skip_none); if (num < 0 || num >= JIT_F_NUM) goto fail; @@ -1883,12 +1875,6 @@ regname(void) default: goto fail; } break; - case 's': - parser.regtype = type_l; - if (getch() != 'p') - goto fail; - parser.regval = JIT_SP; - break; default: fail: error("bad register"); diff --git a/include/lightning/jit_arm.h b/include/lightning/jit_arm.h index 9ee7b2c96..f981a85cd 100644 --- a/include/lightning/jit_arm.h +++ b/include/lightning/jit_arm.h @@ -27,8 +27,6 @@ #define jit_swf_p() (jit_cpu.vfp == 0) #define jit_hardfp_p() jit_cpu.abi -#define JIT_RET _R0 -#define JIT_SP _R13 #define JIT_FP _R11 typedef enum { #define jit_arg_reg_p(i) ((i) >= 0 && (i) < 4) @@ -65,11 +63,6 @@ typedef enum { _R2, /* r2 - argument/result */ _R1, /* r1 - argument/result */ _R0, /* r0 - argument/result */ -#if defined(__ARM_PCS_VFP) -# define JIT_FRET _D0 -#else -# define JIT_FRET _R0 -#endif #define JIT_F0 (jit_hardfp_p() ? _D8 : _D0) #define JIT_F1 (jit_hardfp_p() ? _D9 : _D1) #define JIT_F2 (jit_hardfp_p() ? _D10 : _D2) diff --git a/include/lightning/jit_mips.h b/include/lightning/jit_mips.h index 505e06669..fc2ab565e 100644 --- a/include/lightning/jit_mips.h +++ b/include/lightning/jit_mips.h @@ -24,9 +24,6 @@ /* * Types */ -#define JIT_RET _V0 -#define JIT_FRET _F0 -#define JIT_SP _SP #define JIT_FP _FP typedef enum { #define jit_arg_reg_p(i) ((i) >= 0 && (i) < 4) diff --git a/include/lightning/jit_ppc.h b/include/lightning/jit_ppc.h index dcdc8f1d2..b824410e9 100644 --- a/include/lightning/jit_ppc.h +++ b/include/lightning/jit_ppc.h @@ -59,11 +59,9 @@ typedef enum { _R14, _R15, _R16, _R17, _R18, _R19, _R20, _R21, _R22, _R23, _R24, _R25, _R26, _R27, _R28, _R29, _R30, -#define JIT_SP _R1 _R1, #define JIT_FP _R31 _R31, -#define JIT_RET _R3 #define JIT_RA0 _R3 #define JIT_RA1 _R4 #define JIT_RA2 _R5 @@ -103,7 +101,6 @@ typedef enum { * saved/restored (if used) */ _F22, _F23, _F24, _F25, _F26, _F27, _F28, _F29, _F30, _F31, -#define JIT_FRET _F1 #define JIT_FA0 _F1 #define JIT_FA1 _F2 #define JIT_FA2 _F3 diff --git a/include/lightning/jit_private.h b/include/lightning/jit_private.h index 5efeee838..854e32563 100644 --- a/include/lightning/jit_private.h +++ b/include/lightning/jit_private.h @@ -42,6 +42,32 @@ # define HIDDEN /**/ #endif +#if defined(__i386__) || defined(__x86_64__) +# define JIT_SP _RSP +# define JIT_RET _RAX +# if __WORDSIZE == 32 +# define JIT_FRET _ST0 +# else +# define JIT_FRET _XMM0 +# endif +#elif defined(__mips__) +# define JIT_SP _SP +# define JIT_RET _V0 +# define JIT_FRET _F0 +#elif defined(__arm__) +# define JIT_SP _R13 +# define JIT_RET _R0 +# if defined(__ARM_PCS_VFP) +# define JIT_FRET _D0 +# else +# define JIT_FRET _R0 +# endif +#elif defined(__ppc__) +# define JIT_SP _R1 +# define JIT_RET _R3 +# define JIT_FRET _F1 +#endif + #define jit_size(vector) (sizeof(vector) / sizeof((vector)[0])) #define jit_reg_free_p(regno) \ diff --git a/include/lightning/jit_x86.h b/include/lightning/jit_x86.h index 003a28dc0..1cd3137e8 100644 --- a/include/lightning/jit_x86.h +++ b/include/lightning/jit_x86.h @@ -27,8 +27,6 @@ #define jit_sse2_p() jit_cpu.sse2 #define jit_x87_reg_p(reg) ((reg) >= _ST0 && (reg) <= _ST7) -#define JIT_RET _RAX -#define JIT_SP _RSP #define JIT_FP _RBP typedef enum { #if __WORDSIZE == 32 @@ -40,7 +38,6 @@ typedef enum { # define jit_arg_f_reg_p(i) 0 # define jit_f(i) (jit_cpu.sse2 ? _XMM0 + (i) : _ST0 + (i)) # define jit_f_num() (jit_cpu.sse2 ? 8 : 6) -# define JIT_FRET _ST0 # define JIT_R0 _RAX # define JIT_R1 _RCX # define JIT_R2 _RDX @@ -69,7 +66,6 @@ typedef enum { # define jit_arg_f_reg_p(i) ((i) >= 0 && (i) < 8) # define jit_f(index) (_XMM0 + (index)) # define jit_f_num() 8 -# define JIT_FRET _XMM0 # define JIT_R0 _RAX # define JIT_R1 _R10 # define JIT_R2 _R11