Search
lxdream.org :: lxdream/src/sh4/sh4trans.c :: diff
lxdream 0.9.1
released Jun 29
Download Now
filename src/sh4/sh4trans.c
changeset 617:476a717a54f3
prev600:3b0f94d0faed
next619:0800a0137472
author nkeynes
date Tue Jan 29 10:39:56 2008 +0000 (16 years ago)
permissions -rw-r--r--
last change Start getting SLEEP into order
file annotate diff log raw
1.1 --- a/src/sh4/sh4trans.c Tue Jan 22 10:10:46 2008 +0000
1.2 +++ b/src/sh4/sh4trans.c Tue Jan 29 10:39:56 2008 +0000
1.3 @@ -42,10 +42,7 @@
1.4 sh4r.slice_cycle = 0;
1.5
1.6 if( sh4r.sh4_state != SH4_STATE_RUNNING ) {
1.7 - if( sh4r.event_pending < nanosecs ) {
1.8 - sh4r.sh4_state = SH4_STATE_RUNNING;
1.9 - sh4r.slice_cycle = sh4r.event_pending;
1.10 - }
1.11 + sh4_sleep_run_slice(nanosecs);
1.12 }
1.13
1.14 switch( setjmp(xlat_jmp_buf) ) {
1.15 @@ -62,6 +59,9 @@
1.16 case XLAT_EXIT_SYSRESET:
1.17 dreamcast_reset();
1.18 break;
1.19 + case XLAT_EXIT_SLEEP:
1.20 + sh4_sleep_run_slice(nanosecs);
1.21 + break;
1.22 }
1.23
1.24 xlat_running = TRUE;
1.25 @@ -162,6 +162,10 @@
1.26 }
1.27 } while( !done );
1.28 pc += (done - 2);
1.29 +
1.30 + // Add end-of-block recovery for post-instruction checks
1.31 + sh4_translate_add_recovery( (pc - start)>>1 );
1.32 +
1.33 int epilogue_size = sh4_translate_end_block_size();
1.34 uint32_t recovery_size = sizeof(struct xlat_recovery_record)*xlat_recovery_posn;
1.35 uint32_t finalsize = xlat_output - xlat_current_block->code + epilogue_size + recovery_size;
.