diff options
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/x64run66.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c index 536583bc..17199c71 100644 --- a/src/emu/x64run66.c +++ b/src/emu/x64run66.c @@ -477,7 +477,20 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) *(uint16_t*)F64 = R_AX; } break; - + case 0xA4: /* (REP) MOVSB */ + tmp8s = ACCESS_FLAG(F_DF)?-1:+1; + tmp64u = (rep)?R_RCX:1L; + while(tmp64u) { + #ifndef TEST_INTERPRETER + *(uint8_t*)R_RDI = *(uint8_t*)R_RSI; + #endif + R_RDI += tmp8s; + R_RSI += tmp8s; + --tmp64u; + } + if(rep) + R_RCX = tmp64u; + break; case 0xA5: /* (REP) MOVSW */ tmp8s = ACCESS_FLAG(F_DF)?-1:+1; tmp64u = (rep)?R_RCX:1L; |