--- a/src/sh4/ia32abi.h Wed Jan 16 09:39:16 2008 +0000 +++ b/src/sh4/ia32abi.h Mon Jan 21 11:59:46 2008 +0000 @@ -105,7 +105,6 @@ sh4_x86.fpuen_checked = FALSE; sh4_x86.branch_taken = FALSE; sh4_x86.backpatch_posn = 0; - sh4_x86.recovery_posn = 0; sh4_x86.block_start_pc = pc; sh4_x86.tlb_on = IS_MMU_ENABLED(); sh4_x86.tstate = TSTATE_NONE; @@ -247,8 +246,12 @@ for( i=0; i< sh4_x86.backpatch_posn; i++ ) { *sh4_x86.backpatch_list[i].fixup_addr = xlat_output - ((uint8_t *)sh4_x86.backpatch_list[i].fixup_addr) - 4; - if( sh4_x86.backpatch_list[i].exc_code == -1 ) { + if( sh4_x86.backpatch_list[i].exc_code < 0 ) { load_imm32( R_EDX, sh4_x86.backpatch_list[i].fixup_icount ); + int stack_adj = -1 - sh4_x86.backpatch_list[i].exc_code; + if( stack_adj > 0 ) { + ADD_imm8s_r32( stack_adj, R_ESP ); + } int rel = preexc_ptr - xlat_output; JMP_rel(rel); } else {