<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><a href="#file1">Makefile.am</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" 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">71e28626b358 -> 186558374345</td></tr>
<tr class="alt" style=";" ><td><tt><a href="#file2">Makefile.in</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+96</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-49</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr><td><tt>aica/<a href="#file3">armdasm.c</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+14</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-14</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr class="alt" style=";" ><td><tt><a href="#file4"><span id="addedalt" style="background-color:#ccf7cc;" >cpu.c</span></a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+50</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" align="right" nowrap="nowrap">added 186558374345</td></tr>
<tr><td><tt><a href="#file5">cpu.h</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+7</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-4</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr class="alt" style=";" ><td><tt>gtkui/<a href="#file6">gtk_debug.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">71e28626b358 -> 186558374345</td></tr>
<tr><td><tt>sh4/<a href="#file7">sh4.c</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+52</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-41</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr class="alt" style=";" ><td><tt>   /<a href="#file8">sh4.h</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+3</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr><td><tt>   /<a href="#file9">sh4trans.c</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+34</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr class="alt" style=";" ><td><tt>   /<a href="#file10">sh4trans.h</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+10</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-9</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr><td><tt>   /<a href="#file11">sh4x86.in</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+72</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr class="alt" style=";" ><td><tt>test/<a href="#file12">testsh4x86.c</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+3</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr><td><tt><a href="#file13">util.c</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+1</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr class="alt" style=";" ><td><tt>x86dasm/<a href="#file14">x86dasm.c</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">-4</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr><td><tt>       /<a href="#file15">x86dasm.h</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+1</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-1</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr class="alt" style=";" ><td><tt>xlat/<a href="#file16">xltcache.c</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+38</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr><td><tt>    /<a href="#file17">xltcache.h</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+8</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-1</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">71e28626b358 -> 186558374345</td></tr>
<tr><td></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+399</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-129</td><td></td></tr>
</table>
<small id="info" style="color: #888888;" >1 added + 16 modified, total 17 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;" >
Add side-by-side x86+sh4 disassembly output
Print SH4 state information and disassembly of the current block when
crashing.
Fix delay slot instruction in conditional branch not being marked as a
  delay-slot instruction in the branch-not-taken path.
Rename REG_* defines in cpu.h to avoid conflict with translation defs
</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</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>Makefile.am</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/Makefile.am
+++ lxdream/src/Makefile.am
@@ -40,7 +40,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > lxdream_LINK = $(LINK) @LXDREAMLDFLAGS@
 lxdream_LDADD = @LXDREAM_LIBS@ @GLIB_LIBS@ @GTK_LIBS@ @LIBPNG_LIBS@ $(INTLLIBS)
 lxdream_SOURCES = \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-        main.c version.c config.c config.h lxdream.h dream.h gui.h cpu.h hook.h \
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+        main.c version.c config.c config.h lxdream.h dream.h gui.h cpu.<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >c cpu.</span>h hook.h \
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         gettext.h mem.c mem.h sdram.c mmio.h watch.c \
         asic.c asic.h clock.h serial.h \
         syscall.c syscall.h bios.c dcload.c gdbserver.c \
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -91,8 +91,8 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > test_testsh4x86_SOURCES = test/testsh4x86.c x86dasm/x86dasm.c \
        x86dasm/x86dasm.h x86dasm/i386-dis.c x86dasm/dis-init.c \
        x86dasm/dis-buf.c \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-   sh4/sh4trans.c sh4/sh4x86.c xlat/xltcache.c \
-       xlat/xltcache.h mem.c util.c 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+     sh4/sh4trans.c sh4/sh4x86.c xlat/xltcache.c sh4/sh4dasm.c \
+       xlat/xltcache.h mem.c util.c cpu.c
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 check_PROGRAMS += test/testsh4x86
 endif
</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</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>Makefile.in</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/Makefile.in
+++ lxdream/src/Makefile.in
@@ -139,8 +139,8 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @BUILD_SHARED_TRUE@@INPUT_LIRC_TRUE@input_lirc_@SOEXT@_DEPENDENCIES =  \
 @BUILD_SHARED_TRUE@@INPUT_LIRC_TRUE@   input_lirc.lo
 am__lxdream_SOURCES_DIST = main.c version.c config.c config.h \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-   lxdream.h dream.h gui.h cpu.h hook.h gettext.h mem.c mem.h \
-       sdram.c mmio.h watch.c asic.c asic.h clock.h serial.h \
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+     lxdream.h dream.h gui.h cpu.c cpu.h hook.h gettext.h mem.c \
+       mem.h sdram.c mmio.h watch.c asic.c asic.h clock.h serial.h \
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >    syscall.c syscall.h bios.c dcload.c gdbserver.c ioutil.c \
        ioutil.h lxpaths.c lxpaths.h gdrom/ide.c gdrom/ide.h \
        gdrom/packet.h gdrom/gdimage.c gdrom/gdrom.c gdrom/gdrom.h \
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -232,48 +232,48 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @CDROM_NONE_TRUE@am__objects_17 = lxdream-cd_none.$(OBJEXT)
 @JOY_LINUX_TRUE@am__objects_18 = lxdream-joy_linux.$(OBJEXT)
 am_lxdream_OBJECTS = lxdream-main.$(OBJEXT) lxdream-version.$(OBJEXT) \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-   lxdream-config.$(OBJEXT) lxdream-mem.$(OBJEXT) \
