From d4911175da08bac1d7c60a0af6c3c7566dc04a54 Mon Sep 17 00:00:00 2001 From: Michael Pavone Date: Thu, 26 Nov 2015 22:30:41 -0800 Subject: Fix for Z80 retranslation post alignment rework --- gen_x86.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'gen_x86.c') diff --git a/gen_x86.c b/gen_x86.c index fc5b2fe..cfc826a 100644 --- a/gen_x86.c +++ b/gen_x86.c @@ -1968,15 +1968,8 @@ void jmp_rind(code_info *code, uint8_t dst) code->cur = out; } -void call(code_info *code, code_ptr fun) +void call_noalign(code_info *code, code_ptr fun) { - code->stack_off += sizeof(void *); - int32_t adjust = 0; - if (code->stack_off & 0xF) { - adjust = 16 - (code->stack_off & 0xF); - code->stack_off += adjust; - sub_ir(code, adjust, RSP, SZ_PTR); - } check_alloc_code(code, 5); code_ptr out = code->cur; ptrdiff_t disp = fun-(out+5); @@ -1994,12 +1987,24 @@ void call(code_info *code, code_ptr fun) fatal_error("call: %p - %p = %lX which is out of range for a 32-bit displacement\n", fun, out + 5, (long)disp); } code->cur = out; +} + + +void call(code_info *code, code_ptr fun) +{ + code->stack_off += sizeof(void *); + int32_t adjust = 0; + if (code->stack_off & 0xF) { + adjust = 16 - (code->stack_off & 0xF); + code->stack_off += adjust; + sub_ir(code, adjust, RSP, SZ_PTR); + } + call_noalign(code, fun); if (adjust) { add_ir(code, adjust, RSP, SZ_PTR); } code->stack_off -= sizeof(void *) + adjust; } - void call_raxfallback(code_info *code, code_ptr fun) { check_alloc_code(code, 5); -- cgit v1.2.3