diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-03-23 12:34:37 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-03-23 13:35:21 +0100 |
| commit | 2accb00adc4a6d0c87737d7ca0c3b3fb9f661825 (patch) | |
| tree | bd08b0bb846b4735a78f5cf0040a0573a7714d14 /src/emu | |
| parent | 65c672fa1c70e62562a219cc2e0e53bba67ba627 (diff) | |
| download | box64-2accb00adc4a6d0c87737d7ca0c3b3fb9f661825.tar.gz box64-2accb00adc4a6d0c87737d7ca0c3b3fb9f661825.zip | |
Added/Fixed 66 0F 3A 14/15/16 opcodes ([ARM64_DYNAREC] too)
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/x64run660f.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c index 8bed5cbf..e06c3fb5 100644 --- a/src/emu/x64run660f.c +++ b/src/emu/x64run660f.c @@ -767,14 +767,26 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr) } break; - case 0x14: // PEXTRB EB, GX, u8 + case 0x14: // PEXTRB ED, GX, u8 nextop = F8; - GETEB(1); + GETED(1); GETGX; tmp8u = F8; - EB->byte[0] = GX->ub[tmp8u&0x0f]; + if(MODREG) + ED->q[0] = GX->ub[tmp8u&0x0f]; + else + ED->byte[0] = GX->ub[tmp8u&0x0f]; + break; + case 0x15: // PEXTRW Ew,Gx,Ib + nextop = F8; + GETED(1); + GETGX; + tmp8u = F8; + if(MODREG) + ED->q[0] = GX->uw[tmp8u&7]; // 16bits extract, 0 extended + else + ED->word[0] = GX->uw[tmp8u&7]; break; - case 0x16: // PEXTRD/Q ED, GX, u8 nextop = F8; GETED(1); @@ -783,7 +795,10 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr) if(rex.w) { ED->q[0] = GX->q[tmp8u&1]; } else { - ED->q[0] = GX->ud[tmp8u&3]; + if(MODREG) + ED->q[0] = GX->ud[tmp8u&3]; + else + ED->dword[0] = GX->ud[tmp8u&3]; } break; case 0x17: // EXTRACTPS ED, GX, u8 |