about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/emu/x64run.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index b3ccd541..10ca8b10 100755
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -167,6 +167,35 @@ x64emurun:
         case 0x4F:      /* Another REX */
             --R_RIP;
             break;
+        case 0x54:                      /* PUSH ESP */
+            if(rex.b)
+                Push(emu, R_R12);
+            else {
+                tmp64u = R_RSP;
+                Push(emu, tmp64u);
+            }
+            break;
+        case 0x50:
+        case 0x51:
+        case 0x52:
+        case 0x53:
+        case 0x55:
+        case 0x56:
+        case 0x57:                      /* PUSH Reg */
+            tmp8u = (opcode&7)+(rex.b<<3);
+            Push(emu, emu->regs[tmp8u].q[0]);
+            break;
+        case 0x58:
+        case 0x59:
+        case 0x5A:
+        case 0x5B:
+        case 0x5C:                      /* POP ESP */
+        case 0x5D:
+        case 0x5E:
+        case 0x5F:                      /* POP Reg */
+            tmp8u = (opcode&7)+(rex.b<<3);
+            emu->regs[tmp8u].q[0] = Pop(emu);
+            break;
 
         case 0x89:                    /* MOV Ed,Gd */
             nextop = F8;