diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-06 11:31:47 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-06 11:31:47 +0100 |
| commit | ef46db650e1b9294a964aae62e1f4426756cd1c1 (patch) | |
| tree | 85422cdf2f10fec22d4c450803e081bc052550a6 /src | |
| parent | 258c62ddde06ed18167ff1f4a89eee84722bc15c (diff) | |
| download | box64-ef46db650e1b9294a964aae62e1f4426756cd1c1.tar.gz box64-ef46db650e1b9294a964aae62e1f4426756cd1c1.zip | |
Added (F2/F3) REX AB (REP) STOSD opcode
Diffstat (limited to 'src')
| -rwxr-xr-x | src/emu/x64run.c | 22 |
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 */ |