about summary refs log tree commit diff stats
path: root/src/emu/x87emu_private.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-06-04 16:55:30 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-06-04 16:55:30 +0200
commita71e81c8423e8900893f439706e7ac4eefb4842b (patch)
tree0c370850cc0bb8d2a11208086166560abb65c55e /src/emu/x87emu_private.c
parentadd55f3cec4e1585d18b44817d40b566c3f88fc7 (diff)
downloadbox64-a71e81c8423e8900893f439706e7ac4eefb4842b.tar.gz
box64-a71e81c8423e8900893f439706e7ac4eefb4842b.zip
[DYNAREC] Fixed DD C0..C7 FFREE opcode
Diffstat (limited to 'src/emu/x87emu_private.c')
-rwxr-xr-xsrc/emu/x87emu_private.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/emu/x87emu_private.c b/src/emu/x87emu_private.c
index cd35c116..0393ac01 100755
--- a/src/emu/x87emu_private.c
+++ b/src/emu/x87emu_private.c
@@ -9,6 +9,16 @@
 #include "x87emu_private.h"
 //#include "x64run_private.h"
 
+void fpu_do_free(x64emu_t* emu, int i)
+{
+    emu->p_regs[(emu->top+i)&7].tag = 0b11;    // empty
+    // check if all empty
+    for(int j=0; j<8; ++j)
+        if(emu->p_regs[j].tag != 0b11)
+            return;
+    emu->fpu_stack = 0;
+}
+
 void reset_fpu(x64emu_t* emu)
 {
     memset(emu->mmx87, 0, sizeof(emu->mmx87));