about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-05-21 17:06:42 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-05-21 17:06:42 +0200
commit77f7c1278b8235aec0ea28ad61bf4d91b1fa0dc8 (patch)
tree2b9c403195f9110da0662a6e8eb3bf46614514d6
parent1c7a7c98954bfd88c250a879bc8230333a0f4f8f (diff)
downloadbox64-77f7c1278b8235aec0ea28ad61bf4d91b1fa0dc8.tar.gz
box64-77f7c1278b8235aec0ea28ad61bf4d91b1fa0dc8.zip
[INTERP] Added unaligned path for F0 FF /1 32bits opcode
-rw-r--r--src/emu/x64runf0.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/emu/x64runf0.c b/src/emu/x64runf0.c
index 26221789..d86dfce3 100644
--- a/src/emu/x64runf0.c
+++ b/src/emu/x64runf0.c
@@ -1311,9 +1311,20 @@ uintptr_t RunF0(x64emu_t *emu, rex_t rex, uintptr_t addr)
                                 tmp64u = native_lock_read_dd(ED);

                             } while(native_lock_write_dd(ED, dec64(emu, tmp64u)));

                     else {

-                        do {

-                            tmp32u = native_lock_read_d(ED);

-                        } while(native_lock_write_d(ED, dec32(emu, tmp32u)));

+                        if((uintptr_t)ED&3) { 

+                            //meh.

+                            do {

+                                tmp32u = ED->dword[0];

+                                tmp32u &=~0xff;

+                                tmp32u |= native_lock_read_b(ED);

+                                tmp32u = dec32(emu, tmp32u);

+                            } while(native_lock_write_b(ED, tmp32u&0xff));

+                            ED->dword[0] = tmp32u;

+                        } else {

+                            do {

+                                tmp32u = native_lock_read_d(ED);

+                            } while(native_lock_write_d(ED, dec32(emu, tmp32u)));

+                        }

                         if(MODREG) ED->dword[1] = 0;

                     }

 #else