-       lxdream-sdram.$(OBJEXT) lxdream-watch.$(OBJEXT) \
-       lxdream-asic.$(OBJEXT) lxdream-syscall.$(OBJEXT) \
-       lxdream-bios.$(OBJEXT) lxdream-dcload.$(OBJEXT) \
-       lxdream-gdbserver.$(OBJEXT) lxdream-ioutil.$(OBJEXT) \
-       lxdream-lxpaths.$(OBJEXT) lxdream-ide.$(OBJEXT) \
-       lxdream-gdimage.$(OBJEXT) lxdream-gdrom.$(OBJEXT) \
-       lxdream-nrg.$(OBJEXT) lxdream-cdi.$(OBJEXT) \
-       lxdream-gdi.$(OBJEXT) lxdream-edc_ecc.$(OBJEXT) \
-       lxdream-dreamcast.$(OBJEXT) lxdream-eventq.$(OBJEXT) \
-       lxdream-sh4.$(OBJEXT) lxdream-intc.$(OBJEXT) \
-       lxdream-sh4mem.$(OBJEXT) lxdream-timer.$(OBJEXT) \
-       lxdream-dmac.$(OBJEXT) lxdream-mmu.$(OBJEXT) \
-       lxdream-sh4core.$(OBJEXT) lxdream-sh4dasm.$(OBJEXT) \
-       lxdream-sh4mmio.$(OBJEXT) lxdream-scif.$(OBJEXT) \
-       lxdream-sh4stat.$(OBJEXT) lxdream-xltcache.$(OBJEXT) \
-       lxdream-pmm.$(OBJEXT) lxdream-cache.$(OBJEXT) \
-       lxdream-armcore.$(OBJEXT) lxdream-armdasm.$(OBJEXT) \
-       lxdream-armmem.$(OBJEXT) lxdream-aica.$(OBJEXT) \
-       lxdream-audio.$(OBJEXT) lxdream-pvr2.$(OBJEXT) \
-       lxdream-pvr2mem.$(OBJEXT) lxdream-tacore.$(OBJEXT) \
-       lxdream-rendsort.$(OBJEXT) lxdream-texcache.$(OBJEXT) \
-       lxdream-yuv.$(OBJEXT) lxdream-rendsave.$(OBJEXT) \
-       lxdream-scene.$(OBJEXT) lxdream-gl_sl.$(OBJEXT) \
-       lxdream-gl_slsrc.$(OBJEXT) lxdream-glutil.$(OBJEXT) \
-       lxdream-glrender.$(OBJEXT) lxdream-maple.$(OBJEXT) \
-       lxdream-controller.$(OBJEXT) lxdream-kbd.$(OBJEXT) \
-       lxdream-mouse.$(OBJEXT) lxdream-lightgun.$(OBJEXT) \
-       lxdream-vmu.$(OBJEXT) lxdream-loader.$(OBJEXT) \
-       lxdream-bootstrap.$(OBJEXT) lxdream-util.$(OBJEXT) \
-       lxdream-gdlist.$(OBJEXT) lxdream-vmuvol.$(OBJEXT) \
-       lxdream-vmulist.$(OBJEXT) lxdream-display.$(OBJEXT) \
-       lxdream-audio_null.$(OBJEXT) lxdream-video_null.$(OBJEXT) \
-       lxdream-cd_mmc.$(OBJEXT) lxdream-video_gl.$(OBJEXT) \
-       lxdream-gl_fbo.$(OBJEXT) lxdream-serial_unix.$(OBJEXT) \
-       lxdream-hotkeys.$(OBJEXT) $(am__objects_1) $(am__objects_2) \
-       $(am__objects_3) $(am__objects_4) $(am__objects_5) \
-       $(am__objects_6) $(am__objects_7) $(am__objects_8) \
-       $(am__objects_9) $(am__objects_10) $(am__objects_11) \
-       $(am__objects_12) $(am__objects_13) $(am__objects_14) \
-       $(am__objects_15) $(am__objects_16) $(am__objects_17) \
-       $(am__objects_18)
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+     lxdream-config.$(OBJEXT) lxdream-cpu.$(OBJEXT) \
+       lxdream-mem.$(OBJEXT) lxdream-sdram.$(OBJEXT) \
+       lxdream-watch.$(OBJEXT) lxdream-asic.$(OBJEXT) \
+       lxdream-syscall.$(OBJEXT) lxdream-bios.$(OBJEXT) \
+       lxdream-dcload.$(OBJEXT) lxdream-gdbserver.$(OBJEXT) \
+       lxdream-ioutil.$(OBJEXT) lxdream-lxpaths.$(OBJEXT) \
+       lxdream-ide.$(OBJEXT) lxdream-gdimage.$(OBJEXT) \
+       lxdream-gdrom.$(OBJEXT) lxdream-nrg.$(OBJEXT) \
+       lxdream-cdi.$(OBJEXT) lxdream-gdi.$(OBJEXT) \
+       lxdream-edc_ecc.$(OBJEXT) lxdream-dreamcast.$(OBJEXT) \
+       lxdream-eventq.$(OBJEXT) lxdream-sh4.$(OBJEXT) \
+       lxdream-intc.$(OBJEXT) lxdream-sh4mem.$(OBJEXT) \
+       lxdream-timer.$(OBJEXT) lxdream-dmac.$(OBJEXT) \
+       lxdream-mmu.$(OBJEXT) lxdream-sh4core.$(OBJEXT) \
+       lxdream-sh4dasm.$(OBJEXT) lxdream-sh4mmio.$(OBJEXT) \
+       lxdream-scif.$(OBJEXT) lxdream-sh4stat.$(OBJEXT) \
+       lxdream-xltcache.$(OBJEXT) lxdream-pmm.$(OBJEXT) \
+       lxdream-cache.$(OBJEXT) lxdream-armcore.$(OBJEXT) \
+       lxdream-armdasm.$(OBJEXT) lxdream-armmem.$(OBJEXT) \
+       lxdream-aica.$(OBJEXT) lxdream-audio.$(OBJEXT) \
+       lxdream-pvr2.$(OBJEXT) lxdream-pvr2mem.$(OBJEXT) \
+       lxdream-tacore.$(OBJEXT) lxdream-rendsort.$(OBJEXT) \
+       lxdream-texcache.$(OBJEXT) lxdream-yuv.$(OBJEXT) \
+       lxdream-rendsave.$(OBJEXT) lxdream-scene.$(OBJEXT) \
+       lxdream-gl_sl.$(OBJEXT) lxdream-gl_slsrc.$(OBJEXT) \
+       lxdream-glutil.$(OBJEXT) lxdream-glrender.$(OBJEXT) \
+       lxdream-maple.$(OBJEXT) lxdream-controller.$(OBJEXT) \
+       lxdream-kbd.$(OBJEXT) lxdream-mouse.$(OBJEXT) \
+       lxdream-lightgun.$(OBJEXT) lxdream-vmu.$(OBJEXT) \
+       lxdream-loader.$(OBJEXT) lxdream-bootstrap.$(OBJEXT) \
+       lxdream-util.$(OBJEXT) lxdream-gdlist.$(OBJEXT) \
+       lxdream-vmuvol.$(OBJEXT) lxdream-vmulist.$(OBJEXT) \
+       lxdream-display.$(OBJEXT) lxdream-audio_null.$(OBJEXT) \
+       lxdream-video_null.$(OBJEXT) lxdream-cd_mmc.$(OBJEXT) \
+       lxdream-video_gl.$(OBJEXT) lxdream-gl_fbo.$(OBJEXT) \
+       lxdream-serial_unix.$(OBJEXT) lxdream-hotkeys.$(OBJEXT) \
+       $(am__objects_1) $(am__objects_2) $(am__objects_3) \
+       $(am__objects_4) $(am__objects_5) $(am__objects_6) \
+       $(am__objects_7) $(am__objects_8) $(am__objects_9) \
+       $(am__objects_10) $(am__objects_11) $(am__objects_12) \
+       $(am__objects_13) $(am__objects_14) $(am__objects_15) \
+       $(am__objects_16) $(am__objects_17) $(am__objects_18)
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > lxdream_OBJECTS = $(am_lxdream_OBJECTS)
 lxdream_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
        $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -285,7 +285,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > am__test_testsh4x86_SOURCES_DIST = test/testsh4x86.c x86dasm/x86dasm.c \
        x86dasm/x86dasm.h x86dasm/i386-dis.c x86dasm/dis-init.c \
        x86dasm/dis-buf.c sh4/sh4trans.c sh4/sh4x86.c xlat/xltcache.c \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-   xlat/xltcache.h mem.c util.c
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+     sh4/sh4dasm.c xlat/xltcache.h mem.c util.c cpu.c
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @BUILD_SH4X86_TRUE@am_test_testsh4x86_OBJECTS =  \
 @BUILD_SH4X86_TRUE@    test_testsh4x86-testsh4x86.$(OBJEXT) \
 @BUILD_SH4X86_TRUE@    test_testsh4x86-x86dasm.$(OBJEXT) \
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -295,8 +295,10 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @BUILD_SH4X86_TRUE@  test_testsh4x86-sh4trans.$(OBJEXT) \
 @BUILD_SH4X86_TRUE@    test_testsh4x86-sh4x86.$(OBJEXT) \
 @BUILD_SH4X86_TRUE@    test_testsh4x86-xltcache.$(OBJEXT) \
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+@BUILD_SH4X86_TRUE@  test_testsh4x86-sh4dasm.$(OBJEXT) \
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @BUILD_SH4X86_TRUE@        test_testsh4x86-mem.$(OBJEXT) \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-@BUILD_SH4X86_TRUE@        test_testsh4x86-util.$(OBJEXT)
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+@BUILD_SH4X86_TRUE@  test_testsh4x86-util.$(OBJEXT)<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" > \</span>
+@BUILD_SH4X86_TRUE@    test_testsh4x86-cpu.$(OBJEXT)
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > test_testsh4x86_OBJECTS = $(am_test_testsh4x86_OBJECTS)
 test_testsh4x86_DEPENDENCIES =
 am__dirstamp = $(am__leading_dot)dirstamp
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -541,7 +543,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >      $(INTLLIBS) $(am__append_18) $(am__append_20) $(am__append_22) \
        $(am__append_24) $(am__append_26)
 lxdream_SOURCES = main.c version.c config.c config.h lxdream.h dream.h \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-   gui.h cpu.h hook.h gettext.h mem.c mem.h sdram.c mmio.h \
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+     gui.h cpu.<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >c cpu.</span>h hook.h gettext.h mem.c mem.h sdram.c mmio.h \
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >    watch.c asic.c asic.h clock.h serial.h syscall.c syscall.h \
        bios.c dcload.c gdbserver.c ioutil.c ioutil.h lxpaths.c \
        lxpaths.h gdrom/ide.c gdrom/ide.h gdrom/packet.h \
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -582,8 +584,8 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @BUILD_SH4X86_TRUE@test_testsh4x86_SOURCES = test/testsh4x86.c x86dasm/x86dasm.c \
 @BUILD_SH4X86_TRUE@    x86dasm/x86dasm.h x86dasm/i386-dis.c x86dasm/dis-init.c \
 @BUILD_SH4X86_TRUE@    x86dasm/dis-buf.c \
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-@BUILD_SH4X86_TRUE@        sh4/sh4trans.c sh4/sh4x86.c xlat/xltcache.c \
-@BUILD_SH4X86_TRUE@    xlat/xltcache.h mem.c util.c 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+@BUILD_SH4X86_TRUE@  sh4/sh4trans.c sh4/sh4x86.c xlat/xltcache.c sh4/sh4dasm.c \
+@BUILD_SH4X86_TRUE@    xlat/xltcache.h mem.c util.c cpu.c
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 @BUILD_SHARED_TRUE@lxdream_dummy_@SOEXT@_SOURCES = 
 @BUILD_SHARED_TRUE@lxdream_dummy_@SOEXT@_LDADD = lxdream_dummy.lo @SDL_LIBS@
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -767,6 +769,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-cocoaui.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-config.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-controller.Po@am__quote@
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-cpu.Po@am__quote@
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-dcload.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-dis-buf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-dis-init.Po@am__quote@
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -855,10 +858,12 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-x86dasm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-xltcache.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lxdream-yuv.Po@am__quote@
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_testsh4x86-cpu.Po@am__quote@
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_testsh4x86-dis-buf.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_testsh4x86-dis-init.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_testsh4x86-i386-dis.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_testsh4x86-mem.Po@am__quote@
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_testsh4x86-sh4dasm.Po@am__quote@
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_testsh4x86-sh4trans.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_testsh4x86-sh4x86.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_testsh4x86-testsh4x86.Po@am__quote@
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -980,6 +985,20 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @AMDEP_TRUE@@am__fastdepCC_FALSE@    DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lxdream_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lxdream-config.obj `if test -f 'config.c'; then $(CYGPATH_W) 'config.c'; else $(CYGPATH_W) '$(srcdir)/config.c'; fi`
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+lxdream-cpu.o: cpu.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lxdream_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lxdream-cpu.o -MD -MP -MF "$(DEPDIR)/lxdream-cpu.Tpo" -c -o lxdream-cpu.o `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/lxdream-cpu.Tpo" "$(DEPDIR)/lxdream-cpu.Po"; else rm -f "$(DEPDIR)/lxdream-cpu.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='cpu.c' object='lxdream-cpu.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lxdream_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lxdream-cpu.o `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c
+
+lxdream-cpu.obj: cpu.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lxdream_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lxdream-cpu.obj -MD -MP -MF "$(DEPDIR)/lxdream-cpu.Tpo" -c -o lxdream-cpu.obj `if test -f 'cpu.c'; then $(CYGPATH_W) 'cpu.c'; else $(CYGPATH_W) '$(srcdir)/cpu.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/lxdream-cpu.Tpo" "$(DEPDIR)/lxdream-cpu.Po"; else rm -f "$(DEPDIR)/lxdream-cpu.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='cpu.c' object='lxdream-cpu.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lxdream_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lxdream-cpu.obj `if test -f 'cpu.c'; then $(CYGPATH_W) 'cpu.c'; else $(CYGPATH_W) '$(srcdir)/cpu.c'; fi`
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > lxdream-mem.o: mem.c
 @am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lxdream_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lxdream-mem.o -MD -MP -MF "$(DEPDIR)/lxdream-mem.Tpo" -c -o lxdream-mem.o `test -f 'mem.c' || echo '$(srcdir)/'`mem.c; \
 @am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/lxdream-mem.Tpo" "$(DEPDIR)/lxdream-mem.Po"; else rm -f "$(DEPDIR)/lxdream-mem.Tpo"; exit 1; fi
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -2506,6 +2525,20 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @AMDEP_TRUE@@am__fastdepCC_FALSE@    DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_testsh4x86_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_testsh4x86-xltcache.obj `if test -f 'xlat/xltcache.c'; then $(CYGPATH_W) 'xlat/xltcache.c'; else $(CYGPATH_W) '$(srcdir)/xlat/xltcache.c'; fi`
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+test_testsh4x86-sh4dasm.o: sh4/sh4dasm.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_testsh4x86_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_testsh4x86-sh4dasm.o -MD -MP -MF "$(DEPDIR)/test_testsh4x86-sh4dasm.Tpo" -c -o test_testsh4x86-sh4dasm.o `test -f 'sh4/sh4dasm.c' || echo '$(srcdir)/'`sh4/sh4dasm.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/test_testsh4x86-sh4dasm.Tpo" "$(DEPDIR)/test_testsh4x86-sh4dasm.Po"; else rm -f "$(DEPDIR)/test_testsh4x86-sh4dasm.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='sh4/sh4dasm.c' object='test_testsh4x86-sh4dasm.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_testsh4x86_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_testsh4x86-sh4dasm.o `test -f 'sh4/sh4dasm.c' || echo '$(srcdir)/'`sh4/sh4dasm.c
+
+test_testsh4x86-sh4dasm.obj: sh4/sh4dasm.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_testsh4x86_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_testsh4x86-sh4dasm.obj -MD -MP -MF "$(DEPDIR)/test_testsh4x86-sh4dasm.Tpo" -c -o test_testsh4x86-sh4dasm.obj `if test -f 'sh4/sh4dasm.c'; then $(CYGPATH_W) 'sh4/sh4dasm.c'; else $(CYGPATH_W) '$(srcdir)/sh4/sh4dasm.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/test_testsh4x86-sh4dasm.Tpo" "$(DEPDIR)/test_testsh4x86-sh4dasm.Po"; else rm -f "$(DEPDIR)/test_testsh4x86-sh4dasm.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='sh4/sh4dasm.c' object='test_testsh4x86-sh4dasm.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_testsh4x86_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_testsh4x86-sh4dasm.obj `if test -f 'sh4/sh4dasm.c'; then $(CYGPATH_W) 'sh4/sh4dasm.c'; else $(CYGPATH_W) '$(srcdir)/sh4/sh4dasm.c'; fi`
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > test_testsh4x86-mem.o: mem.c
 @am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_testsh4x86_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_testsh4x86-mem.o -MD -MP -MF "$(DEPDIR)/test_testsh4x86-mem.Tpo" -c -o test_testsh4x86-mem.o `test -f 'mem.c' || echo '$(srcdir)/'`mem.c; \
 @am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/test_testsh4x86-mem.Tpo" "$(DEPDIR)/test_testsh4x86-mem.Po"; else rm -f "$(DEPDIR)/test_testsh4x86-mem.Tpo"; exit 1; fi
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -2534,6 +2567,20 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > @AMDEP_TRUE@@am__fastdepCC_FALSE@    DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_testsh4x86_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_testsh4x86-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+test_testsh4x86-cpu.o: cpu.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_testsh4x86_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_testsh4x86-cpu.o -MD -MP -MF "$(DEPDIR)/test_testsh4x86-cpu.Tpo" -c -o test_testsh4x86-cpu.o `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/test_testsh4x86-cpu.Tpo" "$(DEPDIR)/test_testsh4x86-cpu.Po"; else rm -f "$(DEPDIR)/test_testsh4x86-cpu.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='cpu.c' object='test_testsh4x86-cpu.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_testsh4x86_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_testsh4x86-cpu.o `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c
+
+test_testsh4x86-cpu.obj: cpu.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_testsh4x86_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_testsh4x86-cpu.obj -MD -MP -MF "$(DEPDIR)/test_testsh4x86-cpu.Tpo" -c -o test_testsh4x86-cpu.obj `if test -f 'cpu.c'; then $(CYGPATH_W) 'cpu.c'; else $(CYGPATH_W) '$(srcdir)/cpu.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/test_testsh4x86-cpu.Tpo" "$(DEPDIR)/test_testsh4x86-cpu.Po"; else rm -f "$(DEPDIR)/test_testsh4x86-cpu.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='cpu.c' object='test_testsh4x86-cpu.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_testsh4x86_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_testsh4x86-cpu.obj `if test -f 'cpu.c'; then $(CYGPATH_W) 'cpu.c'; else $(CYGPATH_W) '$(srcdir)/cpu.c'; fi`
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > testxlt.o: test/testxlt.c
 @am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testxlt.o -MD -MP -MF "$(DEPDIR)/testxlt.Tpo" -c -o testxlt.o `test -f 'test/testxlt.c' || echo '$(srcdir)/'`test/testxlt.c; \
 @am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/testxlt.Tpo" "$(DEPDIR)/testxlt.Po"; else rm -f "$(DEPDIR)/testxlt.Tpo"; exit 1; fi
</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/aica</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>armdasm.c</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/aica/armdasm.c
+++ lxdream/src/aica/armdasm.c
@@ -49,25 +49,25 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 
 const struct reg_desc_struct arm_reg_map[] = 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-{ {"R0", REG_INT, &armr.r[0]}, {"R1", REG_INT, &armr.r[1]},
-        {"R2", REG_INT, &armr.r[2]}, {"R3", REG_INT, &armr.r[3]},
-        {"R4", REG_INT, &armr.r[4]}, {"R5", REG_INT, &armr.r[5]},
-        {"R6", REG_INT, &armr.r[6]}, {"R7", REG_INT, &armr.r[7]},
-        {"R8", REG_INT, &armr.r[8]}, {"R9", REG_INT, &armr.r[9]},
-        {"R10",REG_INT, &armr.r[10]}, {"R11",REG_INT, &armr.r[11]},
-        {"R12",REG_INT, &armr.r[12]}, {"R13",REG_INT, &armr.r[13]},
-        {"R14",REG_INT, &armr.r[14]}, {"R15",REG_INT, &armr.r[15]},
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+{ {"R0", REG_TYPE_INT, &armr.r[0]}, {"R1", REG_TYPE_INT, &armr.r[1]},
+        {"R2", REG_TYPE_INT, &armr.r[2]}, {"R3", REG_TYPE_INT, &armr.r[3]},
+        {"R4", REG_TYPE_INT, &armr.r[4]}, {"R5", REG_TYPE_INT, &armr.r[5]},
+        {"R6", REG_TYPE_INT, &armr.r[6]}, {"R7", REG_TYPE_INT, &armr.r[7]},
+        {"R8", REG_TYPE_INT, &armr.r[8]}, {"R9", REG_TYPE_INT, &armr.r[9]},
+        {"R10",REG_TYPE_INT, &armr.r[10]}, {"R11",REG_TYPE_INT, &armr.r[11]},
+        {"R12",REG_TYPE_INT, &armr.r[12]}, {"R13",REG_TYPE_INT, &armr.r[13]},
+        {"R14",REG_TYPE_INT, &armr.r[14]}, {"R15",REG_TYPE_INT, &armr.r[15]},
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         
         /* Block of FPA registers (arm-elf-gdb seems to expect these).
          * Oddly enough the ARM7TDMI doesn't have them */
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-        {"F0",REG_NONE, NULL}, {"F1",REG_NONE, NULL},
-        {"F2",REG_NONE, NULL}, {"F3",REG_NONE, NULL},
-        {"F4",REG_NONE, NULL}, {"F5",REG_NONE, NULL},
-        {"F6",REG_NONE, NULL}, {"F7",REG_NONE, NULL},
-        {"FPS",REG_NONE, NULL},
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+        {"F0",REG_TYPE_NONE, NULL}, {"F1",REG_TYPE_NONE, NULL},
+        {"F2",REG_TYPE_NONE, NULL}, {"F3",REG_TYPE_NONE, NULL},
+        {"F4",REG_TYPE_NONE, NULL}, {"F5",REG_TYPE_NONE, NULL},
+        {"F6",REG_TYPE_NONE, NULL}, {"F7",REG_TYPE_NONE, NULL},
+        {"FPS",REG_TYPE_NONE, NULL},
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         
         /* System registers */
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-        {"CPSR", REG_INT, &armr.cpsr}, {"SPSR", REG_INT, &armr.spsr},
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+        {"CPSR", REG_TYPE_INT, &armr.cpsr}, {"SPSR", REG_TYPE_INT, &armr.spsr},
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         {NULL, 0, NULL} };
 
 /* Implementation of get_register - ARM has no pseudo registers so this
</pre></div>
<hr /><a name="file4" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span id="added" class="pathname" style="font-family:monospace; float:right; background-color:#ddffdd;" >lxdream/src</span><br />
<div id="added" class="fileheader" style="margin-bottom:.5em; background-color:#ddffdd;" ><big><b>cpu.c</b></big> <small id="info" style="color: #888888;" >added at 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/cpu.c
+++ lxdream/src/cpu.c
@@ -0,0 +1,50 @@
</small></pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+/**
+ * $Id$
+ *
+ * Generic CPU utility functions
+ *
+ * Copyright (c) 2009 Nathan Keynes.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include "cpu.h"
+
+void cpu_print_registers( FILE *f, cpu_desc_t cpu )
+{
+    int i;
+    int column = 0;
+
+    fprintf( f, "%s registers:\n", cpu->name );
+    for( i=0; cpu->regs_info[i].name != NULL; i++ ) {
+        void *value = cpu->get_register(i);
+        if( value != NULL ) {
+            column++;
+            switch( cpu->regs_info[i].type ) {
+            case REG_TYPE_INT:
+                fprintf( f,  "%5s: %08x   ", cpu->regs_info[i].name, *(uint32_t *)value );
+                break;
+            case REG_TYPE_FLOAT:
+                fprintf( f, "%5s: %.8f ", cpu->regs_info[i].name, (double)*(float *)value );
+                break;
+            case REG_TYPE_DOUBLE:
+                fprintf( f, "%5s: %.8f ", cpu->regs_info[i].name, *(double *)value );
+                break;
+            case REG_TYPE_NONE:
+                column = 4;
+            }
+        }
+        if( column == 4 ) {
+            fprintf( f, "\n" );
+            column = 0;
+        }
+    }
+}
</pre></div>
<hr /><a name="file5" /><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</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>cpu.h</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/cpu.h
+++ lxdream/src/cpu.h
@@ -19,6 +19,8 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #ifndef lxdream_cpu_H
 #define lxdream_cpu_H 1
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+#include <stdio.h>
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #include "lxdream.h"
 #include "mem.h"
 
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -36,10 +38,10 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >  */
 typedef uint32_t (*disasm_func_t)(uint32_t pc, char *buffer, int buflen, char *opcode );
 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-#define REG_INT 0
-#define REG_FLOAT 1
-#define REG_DOUBLE 2
-#define REG_NONE 3 /* Used for empty/separator field */
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+#define REG_TYPE_INT 0
+#define REG_TYPE_FLOAT 1
+#define REG_TYPE_DOUBLE 2
+#define REG_TYPE_NONE 3 /* Used for empty/separator field */
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 /**
  * Structure that defines a single register in a CPU for display purposes.
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -94,5 +96,6 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #endif
 
 gboolean gdb_init_server( const char *interface, int port, cpu_desc_t cpu, gboolean mmu );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void cpu_print_registers( FILE *out, cpu_desc_t cpu );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 #endif /* !lxdream_cpu_H */
</pre></div>
<hr /><a name="file6" /><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/gtkui</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>gtk_debug.c</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/gtkui/gtk_debug.c
+++ lxdream/src/gtkui/gtk_debug.c
@@ -202,10 +202,10 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >         arr[0] = data->cpu->regs_info[i].name;
         void *value = data->cpu->get_register(i);
         if( value != NULL ) {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-            if( data->cpu->regs_info->type == REG_INT ) {
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+            if( data->cpu->regs_info->type == REG_<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >TYPE_</span>INT ) {
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >                 sprintf( buf, "%08X", *((uint32_t *)value) );
                 gtk_clist_append( data->regs_list, arr );
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-            } else if( data->cpu->regs_info->type == REG_FLOAT ) {
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+            } else if( data->cpu->regs_info->type == REG_<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >TYPE_</span>FLOAT ) {
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >                 sprintf( buf, "%f", *((float *)value) );
                 gtk_clist_append( data->regs_list, arr );
             }
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -223,7 +223,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     for( i=0; data->cpu->regs_info[i].name != NULL; i++ ) {
         void *value = data->cpu->get_register(i);
         if( value != NULL ) {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-            if( data->cpu->regs_info[i].type == REG_INT ) {
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+            if( data->cpu->regs_info[i].type == REG_<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >TYPE_</span>INT ) {
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >                 /* Yes this _is_ probably fairly evil */
                 if( *((uint32_t *)value) !=
                     *((uint32_t *)((char *)data->saved_regs + ((char *)value - (char *)data->cpu->regs))) ) {
</pre></div>
<hr /><a name="file7" /><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>sh4.c</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/sh4/sh4.c
+++ lxdream/src/sh4/sh4.c
@@ -42,7 +42,6 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #endif
 
 void sh4_init( void );
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void sh4_xlat_init( void );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void sh4_poweron_reset( void );
 void sh4_start( void );
 void sh4_stop( void );
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -54,54 +53,53 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > size_t sh4_debug_write_vma( uint32_t addr, unsigned char *buf, size_t length );
 
 uint32_t sh4_run_slice( uint32_t );
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-uint32_t sh4_xlat_run_slice( uint32_t );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 /* Note: this must match GDB's ordering */
 const struct reg_desc_struct sh4_reg_map[] = 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-  { {"R0", REG_INT, &sh4r.r[0]}, {"R1", REG_INT, &sh4r.r[1]},
-    {"R2", REG_INT, &sh4r.r[2]}, {"R3", REG_INT, &sh4r.r[3]},
-    {"R4", REG_INT, &sh4r.r[4]}, {"R5", REG_INT, &sh4r.r[5]},
-    {"R6", REG_INT, &sh4r.r[6]}, {"R7", REG_INT, &sh4r.r[7]},
-    {"R8", REG_INT, &sh4r.r[8]}, {"R9", REG_INT, &sh4r.r[9]},
-    {"R10",REG_INT, &sh4r.r[10]}, {"R11",REG_INT, &sh4r.r[11]},
-    {"R12",REG_INT, &sh4r.r[12]}, {"R13",REG_INT, &sh4r.r[13]},
-    {"R14",REG_INT, &sh4r.r[14]}, {"R15",REG_INT, &sh4r.r[15]},
-    {"PC", REG_INT, &sh4r.pc}, {"PR", REG_INT, &sh4r.pr},
-    {"GBR", REG_INT, &sh4r.gbr}, {"VBR",REG_INT, &sh4r.vbr}, 
-    {"MACH",REG_INT, ((uint32_t *)&sh4r.mac)+1}, {"MACL",REG_INT, &sh4r.mac},
-    {"SR", REG_INT, &sh4r.sr},
-    {"FPUL", REG_INT, &sh4r.fpul.i}, {"FPSCR", REG_INT, &sh4r.fpscr},
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+  { {"R0", REG_TYPE_INT, &sh4r.r[0]}, {"R1", REG_TYPE_INT, &sh4r.r[1]},
+    {"R2", REG_TYPE_INT, &sh4r.r[2]}, {"R3", REG_TYPE_INT, &sh4r.r[3]},
+    {"R4", REG_TYPE_INT, &sh4r.r[4]}, {"R5", REG_TYPE_INT, &sh4r.r[5]},
+    {"R6", REG_TYPE_INT, &sh4r.r[6]}, {"R7", REG_TYPE_INT, &sh4r.r[7]},
+    {"R8", REG_TYPE_INT, &sh4r.r[8]}, {"R9", REG_TYPE_INT, &sh4r.r[9]},
+    {"R10",REG_TYPE_INT, &sh4r.r[10]}, {"R11",REG_TYPE_INT, &sh4r.r[11]},
+    {"R12",REG_TYPE_INT, &sh4r.r[12]}, {"R13",REG_TYPE_INT, &sh4r.r[13]},
+    {"R14",REG_TYPE_INT, &sh4r.r[14]}, {"R15",REG_TYPE_INT, &sh4r.r[15]},
+    {"PC", REG_TYPE_INT, &sh4r.pc}, {"PR", REG_TYPE_INT, &sh4r.pr},
+    {"GBR", REG_TYPE_INT, &sh4r.gbr}, {"VBR",REG_TYPE_INT, &sh4r.vbr}, 
+    {"MACH",REG_TYPE_INT, ((uint32_t *)&sh4r.mac)+1}, {"MACL",REG_TYPE_INT, &sh4r.mac},
+    {"SR", REG_TYPE_INT, &sh4r.sr},
+    {"FPUL", REG_TYPE_INT, &sh4r.fpul.i}, {"FPSCR", REG_TYPE_INT, &sh4r.fpscr},
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    {"FR0", REG_FLOAT, &sh4r.fr[0][1] },{"FR1", REG_FLOAT, &sh4r.fr[0][0]},
-    {"FR2", REG_FLOAT, &sh4r.fr[0][3] },{"FR3", REG_FLOAT, &sh4r.fr[0][2]},
-    {"FR4", REG_FLOAT, &sh4r.fr[0][5] },{"FR5", REG_FLOAT, &sh4r.fr[0][4]},
-    {"FR6", REG_FLOAT, &sh4r.fr[0][7] },{"FR7", REG_FLOAT, &sh4r.fr[0][6]},
-    {"FR8", REG_FLOAT, &sh4r.fr[0][9] },{"FR9", REG_FLOAT, &sh4r.fr[0][8]},
-    {"FR10", REG_FLOAT, &sh4r.fr[0][11] },{"FR11", REG_FLOAT, &sh4r.fr[0][10]},
-    {"FR12", REG_FLOAT, &sh4r.fr[0][13] },{"FR13", REG_FLOAT, &sh4r.fr[0][12]},
-    {"FR14", REG_FLOAT, &sh4r.fr[0][15] },{"FR15", REG_FLOAT, &sh4r.fr[0][14]},
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    {"FR0", REG_TYPE_FLOAT, &sh4r.fr[0][1] },{"FR1", REG_TYPE_FLOAT, &sh4r.fr[0][0]},
+    {"FR2", REG_TYPE_FLOAT, &sh4r.fr[0][3] },{"FR3", REG_TYPE_FLOAT, &sh4r.fr[0][2]},
+    {"FR4", REG_TYPE_FLOAT, &sh4r.fr[0][5] },{"FR5", REG_TYPE_FLOAT, &sh4r.fr[0][4]},
+    {"FR6", REG_TYPE_FLOAT, &sh4r.fr[0][7] },{"FR7", REG_TYPE_FLOAT, &sh4r.fr[0][6]},
+    {"FR8", REG_TYPE_FLOAT, &sh4r.fr[0][9] },{"FR9", REG_TYPE_FLOAT, &sh4r.fr[0][8]},
+    {"FR10", REG_TYPE_FLOAT, &sh4r.fr[0][11] },{"FR11", REG_TYPE_FLOAT, &sh4r.fr[0][10]},
+    {"FR12", REG_TYPE_FLOAT, &sh4r.fr[0][13] },{"FR13", REG_TYPE_FLOAT, &sh4r.fr[0][12]},
+    {"FR14", REG_TYPE_FLOAT, &sh4r.fr[0][15] },{"FR15", REG_TYPE_FLOAT, &sh4r.fr[0][14]},
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    {"SSR",REG_INT, &sh4r.ssr}, {"SPC", REG_INT, &sh4r.spc},
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    {"SSR",REG_TYPE_INT, &sh4r.ssr}, {"SPC", REG_TYPE_INT, &sh4r.spc},
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    {"R0B0", REG_INT, NULL}, {"R1B0", REG_INT, NULL},
-    {"R2B0", REG_INT, NULL}, {"R3B0", REG_INT, NULL},
-    {"R4B0", REG_INT, NULL}, {"R5B0", REG_INT, NULL},
-    {"R6B0", REG_INT, NULL}, {"R7B0", REG_INT, NULL},
-    {"R0B1", REG_INT, NULL}, {"R1B1", REG_INT, NULL},
-    {"R2B1", REG_INT, NULL}, {"R3B1", REG_INT, NULL},
-    {"R4B1", REG_INT, NULL}, {"R5B1", REG_INT, NULL},
-    {"R6B1", REG_INT, NULL}, {"R7B1", REG_INT, NULL},
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    {"R0B0", REG_TYPE_INT, NULL}, {"R1B0", REG_TYPE_INT, NULL},
+    {"R2B0", REG_TYPE_INT, NULL}, {"R3B0", REG_TYPE_INT, NULL},
+    {"R4B0", REG_TYPE_INT, NULL}, {"R5B0", REG_TYPE_INT, NULL},
+    {"R6B0", REG_TYPE_INT, NULL}, {"R7B0", REG_TYPE_INT, NULL},
+    {"R0B1", REG_TYPE_INT, NULL}, {"R1B1", REG_TYPE_INT, NULL},
+    {"R2B1", REG_TYPE_INT, NULL}, {"R3B1", REG_TYPE_INT, NULL},
+    {"R4B1", REG_TYPE_INT, NULL}, {"R5B1", REG_TYPE_INT, NULL},
+    {"R6B1", REG_TYPE_INT, NULL}, {"R7B1", REG_TYPE_INT, NULL},
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    {"SGR",REG_INT, &sh4r.sgr}, {"DBR", REG_INT, &sh4r.dbr},
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    {"SGR",REG_TYPE_INT, &sh4r.sgr}, {"DBR", REG_TYPE_INT, &sh4r.dbr},
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    {"XF0", REG_FLOAT, &sh4r.fr[1][1] },{"XF1", REG_FLOAT, &sh4r.fr[1][0]},
-    {"XF2", REG_FLOAT, &sh4r.fr[1][3] },{"XF3", REG_FLOAT, &sh4r.fr[1][2]},
-    {"XF4", REG_FLOAT, &sh4r.fr[1][5] },{"XF5", REG_FLOAT, &sh4r.fr[1][4]},
-    {"XF6", REG_FLOAT, &sh4r.fr[1][7] },{"XF7", REG_FLOAT, &sh4r.fr[1][6]},
-    {"XF8", REG_FLOAT, &sh4r.fr[1][9] },{"XF9", REG_FLOAT, &sh4r.fr[1][8]},
-    {"XF10", REG_FLOAT, &sh4r.fr[1][11] },{"XF11", REG_FLOAT, &sh4r.fr[1][10]},
-    {"XF12", REG_FLOAT, &sh4r.fr[1][13] },{"XF13", REG_FLOAT, &sh4r.fr[1][12]},
-    {"XF14", REG_FLOAT, &sh4r.fr[1][15] },{"XF15", REG_FLOAT, &sh4r.fr[1][14]},
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    {"XF0", REG_TYPE_FLOAT, &sh4r.fr[1][1] },{"XF1", REG_TYPE_FLOAT, &sh4r.fr[1][0]},
+    {"XF2", REG_TYPE_FLOAT, &sh4r.fr[1][3] },{"XF3", REG_TYPE_FLOAT, &sh4r.fr[1][2]},
+    {"XF4", REG_TYPE_FLOAT, &sh4r.fr[1][5] },{"XF5", REG_TYPE_FLOAT, &sh4r.fr[1][4]},
+    {"XF6", REG_TYPE_FLOAT, &sh4r.fr[1][7] },{"XF7", REG_TYPE_FLOAT, &sh4r.fr[1][6]},
+    {"XF8", REG_TYPE_FLOAT, &sh4r.fr[1][9] },{"XF9", REG_TYPE_FLOAT, &sh4r.fr[1][8]},
+    {"XF10", REG_TYPE_FLOAT, &sh4r.fr[1][11] },{"XF11", REG_TYPE_FLOAT, &sh4r.fr[1][10]},
+    {"XF12", REG_TYPE_FLOAT, &sh4r.fr[1][13] },{"XF13", REG_TYPE_FLOAT, &sh4r.fr[1][12]},
+    {"XF14", REG_TYPE_FLOAT, &sh4r.fr[1][15] },{"XF15", REG_TYPE_FLOAT, &sh4r.fr[1][14]},
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     
     {NULL, 0, NULL} };
 
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -390,6 +388,19 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     sh4r.new_pc = pc+2;
 }
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+/**
+ * Dump all SH4 core information for crash-dump purposes
+ */
+void sh4_crashdump()
+{
+    cpu_print_registers( stderr, &sh4_cpu_desc );
+#ifdef SH4_TRANSLATOR
+    if( sh4_use_translator ) {
+        sh4_translate_crashdump();
+    } /* Nothing really to print for emu core */
+#endif
+}
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 /******************************* Support methods ***************************/
 
</pre></div>
<hr /><a name="file8" /><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>sh4.h</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/sh4/sh4.h
+++ lxdream/src/sh4/sh4.h
@@ -128,6 +128,9 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > gboolean sh4_clear_breakpoint( uint32_t pc, breakpoint_type_t type );
 int sh4_get_breakpoint( uint32_t pc );
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+/** Dump current SH4 core state (for crashdump purposes) */
+void sh4_crashdump();
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #ifdef __cplusplus
 }
 #endif
</pre></div>
<hr /><a name="file9" /><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;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/sh4/sh4trans.c
+++ lxdream/src/sh4/sh4trans.c
@@ -240,3 +240,37 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     return result;
 }
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+/**
+ * Crashdump translation information.
+ *
+ * Print out the currently executing block (if any), in source and target
+ * assembly.
+ *
+ * Note: we want to be _really_ careful not to cause a second-level crash
+ * at this point (e.g. if the lookup tables are corrupted...)
+ */
+void sh4_translate_crashdump()
+{
+    if( !IS_IN_ICACHE(sh4r.pc) ) {
+        /** If we're crashing due to an icache lookup failure, we'll probably
+         * hit this case - just complain and return.
+         */
+        fprintf( stderr, "** SH4 PC not in current instruction region **\n" );
+        return;
+    }
+    uint32_t pma = GET_ICACHE_PHYS(sh4r.pc);
+    void *code = xlat_get_code( pma );
+    if( code == NULL ) {
+        fprintf( stderr, "** No translated block for current SH4 PC **\n" );
+        return;
+    }
+
+    /* Sanity check on the code pointer */
+    if( !xlat_is_code_pointer(code) ) {
+        fprintf( stderr, "** Possibly corrupt translation cache **\n" );
+        return;
+    }
+
+    void *native_pc = xlat_get_native_pc( code, xlat_get_code_size(code) );
+    sh4_translate_disasm_block( stderr, code, sh4r.pc, native_pc );
+}
</pre></div>
<hr /><a name="file10" /><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.h</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/sh4/sh4trans.h
+++ lxdream/src/sh4/sh4trans.h
@@ -43,18 +43,13 @@
</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;" >-uint32_t sh4_xlat_run_slice( uint32_t nanosecs );
-
-/**
- * Return true if translated code is currently running
- */
-gboolean sh4_xlat_is_running();
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+uint32_t sh4_translate_run_slice( uint32_t nanosecs );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 /**
  * Initialize the translation engine (if required). Note xlat cache
  * must already be initialized.
  */
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void sh4_xlat_init();
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void sh4_translate_init( void);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 /**
  * Translate the specified block of code starting from the specified start
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -80,19 +75,19 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 #define TARGET_X86 1
 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void sh4_translate_init( void );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void sh4_translate_begin_block( sh4addr_t pc );
 uint32_t sh4_translate_instruction( sh4addr_t pc );
 void sh4_translate_end_block( sh4addr_t pc );
 uint32_t sh4_translate_end_block_size();
 void sh4_translate_emit_breakpoint( sh4vma_t pc );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void sh4_translate_crashdump();
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 typedef void (*unwind_thunk_t)(void);
 
 /**
  * From within the translator, (typically called from MMU exception handling routines)
  * immediately exit the current translation block (performing cleanup as necessary) and
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >- * return to sh4_<span id="removedchars" style="background-color:#ff9999;font-weight:bolder;" >xlat</span>_run_slice(). Effectively a fast longjmp w/ xlat recovery.
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ * return to sh4_<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >translate</span>_run_slice(). Effectively a fast longjmp w/ xlat recovery.
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >  *
  * Note: The correct working of this method depends on the translator anticipating the
  * exception and generating the appropriate recovery block(s) - currently this means 
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -132,6 +127,12 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >  */
 void FASTCALL sh4_translate_breakpoint_hit( sh4vma_t pc );
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+/**
+ * Disassemble the given translated code block, and it's source SH4 code block
+ * side-by-side. The current native pc will be marked if non-null.
+ */
+void sh4_translate_disasm_block( FILE *out, void *code, sh4addr_t source_start, void *native_pc );
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #ifdef __cplusplus
 }
 #endif
</pre></div>
<hr /><a name="file11" /><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>sh4x86.in</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/sh4/sh4x86.in
+++ lxdream/src/sh4/sh4x86.in
@@ -27,12 +27,14 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 #include "lxdream.h"
 #include "sh4/sh4core.h"
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+#include "sh4/sh4dasm.h"
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #include "sh4/sh4trans.h"
 #include "sh4/sh4stat.h"
 #include "sh4/sh4mmio.h"
 #include "sh4/mmu.h"
 #include "xlat/xltcache.h"
 #include "xlat/x86/x86op.h"
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+#include "x86dasm/x86dasm.h"
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #include "clock.h"
 
 #define DEFAULT_BACKPATCH_SIZE 4096
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -107,6 +109,25 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > static uint32_t save_fcw; /* save value for fpu control word */
 static uint32_t trunc_fcw = 0x0F7F; /* fcw value for truncation mode */
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+static struct x86_symbol x86_symbol_table[] = {
+    { "sh4r+128", ((char *)&sh4r)+128 },
+    { "sh4_cpu_period", &sh4_cpu_period },
+    { "sh4_address_space", NULL },
+    { "sh4_user_address_space", NULL },
+    { "sh4_write_fpscr", sh4_write_fpscr },
+    { "sh4_write_sr", sh4_write_sr },
+    { "sh4_read_sr", sh4_read_sr },
+    { "sh4_sleep", sh4_sleep },
+    { "sh4_fsca", sh4_fsca },
+    { "sh4_ftrv", sh4_ftrv },
+    { "sh4_switch_fr_banks", sh4_switch_fr_banks },
+    { "sh4_execute_instruction", sh4_execute_instruction },
+    { "signsat48", signsat48 },
+    { "xlat_get_code_by_vma", xlat_get_code_by_vma },
+    { "xlat_get_code", xlat_get_code }
+};
+
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > gboolean is_sse3_supported()
 {
     uint32_t features;
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -122,8 +143,57 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     sh4_x86.backpatch_list = malloc(DEFAULT_BACKPATCH_SIZE);
     sh4_x86.backpatch_size = DEFAULT_BACKPATCH_SIZE / sizeof(struct backpatch_record);
     sh4_x86.sse3_enabled = is_sse3_supported();
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    x86_symbol_table[2].ptr = sh4_address_space;
+    x86_symbol_table[3].ptr = sh4_user_address_space;    
+    x86_disasm_init();
+    x86_set_symtab( x86_symbol_table, sizeof(x86_symbol_table)/sizeof(struct x86_symbol) );
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+/**
+ * Disassemble the given translated code block, and it's source SH4 code block
+ * side-by-side. The current native pc will be marked if non-null.
+ */
+void sh4_translate_disasm_block( FILE *out, void *code, sh4addr_t source_start, void *native_pc )
+{
+    char buf[256];
+    char op[256];
+
+    uintptr_t target_start = (uintptr_t)code, target_pc;
+    uintptr_t target_end = target_start + xlat_get_code_size(code);
+    uint32_t source_pc = source_start;
+    uint32_t source_end = source_pc;
+    xlat_recovery_record_t source_recov_table = XLAT_RECOVERY_TABLE(code);
+    xlat_recovery_record_t source_recov_end = source_recov_table + XLAT_BLOCK_FOR_CODE(code)->recover_table_size;
+
+    for( target_pc = target_start; target_pc < target_end;  ) {
+        uintptr_t pc2 = x86_disasm_instruction( target_pc, buf, sizeof(buf), op );
+        fprintf( out, "%c%08X: %-20s %-40s", (target_pc == (uintptr_t)native_pc ? '*' : ' '),
+                      (unsigned int)target_pc, op, buf );
+        
+        if( source_recov_table < source_recov_end && 
+            target_pc >= (target_start + source_recov_table->xlat_offset) ) {
+            source_recov_table++;
+            if( source_end < (source_start + (source_recov_table->sh4_icount)*2) )
+                source_end = source_start + (source_recov_table->sh4_icount)*2;
+        }
+
+        if( source_pc < source_end ) {
+            uint32_t source_pc2 = sh4_disasm_instruction( source_pc, buf, sizeof(buf), op );
+            fprintf( out, " %08X: %s  %s\n", source_pc, op, buf );
+            source_pc = source_pc2;
+        } else {
+            fprintf( out, "\n" );
+        }
+        
+        target_pc = pc2;
+    }
+    
+    while( source_pc < source_end ) {
+        uint32_t source_pc2 = sh4_disasm_instruction( source_pc, buf, sizeof(buf), op );
+        fprintf( out, "%*c %08X: %s  %s\n", 72,' ', source_pc, op, buf );
+        source_pc = source_pc2;
+    }
+}
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 static void sh4_x86_add_backpatch( uint8_t *fixup_addr, uint32_t fixup_pc, uint32_t exc_code )
 {
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -1697,6 +1767,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >          uint32_t *patch = ((uint32_t *)xlat_output)-1;
            int save_tstate = sh4_x86.tstate;
            sh4_translate_instruction(pc+2);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+            sh4_x86.in_delay_slot = DELAY_PC; /* Cleared by sh4_translate_instruction */
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >        exit_block_rel( target, pc+4 );
            
            // not taken
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -1834,6 +1905,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
            int save_tstate = sh4_x86.tstate;
            sh4_translate_instruction(pc+2);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+            sh4_x86.in_delay_slot = DELAY_PC; /* Cleared by sh4_translate_instruction */
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >        exit_block_rel( disp + pc + 4, pc+4 );
            // not taken
            *patch = (xlat_output - ((uint8_t *)patch)) - 4;
</pre></div>
<hr /><a name="file12" /><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>testsh4x86.c</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/test/testsh4x86.c
+++ lxdream/src/test/testsh4x86.c
@@ -83,6 +83,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > int sh4_get_breakpoint( uint32_t pc ) { return 0; }
 void sh4_finalize_instruction() { }
 void sh4_core_exit( int exit_code ){}
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void sh4_crashdump() {}
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void event_execute() {}
 void TMU_run_slice( uint32_t nanos ) {}
 void CCN_set_cache_control( int val ) { }
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -114,6 +115,8 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void MMU_ldtlb() { }
 struct sh4_icache_struct sh4_icache;
 struct mem_region_fn mem_region_unmapped;
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+const struct cpu_desc_struct sh4_cpu_desc;
+sh4addr_t FASTCALL mmu_vma_to_phys_disasm( sh4vma_t vma ) { return vma; }
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 void usage()
 {
</pre></div>
<hr /><a name="file13" /><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</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>util.c</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/util.c
+++ lxdream/src/util.c
@@ -42,6 +42,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     char buf[128];
 
     fprintf( stderr, "--- Aborting with signal %d ---\n", signo );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    sh4_crashdump();
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     // Get gdb to print a nice backtrace for us
     snprintf( buf, 128, "gdb -batch -f --quiet --pid=%d -ex bt", getpid() );
     system(buf);
</pre></div>
<hr /><a name="file14" /><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/x86dasm</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>x86dasm.c</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/x86dasm/x86dasm.c
+++ lxdream/src/x86dasm/x86dasm.c
@@ -65,7 +65,7 @@
</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 x86_disasm_init(unsigned char *buf, uintptr_t vma, int buflen)
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void x86_disasm_init()
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > {
     init_disassemble_info( &x86_disasm_info, NULL, x86_disasm_output );
     x86_disasm_info.arch = bfd_arch_i386;
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -75,9 +75,9 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     x86_disasm_info.mach = bfd_mach_i386_i386_intel_syntax;
 #endif
     x86_disasm_info.endian = BFD_ENDIAN_LITTLE;
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-    x86_disasm_info.buffer = buf;
-    x86_disasm_info.buffer_vma = vma;
-    x86_disasm_info.buffer_length = buflen;
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+    x86_disasm_info.buffer = 0;
+    x86_disasm_info.buffer_vma = 0;
+    x86_disasm_info.buffer_length = -1;
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     x86_disasm_info.print_address_func = x86_print_address;
 }
 
</pre></div>
<hr /><a name="file15" /><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/x86dasm</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>x86dasm.h</b></big> <small id="info" style="color: #888888;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/x86dasm/x86dasm.h
+++ lxdream/src/x86dasm/x86dasm.h
@@ -29,6 +29,6 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 void x86_disasm_block( FILE *out, void *block, uint32_t len );
 void x86_set_symtab( x86_symbol *symtab, int num_symbols );
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void x86_disasm_init(unsigned char *buf, uintptr_t vma, int buflen);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void x86_disasm_init();
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > uintptr_t x86_disasm_instruction( uintptr_t pc, char *buf, int len, char *opcode );
 void x86_print_symbolic_operand( char *buf, int hex, unsigned int disp );
</pre></div>
<hr /><a name="file16" /><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;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/xlat/xltcache.c
+++ lxdream/src/xlat/xltcache.c
@@ -486,6 +486,44 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     assert( foundptr == 1 || tail == ptr );
 }
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+/**
+ * Sanity check that the given pointer is at least contained in one of cache
+ * regions, and has a sane-ish size. We don't do a full region walk atm.
+ */
+gboolean xlat_is_code_pointer( void *p )
+{
+    char *region;
+    uintptr_t region_size;
+
+    xlat_cache_block_t block = XLAT_BLOCK_FOR_CODE(p);
+    if( (((char *)block) - (char *)xlat_new_cache) < XLAT_NEW_CACHE_SIZE ) {
+         /* Pointer is in new cache */
+        region = (char *)xlat_new_cache;
+        region_size = XLAT_NEW_CACHE_SIZE;
+    }
+#ifdef XLAT_GENERATIONAL_CACHE
+    else if( (((char *)block) - (char *)xlat_temp_cache) < XLAT_TEMP_CACHE_SIZE ) {
+         /* Pointer is in temp cache */
+        region = (char *)xlat_temp_cache;
+        region_size = XLAT_TEMP_CACHE_SIZE;
+    } else if( (((char *)block) - (char *)xlat_odl_cache) < XLAT_OLD_CACHE_SIZE ) {
+        /* Pointer is in old cache */
+        region = (char *)xlat_old_cache;
+        region_size = XLAT_OLD_CACHE_SIZE;
+    }
+#endif
+    else {
+        /* Not a valid cache pointer */
+        return FALSE;
+    }
+
+    /* Make sure the whole block is in the region */
+    if( (((char *)p) - region) >= region_size ||
+        (((char *)(NEXT(block))) - region) >= region_size )
+        return FALSE;
+    return TRUE;
+}
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void xlat_check_integrity( )
 {
     xlat_check_cache_integrity( xlat_new_cache, xlat_new_cache_ptr, XLAT_NEW_CACHE_SIZE );
</pre></div>
<hr /><a name="file17" /><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;" >71e28626b358 -> 186558374345</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/xlat/xltcache.h
+++ lxdream/src/xlat/xltcache.h
@@ -51,7 +51,8 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 #define XLAT_BLOCK_FOR_CODE(code) (((xlat_cache_block_t)code)-1)
 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-#define XLAT_BLOCK_MODE(code) (XLAT_BLOCK_FOR_CODE(code)->xlat_sh4_mode)<span id="removedchars" style="background-color:#ff9999;font-weight:bolder;" > </span>
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+#define XLAT_BLOCK_MODE(code) (XLAT_BLOCK_FOR_CODE(code)->xlat_sh4_mode)
+#define XLAT_RECOVERY_TABLE(code) ((xlat_recovery_record_t)(((char *)code) + XLAT_BLOCK_FOR_CODE(code)->recover_table_offset))
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
 /**
  * Initialize the translation cache
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -169,6 +170,12 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void xlat_flush_cache();
 
 /**
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+ * Test if the given pointer is within the translation cache, and (is likely)
+ * the start of a code block
+ */
+gboolean xlat_is_code_pointer( void *p );
+
+/**
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >  * Check the internal integrity of the cache
  */
 void xlat_check_integrity();
</pre></div>
<center><small>Chaos Theory</small></center>
</div></body></html>