fix x86_64 32-bit store to an immediate 64-bit address
svn: r16855
This commit is contained in:
parent
99978206b0
commit
4322965b21
|
@ -2302,7 +2302,7 @@ static int generate_tail_call(mz_jit_state *jitter, int num_rands, int direct_na
|
|||
ref5 = jit_blei_i(jit_forward(), JIT_R2, 0);
|
||||
#ifndef FUEL_AUTODECEREMENTS
|
||||
jit_subi_p(JIT_R2, JIT_R2, 0x1);
|
||||
(void)mz_tl_sti_i(tl_scheme_fuel_counter, JIT_R2);
|
||||
(void)mz_tl_sti_i(tl_scheme_fuel_counter, JIT_R2, JIT_R1);
|
||||
#endif
|
||||
CHECK_LIMIT();
|
||||
|
||||
|
@ -2608,7 +2608,7 @@ static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int direc
|
|||
(void)mz_tl_ldi_i(JIT_R2, tl_scheme_fuel_counter);
|
||||
ref11 = jit_blei_i(jit_forward(), JIT_R2, 0);
|
||||
jit_subi_p(JIT_R2, JIT_R2, 0x1);
|
||||
(void)mz_tl_sti_i(tl_scheme_fuel_counter, JIT_R2);
|
||||
(void)mz_tl_sti_i(tl_scheme_fuel_counter, JIT_R2, JIT_R1);
|
||||
#endif
|
||||
|
||||
/* Fast inlined-native jump ok (proc will check argc, if necessary) */
|
||||
|
@ -2861,7 +2861,7 @@ static int generate_self_tail_call(Scheme_Object *rator, mz_jit_state *jitter, i
|
|||
refslow = jit_blei_i(jit_forward(), JIT_R2, 0);
|
||||
#ifndef FUEL_AUTODECEREMENTS
|
||||
jit_subi_p(JIT_R2, JIT_R2, 0x1);
|
||||
(void)mz_tl_sti_i(tl_scheme_fuel_counter, JIT_R2);
|
||||
(void)mz_tl_sti_i(tl_scheme_fuel_counter, JIT_R2, JIT_R1);
|
||||
#endif
|
||||
|
||||
__END_TINY_OR_SHORT_JUMPS__(jmp_tiny, jmp_short);
|
||||
|
|
|
@ -205,10 +205,14 @@ typedef _uc jit_insn;
|
|||
#define _d16() ( _jit_B(0x66 ) )
|
||||
#define _O( OP ) ( _jit_B( OP ) )
|
||||
#ifdef JIT_X86_64
|
||||
# define _REX(R,X,B) ( _jit_B(0x48|((R&0x8)>>1)|((X&0x8)>>2)|((B&0x8)>>3)) )
|
||||
# define _REX_(P,R,X,B) ( _jit_B(P|((R&0x8)>>1)|((X&0x8)>>2)|((B&0x8)>>3)) )
|
||||
# define _REX(R,X,B) _REX_(0x48,R,X,B)
|
||||
# define _REXd(R,X,B) _REX_(0x40,R,X,B)
|
||||
# define _qO( OP, R,X,B ) ( _REX(R,X,B), _jit_B( OP ) )
|
||||
# define _qOd( OP, R,X,B ) ( _REXd(R,X,B), _jit_B( OP ) )
|
||||
#else
|
||||
# define _qO( OP, R,X,B ) _O(OP)
|
||||
# define _qOd( OP, R,X,B ) _O(OP)
|
||||
#endif
|
||||
#define _Or( OP,R ) ( _jit_B( (OP)|_r(R)) )
|
||||
#ifdef JIT_X86_64
|
||||
|
@ -259,6 +263,7 @@ typedef _uc jit_insn;
|
|||
#define _O_r_X( OP ,R ,MD,MB,MI,MS ) ( _O ( OP ),_r_X( R ,MD,MB,MI,MS) )
|
||||
#define _qO_r_X( OP ,R ,MD,MB,MI,MS ) ( _qO ( OP,R,0,MS),_qr_X(R,MD,MB,MI,MS) )
|
||||
#define _qO_r_XB( OP ,R ,MD,MB,MI,MS ) ( _qO ( OP,R,0,MB),_qr_X(R,MD,MB,MI,MS) )
|
||||
#define _qO_r_Xd( OP ,R ,MD,MB,MI,MS ) ( _qOd ( OP,R,0,MB),_qr_X(R,MD,MB,MI,MS) )
|
||||
#define _OO_r_X( OP ,R ,MD,MB,MI,MS ) ( _OO ( OP ),_r_X( R ,MD,MB,MI,MS) )
|
||||
#define _O_r_X_B( OP ,R ,MD,MB,MI,MS,B ) ( _O ( OP ),_r_X( R ,MD,MB,MI,MS) ,_jit_B(B) )
|
||||
#define _O_r_X_W( OP ,R ,MD,MB,MI,MS,W ) ( _O ( OP ),_r_X( R ,MD,MB,MI,MS) ,_jit_W(W) )
|
||||
|
@ -664,7 +669,7 @@ typedef _uc jit_insn;
|
|||
|
||||
#define MOVQmr(MD, MB, MI, MS, RD) _qO_r_X (0x8b ,_r8(RD) ,MD,MB,MI,MS )
|
||||
#define MOVQmQr(MD, MB, MI, MS, RD) _qO_r_XB (0x8b ,_r8(RD) ,MD,MB,MI,MS )
|
||||
#define MOVQrm(RS, MD, MB, MI, MS) _qO_r_X (0x89 ,_r8(RS) ,MD,MB,MI,MS )
|
||||
#define MOVQrm(RS, MD, MB, MI, MS) _qO_r_Xd (0x89 ,_r8(RS) ,MD,MB,MI,MS )
|
||||
#define MOVQrQm(RS, MD, MB, MI, MS) _qO_r_XB (0x89 ,_r8(RS) ,MD,MB,MI,MS )
|
||||
#define MOVQir(IM, R) _qOr_Q (0xb8,_r8(R) ,IM )
|
||||
|
||||
|
|
|
@ -611,9 +611,9 @@ 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)))
|
||||
# define jit_sti_l(id, rs) (_u32P((long)(id)) ? _jit_sti_l(id, rs) : (jit_movi_l(JIT_REXTMP, (long)(id)), MOVQrQm(rs, 0, JIT_REXTMP, 0, 0)))
|
||||
# define jit_ldi_i(d, is) (_u32P((long)(is)) ? _jit_ldi_i(d, is) : (jit_movi_l(d, is), jit_ldr_i(d, d)))
|
||||
# define jit_sti_i(id, rs) (_u32P((long)(id)) ? _jit_sti_i(id, rs) : (jit_movi_l(JIT_REXTMP, (long)(id)), MOVQrm(rs, 0, JIT_REXTMP, 0, 0)))
|
||||
#else
|
||||
# define jit_ldi_l(d, is) _jit_ldi_l(d, is)
|
||||
# define jit_sti_l(id, rs) _jit_sti_l(id, rs)
|
||||
|
|
Loading…
Reference in New Issue
Block a user