From aacb98f51b67dc7035c322f1978deaceef5de102 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 18 Feb 2011 18:34:19 -0700 Subject: [PATCH] PPC JIT fixup --- src/racket/src/jit.c | 4 ++-- src/racket/src/jit.h | 22 ++++++++++++++++++++-- src/racket/src/jitcommon.c | 2 +- src/racket/src/jitinline.c | 2 +- src/racket/src/lightning/ppc/funcs.h | 21 +++++++++++++++++---- 5 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/racket/src/jit.c b/src/racket/src/jit.c index f083bc59ad..fedef240d9 100644 --- a/src/racket/src/jit.c +++ b/src/racket/src/jit.c @@ -24,6 +24,8 @@ #ifdef MZ_USE_JIT +#define DEFINE_LIGHTNING_FUNCS + #include "jit.h" #ifdef MZ_PRECISE_GC @@ -2828,8 +2830,6 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w /* procedure codegen */ /*========================================================================*/ -#define NATIVE_ARG_COUNT 3 - static void generate_function_prolog(mz_jit_state *jitter, void *code, int max_let_depth) { int in; diff --git a/src/racket/src/jit.h b/src/racket/src/jit.h index ad5defcf06..d9cf812cd5 100644 --- a/src/racket/src/jit.h +++ b/src/racket/src/jit.h @@ -51,7 +51,19 @@ END_XFORM_ARITH; # endif #endif +#ifdef MZ_USE_JIT_PPC +# ifndef DEFINE_LIGHTNING_FUNCS +# define SUPPRESS_LIGHTNING_FUNCS +# endif +# define DEFINE_LIGHTNING_FUNCS_STATIC /* empty */ +# define jit_notify_freed_code scheme_jit_notify_freed_code +# define jit_flush_code scheme_jit_flush_code +# define _jit_prolog scheme_jit_prolog +# define _jit_epilog scheme_jit_epilog +#endif + #include "lightning/lightning.h" +#define _jit (jitter->js) #ifdef MZ_USE_JIT_X86_64 # define JIT_LOG_WORD_SIZE 3 @@ -62,6 +74,8 @@ END_XFORM_ARITH; #define WORDS_TO_BYTES(x) ((x) << JIT_LOG_WORD_SIZE) #define MAX_TRY_SHIFT 30 +#define NATIVE_ARG_COUNT 3 + #define JIT_LOG_DOUBLE_SIZE 3 #define JIT_DOUBLE_SIZE (1 << JIT_LOG_DOUBLE_SIZE) @@ -631,7 +645,10 @@ int check_location; # define jit_unshuffle_saved_regs() /* empty */ # define mz_push_locals() /* empty */ # define mz_pop_locals() /* empty */ -static void _jit_prolog_again(mz_jit_state *jitter, int n, int ret_addr_reg) +# ifdef SUPPRESS_LIGHTNING_FUNCS +void scheme_jit_prolog_again(mz_jit_state *jitter, int n, int ret_addr_reg); +# else +void scheme_jit_prolog_again(mz_jit_state *jitter, int n, int ret_addr_reg) { /* This must be consistent with _jit_prolog in many ways: */ int frame_size; @@ -658,6 +675,8 @@ static void _jit_prolog_again(mz_jit_state *jitter, int n, int ret_addr_reg) STWrm(ret_addr_reg, frame_size + 4, 1); /* stw r0, x+4(r1) */ #endif } +# endif +# define _jit_prolog_again scheme_jit_prolog_again #else /* From frame pointer, -1 is saved frame pointer, -2 is saved ESI/R12, and -3 is saved EDI/R13. On entry to a procedure, prolog pushes 4 @@ -989,7 +1008,6 @@ static void emit_indentation(mz_jit_state *jitter) /* jitstate */ /**********************************************************************/ -#define _jit (jitter->js) #ifdef SIXTY_FOUR_BIT_INTEGERS # define JIT_BUFFER_PAD_SIZE 200 #else diff --git a/src/racket/src/jitcommon.c b/src/racket/src/jitcommon.c index 526ffb356a..f8367b2968 100644 --- a/src/racket/src/jitcommon.c +++ b/src/racket/src/jitcommon.c @@ -825,7 +825,7 @@ int scheme_do_generate_common(mz_jit_state *jitter, void *_data) (void)jit_bnei_l(refloop, JIT_V1, 0); CHECK_LIMIT(); - jit_movi_p(JIT_R0, SCHEME_MULTIPLE_VALUES); + (void)jit_movi_p(JIT_R0, SCHEME_MULTIPLE_VALUES); mz_epilog(JIT_R1); CHECK_LIMIT(); diff --git a/src/racket/src/jitinline.c b/src/racket/src/jitinline.c index 55c592b190..2a80597007 100644 --- a/src/racket/src/jitinline.c +++ b/src/racket/src/jitinline.c @@ -2860,7 +2860,7 @@ int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int jit_movi_l(JIT_R0, 0); jit_stxi_l(((int)&((Scheme_Thread *)0x0)->ku.multiple.count), JIT_R2, JIT_R0); jit_stxi_p(((int)&((Scheme_Thread *)0x0)->ku.multiple.array), JIT_R2, JIT_R0); - jit_movi_p(JIT_R0, SCHEME_MULTIPLE_VALUES); + (void)jit_movi_p(JIT_R0, SCHEME_MULTIPLE_VALUES); } return 1; diff --git a/src/racket/src/lightning/ppc/funcs.h b/src/racket/src/lightning/ppc/funcs.h index 700e2a48cf..61c7f0fcac 100644 --- a/src/racket/src/lightning/ppc/funcs.h +++ b/src/racket/src/lightning/ppc/funcs.h @@ -34,7 +34,18 @@ #ifndef __lightning_funcs_h #define __lightning_funcs_h -static void +#ifndef DEFINE_LIGHTNING_FUNCS_STATIC +# define DEFINE_LIGHTNING_FUNCS_STATIC static +#endif + +#ifdef SUPPRESS_LIGHTNING_FUNCS +void jit_notify_freed_code(void); +void jit_flush_code(void *start, void *end); +void _jit_prolog(jit_state *jit, int n); +void _jit_epilog(jit_state *jit); +#else + +DEFINE_LIGHTNING_FUNCS_STATIC void jit_notify_freed_code(void) { } @@ -43,7 +54,7 @@ jit_notify_freed_code(void) #error Go get GNU C, I do not know how to flush the cache #error with this compiler. #else -static void +DEFINE_LIGHTNING_FUNCS_STATIC void jit_flush_code(void *start, void *end) { #ifndef LIGHTNING_CROSS @@ -90,7 +101,7 @@ jit_flush_code(void *start, void *end) #define _jit (*jit) -static void +DEFINE_LIGHTNING_FUNCS_STATIC void _jit_epilog(jit_state *jit) { int n = _jitl.nbArgs; @@ -135,7 +146,7 @@ _jit_epilog(jit_state *jit) offset = 32 is enough to hold eight 4 bytes arguments. This is less than perfect but is a reasonable work around for now. Better solution must be investigated. */ -static void +DEFINE_LIGHTNING_FUNCS_STATIC void _jit_prolog(jit_state *jit, int n) { int frame_size; @@ -170,4 +181,6 @@ _jit_prolog(jit_state *jit, int n) #undef _jit +#endif + #endif /* __lightning_funcs_h */