From 99978206b01440607897c82a398f79212d0291cb Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 18 Nov 2009 01:27:36 +0000 Subject: [PATCH] fix some 64-bit problems with recent JIT changes svn: r16854 --- src/mzscheme/src/jit.c | 4 ++-- src/mzscheme/src/lightning/i386/core.h | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/mzscheme/src/jit.c b/src/mzscheme/src/jit.c index 2d66a54733..e1bba24b5e 100644 --- a/src/mzscheme/src/jit.c +++ b/src/mzscheme/src/jit.c @@ -27,7 +27,7 @@ visible to the GC. 3) Immediate operands must be 32-bit values on x86_64, except with - jit_movi, jit_sti, jit_ld, jit_bXi, jit_calli, and jit_finishi. + jit_movi, jit_sti, jit_ldi, jit_bXi, jit_calli, and jit_finishi. 4) Function calls are limited to 3 arguments (i.e., jit_prepare() must never be called with a number greater than 3). This limit @@ -2599,7 +2599,7 @@ static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int direc CHECK_LIMIT(); /* Before inlined native, check stack depth: */ - (void)mz_tl_ldi_i(JIT_R1, tl_scheme_jit_stack_boundary); /* assumes USE_STACK_BOUNDARY_VAR */ + (void)mz_tl_ldi_p(JIT_R1, tl_scheme_jit_stack_boundary); /* assumes USE_STACK_BOUNDARY_VAR */ ref9 = jit_bltr_ul(jit_forward(), JIT_STACK, JIT_R1); /* assumes down-growing stack */ CHECK_LIMIT(); diff --git a/src/mzscheme/src/lightning/i386/core.h b/src/mzscheme/src/lightning/i386/core.h index 490661fc87..314972dbe5 100644 --- a/src/mzscheme/src/lightning/i386/core.h +++ b/src/mzscheme/src/lightning/i386/core.h @@ -589,12 +589,12 @@ static int jit_arg_reg_order[] = { _EDI, _ESI, _EDX, _ECX }; #define jit_stxr_s(d1, d2, rs) MOVWrm(jit_reg16(rs), 0, (d1), (d2), 1) #define jit_stxi_s(id, rd, rs) MOVWrm(jit_reg16(rs), (id), (rd), 0, 0) -#define jit_ldi_i(d, is) MOVLmr((is), 0, 0, 0, (d)) +#define _jit_ldi_i(d, is) MOVLmr((is), 0, 0, 0, (d)) #define jit_ldr_i(d, rs) MOVLmr(0, (rs), 0, 0, (d)) #define jit_ldxr_i(d, s1, s2) MOVLmr(0, (s1), (s2), 1, (d)) #define jit_ldxi_i(d, rs, is) MOVLmr((is), (rs), 0, 0, (d)) -#define jit_sti_i(id, rs) MOVLrm((rs), (id), 0, 0, 0) +#define _jit_sti_i(id, rs) MOVLrm((rs), (id), 0, 0, 0) #define jit_str_i(rd, rs) MOVLrm((rs), 0, (rd), 0, 0) #define jit_stxr_i(d1, d2, rs) MOVLrm((rs), 0, (d1), (d2), 1) #define jit_stxi_i(id, rd, rs) MOVLrm((rs), (id), (rd), 0, 0) @@ -612,9 +612,13 @@ static int jit_arg_reg_order[] = { _EDI, _ESI, _EDX, _ECX }; #ifdef JIT_X86_64 # define jit_ldi_l(d, is) (_u32P((long)(is)) ? _jit_ldi_l(d, is) : (jit_movi_l(d, is), jit_ldr_l(d, d))) # define jit_sti_l(id, rs) (_u32P((long)(id)) ? _jit_sti_l(id, rs) : (jit_movi_l(JIT_REXTMP, id), MOVQrQm(rs, 0, JIT_REXTMP, 0, 0))) +# define jit_ldi_i(d, is) (_s32P((long)(is)) ? _jit_ldi_i(d, is) : (jit_movi_l(d, is), jit_ldr_i(d, d))) +# define jit_sti_i(id, rs) (_s32P((long)(id)) ? _jit_ldi_i(id, rs) : (jit_movi_l(JIT_REXTMP, id), MOVQrm(d, JIT_REXTMP))) #else # define jit_ldi_l(d, is) _jit_ldi_l(d, is) # define jit_sti_l(id, rs) _jit_sti_l(id, rs) +# define jit_ldi_i(d, is) _jit_ldi_i(d, is) +# define jit_sti_i(id, rs) _jit_sti_i(id, rs) #endif