<html>
<body>
<div id="body" style="background-color:#ffffff;" >
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head" style="border-bottom-width:1px;border-bottom-style:solid;" ><td class="headtd" style="padding:0;padding-top:.2em;" colspan="4">Commit in <b><tt>lxdream/src</tt></b></td></tr>
<tr><td><tt>sh4/<a href="#file1">sh4trans.c</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+2</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-2</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">ee6ce5804608 -> 072131b61d2a</td></tr>
<tr class="alt" style=";" ><td><tt>test/<a href="#file2">testxlt.c</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+3</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-3</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">ee6ce5804608 -> 072131b61d2a</td></tr>
<tr><td><tt>xlat/<a href="#file3">xltcache.c</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+55</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-34</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">ee6ce5804608 -> 072131b61d2a</td></tr>
<tr class="alt" style=";" ><td><tt> /<a href="#file4">xltcache.h</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+4</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-2</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">ee6ce5804608 -> 072131b61d2a</td></tr>
<tr><td></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+64</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-41</td><td></td></tr>
</table>
<small id="info" style="color: #888888;" >4 modified files</small><br />
<pre class="comment" style="white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;padding:4px;border:1px dashed #000000;background-color:#ffffdd;" >
Handle branch delay-slot instruction that falls on the next page correctly.
- Generate the right end PC in the first place (sh4trans.c)
- Allow blocks to be marked as both entry point + continuation, and
specifically handle invalidation when first entry of a page is a continuation ==
flush previous page as well.
</pre>
<hr /><a name="file1" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/sh4</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>sh4trans.c</b></big> <small id="info" style="color: #888888;" >ee6ce5804608 -> 072131b61d2a</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/sh4/sh4trans.c
+++ lxdream/src/sh4/sh4trans.c
@@ -112,7 +112,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > done = sh4_translate_instruction( pc );
assert( xlat_output <= eob );
pc += 2;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- if ( pc >= lastpc ) {
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ if ( pc >= lastpc <span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >&& done == 0 </span>) {
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > done = 2;
}
#ifdef SINGLESTEP
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -140,7 +140,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 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->xlat_sh4_mode = sh4r.xlat_sh4_mode;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- xlat_commit_block( finalsize, <span id="removedchars" style="background-color:#ff9999;font-weight:bolder;" >pc-start</span> );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ xlat_commit_block( finalsize, <span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >start, pc</span> );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > return xlat_current_block->code;
}
</pre></div>
<hr /><a name="file2" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/test</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>testxlt.c</b></big> <small id="info" style="color: #888888;" >ee6ce5804608 -> 072131b61d2a</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/test/testxlt.c
+++ lxdream/src/test/testxlt.c
@@ -37,7 +37,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > assert( block->active == 1 );
assert( block->size == XLAT_NEW_CACHE_SIZE - (2*sizeof(struct xlat_cache_block)) );
memset( block->code, 0xB5, 8192 );
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- xlat_commit_block( 8192, 100 );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ xlat_commit_block( 8192, 0x0C008000, 0x0C008100 );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > assert( block->active == 1 );
assert( block->size == 8192 );
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -46,7 +46,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > assert( block2->active == 1 );
assert( block2->size == XLAT_NEW_CACHE_SIZE - (3*sizeof(struct xlat_cache_block)) - 8192 );
memset( block2->code, 0x6D, size );
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- xlat_commit_block( size, 200 );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ xlat_commit_block( size, 0x0C009000, 0x0C009200 );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > assert( block2->active == 1 );
assert( block2->size == size );
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -74,7 +74,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > for( i=4096; i<8192; i++ ) {
assert( block3a->code[i] == 0xB5 );
}
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- xlat_commit_block(6142, 432);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ xlat_commit_block(6142, 0x0D009800, 0x0D009C32);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > addr = xlat_get_code( 0x0D009800 );
assert( addr == &block3a->code );
}
</pre></div>
<hr /><a name="file3" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/xlat</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>xltcache.c</b></big> <small id="info" style="color: #888888;" >ee6ce5804608 -> 072131b61d2a</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/xlat/xltcache.c
+++ lxdream/src/xlat/xltcache.c
@@ -43,6 +43,11 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #define NEXT(block) ( (xlat_cache_block_t)&((block)->code[(block)->size]))
#define IS_ENTRY_POINT(ent) (ent > XLAT_LUT_ENTRY_USED)
#define IS_ENTRY_USED(ent) (ent != XLAT_LUT_ENTRY_EMPTY)
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+#define IS_ENTRY_CONTINUATION(ent) (((uintptr_t)ent) & ((uintptr_t)XLAT_LUT_ENTRY_USED))
+#define IS_FIRST_ENTRY_IN_PAGE(addr) (((addr)&0x1FFE) == 0)
+#define XLAT_CODE_ADDR(ent) ((void *)(((uintptr_t)ent) & (~((uintptr_t)0x03))))
+#define XLAT_BLOCK_FOR_LUT_ENTRY(ent) XLAT_BLOCK_FOR_CODE(XLAT_CODE_ADDR(ent))
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >
#define MIN_BLOCK_SIZE 32
#define MIN_TOTAL_SIZE (sizeof(struct xlat_cache_block)+MIN_BLOCK_SIZE)
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -134,7 +139,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > int i;
for( i=0; i<XLAT_LUT_PAGE_ENTRIES; i++ ) {
if( IS_ENTRY_POINT(page[i]) ) {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- void *p = page[i];
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ void *p = XLAT_CODE_ADDR(page[i]);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > do {
xlat_cache_block_t block = XLAT_BLOCK_FOR_CODE(p);
xlat_delete_block(block);
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -150,6 +155,10 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void **page = xlat_lut[XLAT_LUT_PAGE(addr)];
if( page != NULL ) {
int entry = XLAT_LUT_ENTRY(addr);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ if( entry == 0 && IS_ENTRY_CONTINUATION(page[entry]) ) {
+ /* First entry may be a delay-slot for the previous page */
+ xlat_flush_page_by_lut(xlat_lut[XLAT_LUT_PAGE(addr-2)]);
+ }
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > if( page[entry] != NULL ) {
xlat_flush_page_by_lut(page);
}
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -161,6 +170,10 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void **page = xlat_lut[XLAT_LUT_PAGE(addr)];
if( page != NULL ) {
int entry = XLAT_LUT_ENTRY(addr);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ if( entry == 0 && IS_ENTRY_CONTINUATION(page[entry]) ) {
+ /* First entry may be a delay-slot for the previous page */
+ xlat_flush_page_by_lut(xlat_lut[XLAT_LUT_PAGE(addr-2)]);
+ }
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > if( *(uint64_t *)&page[entry] != 0 ) {
xlat_flush_page_by_lut(page);
}
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -173,6 +186,11 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > int entry_count = size >> 1; // words;
uint32_t page_no = XLAT_LUT_PAGE(address);
int entry = XLAT_LUT_ENTRY(address);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+
+ if( entry == 0 && xlat_lut[page_no] != NULL && IS_ENTRY_CONTINUATION(xlat_lut[page_no][entry])) {
+ /* First entry may be a delay-slot for the previous page */
+ xlat_flush_page_by_lut(xlat_lut[XLAT_LUT_PAGE(address-2)]);
+ }
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > do {
void **page = xlat_lut[page_no];
int page_entries = XLAT_LUT_PAGE_ENTRIES - entry;
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -212,7 +230,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void *result = NULL;
void **page = xlat_lut[XLAT_LUT_PAGE(address)];
if( page != NULL ) {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- result = (void *)(((uintptr_t)(page[XLAT_LUT_ENTRY(address)])) & (~((uintptr_t)0x03)));
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ result = XLAT_CODE_ADDR(page[XLAT_LUT_ENTRY(address)]);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
return result;
}
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -235,18 +253,24 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > return NULL;
}
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void ** FASTCALL xlat_get_lut_entry( sh4addr_t address )
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+static void **xlat_get_lut_page( sh4addr_t address )
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > {
void **page = xlat_lut[XLAT_LUT_PAGE(address)];
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- /* Add the LUT entry for the block */
- if( page == NULL ) {
- xlat_lut[XLAT_LUT_PAGE(address)] = page =
- (void **)mmap( NULL, XLAT_LUT_PAGE_SIZE, PROT_READ|PROT_WRITE,
- MAP_PRIVATE|MAP_ANON, -1, 0 );
- memset( page, 0, XLAT_LUT_PAGE_SIZE );
- }
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ /* Add the LUT entry for the block */
+ if( page == NULL ) {
+ xlat_lut[XLAT_LUT_PAGE(address)] = page =
+ (void **)mmap( NULL, XLAT_LUT_PAGE_SIZE, PROT_READ|PROT_WRITE,
+ MAP_PRIVATE|MAP_ANON, -1, 0 );
+ memset( page, 0, XLAT_LUT_PAGE_SIZE );
+ }
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ return page;
+}
+
+void ** FASTCALL xlat_get_lut_entry( sh4addr_t address )
+{
+ void **page = xlat_get_lut_page(address);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > return &page[XLAT_LUT_ENTRY(address)];
}
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -408,26 +432,22 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > xlat_new_cache_ptr = NEXT(xlat_new_cache_ptr);
/* Add the LUT entry for the block */
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- if( xlat_lut[XLAT_LUT_PAGE(address)] == NULL ) {
- xlat_lut[XLAT_LUT_PAGE(address)] =
- (void **)mmap( NULL, XLAT_LUT_PAGE_SIZE, PROT_READ|PROT_WRITE,
- MAP_PRIVATE|MAP_ANON, -1, 0 );
- memset( xlat_lut[XLAT_LUT_PAGE(address)], 0, XLAT_LUT_PAGE_SIZE );
- }
-
- if( IS_ENTRY_POINT(xlat_lut[XLAT_LUT_PAGE(address)][XLAT_LUT_ENTRY(address)]) ) {
- void *p = xlat_lut[XLAT_LUT_PAGE(address)][XLAT_LUT_ENTRY(address)];
- xlat_cache_block_t oldblock = XLAT_BLOCK_FOR_CODE(p);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ void **p = xlat_get_lut_entry(address);
+ void *entry = *p;
+ if( IS_ENTRY_POINT(entry) ) {
+ xlat_cache_block_t oldblock = XLAT_BLOCK_FOR_LUT_ENTRY(entry);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > assert( oldblock->active );
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- xlat_new_create_ptr->chain = p;
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ xlat_new_create_ptr->chain = XLAT_CODE_ADDR(entry);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > } else {
xlat_new_create_ptr->chain = NULL;
}
xlat_new_create_ptr->use_list = NULL;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- xlat_lut[XLAT_LUT_PAGE(address)][XLAT_LUT_ENTRY(address)] =
- &xlat_new_create_ptr->code;
- xlat_new_create_ptr->lut_entry = xlat_lut[XLAT_LUT_PAGE(address)] + XLAT_LUT_ENTRY(address);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ *p = &xlat_new_create_ptr->code;
+ if( IS_ENTRY_CONTINUATION(entry) ) {
+ *((uintptr_t *)p) |= (uintptr_t)XLAT_LUT_ENTRY_USED;
+ }
+ xlat_new_create_ptr->lut_entry = p;
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >
return xlat_new_create_ptr;
}
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -473,15 +493,16 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >
}
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void xlat_commit_block( uint32_t destsize, uint32_t srcsize )
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void xlat_commit_block( uint32_t destsize, sh4addr_t startpc, sh4addr_t endpc )
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- void **ptr = xlat_new_create_ptr->lut_entry;
- void **endptr = ptr + (srcsize>>1);
- while( ptr < endptr ) {
- if( *ptr == NULL ) {
- *ptr = XLAT_LUT_ENTRY_USED;
- }
- ptr++;
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ void **entry = xlat_get_lut_entry(startpc+2);
+ /* assume main entry has already been set at this point */
+
+ for( sh4addr_t pc = startpc+2; pc < endpc; pc += 2 ) {
+ if( XLAT_LUT_ENTRY(pc) == 0 )
+ entry = xlat_get_lut_entry(pc);
+ *((uintptr_t *)entry) |= (uintptr_t)XLAT_LUT_ENTRY_USED;
+ entry++;
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
xlat_new_cache_ptr = xlat_cut_block( xlat_new_create_ptr, destsize );
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -524,7 +545,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > for( j=0; j<XLAT_LUT_PAGE_ENTRIES; j++ ) {
void *entry = page[j];
if( ((uintptr_t)entry) > (uintptr_t)XLAT_LUT_ENTRY_USED ) {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- xlat_cache_block_t block = XLAT_BLOCK_FOR_<span id="removedchars" style="background-color:#ff9999;font-weight:bolder;" >CODE</span>(entry);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ xlat_cache_block_t block = XLAT_BLOCK_FOR_<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >LUT_ENTRY</span>(entry);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > if( ptr >= block->code && ptr < block->code + block->size) {
/* Found it */
return (i<<13) | (j<<1);
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -620,7 +641,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void **page = xlat_lut[i];
if( page != NULL ) {
for( unsigned j=0; j < XLAT_LUT_PAGE_ENTRIES; j++ ) {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- void *code = (void *)(((uintptr_t)(page[j])) & (~((uintptr_t)0x03)));
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ void *code = XLAT_CODE_ADDR(page[j]);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > if( code != NULL ) {
xlat_cache_block_t ptr = XLAT_BLOCK_FOR_CODE(code);
sh4addr_t pc = XLAT_ADDR_FROM_ENTRY(i,j);
</pre></div>
<hr /><a name="file4" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/xlat</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>xltcache.h</b></big> <small id="info" style="color: #888888;" >ee6ce5804608 -> 072131b61d2a</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/xlat/xltcache.h
+++ lxdream/src/xlat/xltcache.h
@@ -78,9 +78,11 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > /**
* Commit the current translation block
* @param destsize final size of the translation in bytes.
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- * @param srcsize size of the original data that was translated in bytes
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ * @param startpc PC at the start of the translation block.
+ * @param endpc PC at the end of the translation block (i.e. the address of the
+ * next instruction after the block).
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > */
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void xlat_commit_block( uint32_t destsize, uint32_t srcsize );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void xlat_commit_block( uint32_t destsize, sh4addr_t startpc, sh4addr_t endpc );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >
/**
* Dump the disassembly of the specified code block to a stream
</pre></div>
<center><small>Chaos Theory</small></center>
</div></body></html>