about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-10-28 11:35:03 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-10-28 11:35:03 +0200
commitb669177c834219b154fe7cc4cdde085697e58c04 (patch)
tree3ce3cc043d757d795b22526e86a9323dd959027b /src
parent1678d2b97a5a89313e3dbc8ce3d772bf25e96859 (diff)
downloadbox64-b669177c834219b154fe7cc4cdde085697e58c04.tar.gz
box64-b669177c834219b154fe7cc4cdde085697e58c04.zip
Added 66 0F 7D opcode
Diffstat (limited to 'src')
-rw-r--r--src/emu/x64run660f.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c
index 7561fff2..a4fff7a7 100644
--- a/src/emu/x64run660f.c
+++ b/src/emu/x64run660f.c
@@ -1345,7 +1345,31 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr)
             #endif

         }

         break;

-

+    case 0x7D:  /* HSUBPD Gx, Ex */

+        nextop = F8;

+        GETEX(0);

+        GETGX;

+        #ifndef NOALIGN

+        is_nan = isnan(GX->d[0]) || isnan(GX->d[1]);

+        #endif

+        GX->d[0] -= GX->d[1];

+        #ifndef NOALIGN

+        if(!is_nan && isnan(GX->d[0]))

+            GX->d[0] = -NAN;

+        #endif

+        if(EX==GX) {

+            GX->d[1] = GX->d[0];

+        } else {

+            #ifndef NOALIGN

+            is_nan = isnan(EX->d[0]) || isnan(EX->d[1]);

+            #endif

+            GX->d[1] = EX->d[0] - EX->d[1];

+            #ifndef NOALIGN

+            if(!is_nan && isnan(GX->d[1]))

+                GX->d[1] = -NAN;

+            #endif

+        }

+        break;

     case 0x7E:                      /* MOVD Ed, Gx */

         nextop = F8;

         GETED(0);