--- a/src/sh4/sh4trans.c Sat Aug 09 10:48:03 2008 +0000 +++ b/src/sh4/sh4trans.c Sun Oct 26 02:28:29 2008 +0000 @@ -52,7 +52,7 @@ } code = xlat_get_code_by_vma( sh4r.pc ); - if( code == NULL ) { + if( code == NULL || (sh4r.fpscr & (FPSCR_PR|FPSCR_SZ)) != XLAT_BLOCK_FPSCR(code) ) { code = sh4_translate_basic_block( sh4r.pc ); } } @@ -138,6 +138,8 @@ memcpy( xlat_output, xlat_recovery, recovery_size); xlat_current_block->recover_table_offset = xlat_output - (uint8_t *)xlat_current_block->code; xlat_current_block->recover_table_size = xlat_recovery_posn; + xlat_current_block->fpscr = sh4r.fpscr & (FPSCR_PR|FPSCR_SZ); + xlat_current_block->fpscr_mask = (FPSCR_PR|FPSCR_SZ); xlat_commit_block( finalsize, pc-start ); return xlat_current_block->code; }