JIT repairs for x86 Darwin
svn: r2521
This commit is contained in:
parent
5f814a0501
commit
c16d45c911
|
@ -727,11 +727,10 @@ static void _jit_prolog_again(mz_jit_state *jitter, int n, int ret_addr_reg)
|
||||||
# define mz_patch_branch(a) jit_patch(a)
|
# define mz_patch_branch(a) jit_patch(a)
|
||||||
# define mz_patch_ucbranch(a) jit_patch(a)
|
# define mz_patch_ucbranch(a) jit_patch(a)
|
||||||
# ifdef _CALL_DARWIN
|
# ifdef _CALL_DARWIN
|
||||||
/* Maintain 4-byte stack alignment.
|
/* Maintain 4-byte stack alignment. */
|
||||||
Built-in prolog pushes 3 words in local frame already. */
|
|
||||||
# define mz_prolog(x) (SUBLir(3 * JIT_WORD_SIZE, JIT_SP))
|
# define mz_prolog(x) (SUBLir(3 * JIT_WORD_SIZE, JIT_SP))
|
||||||
# define mz_epilog_without_jmp() ADDLir(3 * JIT_WORD_SIZE, JIT_SP)
|
# define mz_epilog_without_jmp() ADDLir(4 * JIT_WORD_SIZE, JIT_SP)
|
||||||
# define mz_epilog(x) (mz_epilog_without_jmp(), RET_())
|
# define mz_epilog(x) (ADDLir(3 * JIT_WORD_SIZE, JIT_SP), RET_())
|
||||||
# define LOCAL_FRAME_SIZE 3
|
# define LOCAL_FRAME_SIZE 3
|
||||||
# define JIT_LOCAL3 -24
|
# define JIT_LOCAL3 -24
|
||||||
# else
|
# else
|
||||||
|
@ -3659,7 +3658,9 @@ static int do_generate_common(mz_jit_state *jitter, void *_data)
|
||||||
jit_getarg_i(JIT_R2, in); /* argv */
|
jit_getarg_i(JIT_R2, in); /* argv */
|
||||||
CHECK_LIMIT();
|
CHECK_LIMIT();
|
||||||
jit_movr_p(JIT_RUNSTACK, JIT_R2);
|
jit_movr_p(JIT_RUNSTACK, JIT_R2);
|
||||||
jit_movr_p(JIT_RUNSTACK_BASE, JIT_R2);
|
jit_movr_p(JIT_RUNSTACK_BASE, JIT_R1);
|
||||||
|
jit_lshi_ul(JIT_RUNSTACK_BASE, JIT_RUNSTACK_BASE, JIT_LOG_WORD_SIZE);
|
||||||
|
jit_addr_p(JIT_RUNSTACK_BASE, JIT_RUNSTACK_BASE, JIT_RUNSTACK);
|
||||||
mz_push_locals();
|
mz_push_locals();
|
||||||
mz_set_local_p(JIT_RUNSTACK, JIT_LOCAL1);
|
mz_set_local_p(JIT_RUNSTACK, JIT_LOCAL1);
|
||||||
jit_ldxi_p(JIT_V1, JIT_R0, &((Scheme_Native_Closure *)0x0)->code);
|
jit_ldxi_p(JIT_V1, JIT_R0, &((Scheme_Native_Closure *)0x0)->code);
|
||||||
|
@ -3799,9 +3800,9 @@ static int do_generate_common(mz_jit_state *jitter, void *_data)
|
||||||
jit_pusharg_p(JIT_RUNSTACK);
|
jit_pusharg_p(JIT_RUNSTACK);
|
||||||
jit_pusharg_i(JIT_R1);
|
jit_pusharg_i(JIT_R1);
|
||||||
if (!i) {
|
if (!i) {
|
||||||
(void)jit_finish(scheme_checked_car);
|
(void)mz_finish(scheme_checked_car);
|
||||||
} else {
|
} else {
|
||||||
(void)jit_finish(scheme_checked_cdr);
|
(void)mz_finish(scheme_checked_cdr);
|
||||||
}
|
}
|
||||||
CHECK_LIMIT();
|
CHECK_LIMIT();
|
||||||
}
|
}
|
||||||
|
@ -3932,7 +3933,7 @@ static int do_generate_common(mz_jit_state *jitter, void *_data)
|
||||||
jit_pusharg_p(JIT_R2);
|
jit_pusharg_p(JIT_R2);
|
||||||
jit_pusharg_p(JIT_R1);
|
jit_pusharg_p(JIT_R1);
|
||||||
jit_pusharg_p(JIT_R0);
|
jit_pusharg_p(JIT_R0);
|
||||||
(void)jit_finish(_scheme_apply_multi_from_native);
|
(void)mz_finish(_scheme_apply_multi_from_native);
|
||||||
CHECK_LIMIT();
|
CHECK_LIMIT();
|
||||||
jit_ldi_i(JIT_NOT_RET, &scheme_current_cont_mark_pos);
|
jit_ldi_i(JIT_NOT_RET, &scheme_current_cont_mark_pos);
|
||||||
jit_addi_i(JIT_NOT_RET, JIT_NOT_RET, 2);
|
jit_addi_i(JIT_NOT_RET, JIT_NOT_RET, 2);
|
||||||
|
@ -4016,7 +4017,7 @@ static int do_generate_common(mz_jit_state *jitter, void *_data)
|
||||||
jit_prepare(2);
|
jit_prepare(2);
|
||||||
jit_pusharg_p(JIT_RUNSTACK);
|
jit_pusharg_p(JIT_RUNSTACK);
|
||||||
jit_pusharg_i(JIT_R1);
|
jit_pusharg_i(JIT_R1);
|
||||||
(void)jit_finish(scheme_checked_vector_ref);
|
(void)mz_finish(scheme_checked_vector_ref);
|
||||||
/* doesn't return */
|
/* doesn't return */
|
||||||
CHECK_LIMIT();
|
CHECK_LIMIT();
|
||||||
|
|
||||||
|
@ -4062,7 +4063,7 @@ static int do_generate_common(mz_jit_state *jitter, void *_data)
|
||||||
jit_prepare(2);
|
jit_prepare(2);
|
||||||
jit_pusharg_p(JIT_RUNSTACK);
|
jit_pusharg_p(JIT_RUNSTACK);
|
||||||
jit_pusharg_i(JIT_R1);
|
jit_pusharg_i(JIT_R1);
|
||||||
(void)jit_finish(scheme_checked_syntax_e);
|
(void)mz_finish(scheme_checked_syntax_e);
|
||||||
jit_retval(JIT_R0);
|
jit_retval(JIT_R0);
|
||||||
jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1));
|
jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1));
|
||||||
mz_epilog(JIT_R2);
|
mz_epilog(JIT_R2);
|
||||||
|
@ -4145,7 +4146,7 @@ static int do_generate_common(mz_jit_state *jitter, void *_data)
|
||||||
jit_pusharg_p(JIT_RUNSTACK);
|
jit_pusharg_p(JIT_RUNSTACK);
|
||||||
jit_pusharg_p(JIT_V1);
|
jit_pusharg_p(JIT_V1);
|
||||||
jit_pusharg_p(JIT_R1);
|
jit_pusharg_p(JIT_R1);
|
||||||
(void)jit_finish(_scheme_apply_from_native);
|
(void)mz_finish(_scheme_apply_from_native);
|
||||||
jit_retval(JIT_R0);
|
jit_retval(JIT_R0);
|
||||||
jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1));
|
jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1));
|
||||||
JIT_UPDATE_THREAD_RSPTR();
|
JIT_UPDATE_THREAD_RSPTR();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user