diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2023-06-24 01:52:28 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-23 19:52:28 +0200 |
| commit | aca28bcb7903b0f2329e99c065427018acbaca46 (patch) | |
| tree | 89b981f573b733f77e7160ed98eaa4fac23a735f /src | |
| parent | 410447b340b34c18a8ddd1da858c7f2b96c42db1 (diff) | |
| download | box64-aca28bcb7903b0f2329e99c065427018acbaca46.tar.gz box64-aca28bcb7903b0f2329e99c065427018acbaca46.zip | |
[INTERP] Added more opcodes (#852)
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64run64.c | 19 | ||||
| -rw-r--r-- | src/emu/x64run6664.c | 16 |
2 files changed, 29 insertions, 6 deletions
diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c index ef3491e2..bf57954c 100644 --- a/src/emu/x64run64.c +++ b/src/emu/x64run64.c @@ -123,6 +123,12 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) case 0x10: switch(rep) { + case 0: /* MOVUPS Gx, FS:Ex */ + nextop = F8; + GETEX_OFFS(0, tlsdata); + GETGX; + GX->u128 = EX->u128; + break; case 1: /* MOVSD Gx, FS:Ex */ nextop = F8; GETEX_OFFS(0, tlsdata); @@ -171,7 +177,18 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) return 0; } break; - + case 0x28: + switch(rep) { + case 0: /* MOVAPS Gx, FS:Ex */ + nextop = F8; + GETEX_OFFS(0, tlsdata); + GETGX; + GX->u128 = EX->u128; + break; + default: + return 0; + } + break; case 0x29: /* MOVAPS FS:Ex,Gx */ switch(rep) { case 0: diff --git a/src/emu/x64run6664.c b/src/emu/x64run6664.c index c9cb9de0..48a3be99 100644 --- a/src/emu/x64run6664.c +++ b/src/emu/x64run6664.c @@ -92,7 +92,7 @@ uintptr_t Run6664(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) } break; - case 0x89: /* MOV Ew,Gw */ + case 0x89: /* MOV FS:Ew,Gw */ nextop = F8; GETEW_OFFS(0, tlsdata); GETGW; @@ -101,8 +101,7 @@ uintptr_t Run6664(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) else EW->word[0] = GW->word[0]; break; - - case 0x8B: /* MOV Gd,Ed */ + case 0x8B: /* MOV Gw,FS:Ew */ nextop = F8; GETEW_OFFS(0, tlsdata); GETGW; @@ -111,9 +110,16 @@ uintptr_t Run6664(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) else GW->word[0] = EW->word[0]; break; - + case 0xC7: /* MOV FS:Ew,Iw */ + nextop = F8; + GETEW_OFFS(2, tlsdata); + if(rex.w) + EW->q[0] = F16S; + else + EW->word[0] = F16; + break; default: return 0; } return addr; -} \ No newline at end of file +} |