Search
lxdream.org :: lxdream/src/sh4/sh4x86.in :: diff
lxdream 0.9.1
released Jun 29
Download Now
filename src/sh4/sh4x86.in
changeset 1194:ee6ce5804608
prev1193:dff55bdc4f46
next1196:a14dbddafd13
author nkeynes
date Mon Dec 12 21:13:36 2011 +1000 (10 years ago)
permissions -rw-r--r--
last change Handle memory exceptions thrown while in shadow mode
file annotate diff log raw
1.1 --- a/src/sh4/sh4x86.in Mon Dec 12 21:10:04 2011 +1000
1.2 +++ b/src/sh4/sh4x86.in Mon Dec 12 21:13:36 2011 +1000
1.3 @@ -623,7 +623,7 @@
1.4 static void jump_next_block_fixed_pc( sh4addr_t pc )
1.5 {
1.6 if( IS_IN_ICACHE(pc) ) {
1.7 - if( sh4_x86.sh4_mode != SH4_MODE_UNKNOWN ) {
1.8 + if( sh4_x86.sh4_mode != SH4_MODE_UNKNOWN && sh4_x86.end_callback == NULL ) {
1.9 /* Fixed address, in cache, and fixed SH4 mode - generate a call to the
1.10 * fetch-and-backpatch routine, which will replace the call with a branch */
1.11 emit_translate_and_backpatch();
1.12 @@ -2683,7 +2683,11 @@
1.13 COUNT_INST(I_FTRV);
1.14 check_fpuen();
1.15 if( sh4_x86.double_prec == 0 ) {
1.16 - if( sh4_x86.sse3_enabled ) {
1.17 + if( sh4_x86.sse3_enabled && sh4_x86.begin_callback == NULL ) {
1.18 + /* FIXME: For now, disable this inlining when we're running in shadow mode -
1.19 + * it gives slightly different results from the emu core. Need to
1.20 + * fix the precision so both give the right results.
1.21 + */
1.22 MOVAPS_rbpdisp_xmm( REG_OFFSET(fr[1][0]), 1 ); // M1 M0 M3 M2
1.23 MOVAPS_rbpdisp_xmm( REG_OFFSET(fr[1][4]), 0 ); // M5 M4 M7 M6
1.24 MOVAPS_rbpdisp_xmm( REG_OFFSET(fr[1][8]), 3 ); // M9 M8 M11 M10
.