about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-06 11:31:47 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-06 11:31:47 +0100
commitef46db650e1b9294a964aae62e1f4426756cd1c1 (patch)
tree85422cdf2f10fec22d4c450803e081bc052550a6 /src
parent258c62ddde06ed18167ff1f4a89eee84722bc15c (diff)
downloadbox64-ef46db650e1b9294a964aae62e1f4426756cd1c1.tar.gz
box64-ef46db650e1b9294a964aae62e1f4426756cd1c1.zip
Added (F2/F3) REX AB (REP) STOSD opcode
Diffstat (limited to 'src')
-rwxr-xr-xsrc/emu/x64run.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index a15fec13..03d40a1d 100755
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -427,6 +427,28 @@ x64emurun:
                 test32(emu, R_EAX, F32);
             break;
 
+        case 0xAB:                      /* (REP) STOSD */
+            if(rex.w)
+                tmp8s = ACCESS_FLAG(F_DF)?-4:+4;
+            else
+                tmp8s = ACCESS_FLAG(F_DF)?-8:+8;
+            tmp64u = (rep)?R_RCX:1L;
+            if((rex.w))
+                while(tmp64u) {
+                    *(uint32_t*)R_RDI = R_EAX;
+                    R_EDI += tmp8s;
+                    --tmp64u;
+                }
+            else
+                while(tmp64u) {
+                    *(uint64_t*)R_RDI = R_RAX;
+                    R_EDI += tmp8s;
+                    --tmp64u;
+                }
+            if(rep)
+                R_RCX = tmp64u;
+            break;
+
         case 0xB8:                      /* MOV EAX,Id */
         case 0xB9:                      /* MOV ECX,Id */
         case 0xBA:                      /* MOV EDX,Id */