diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-10-19 15:23:26 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-10-19 15:23:26 +0200 |
| commit | 4e10cd654f4c9c0a106a9c5bfae0fe3d86d815e5 (patch) | |
| tree | 24e2aedd69c0a93261a0ba497080ca31270f1b29 | |
| parent | a12653a25dbd4c74a1cf07751d0b9fc340ade061 (diff) | |
| download | box64-4e10cd654f4c9c0a106a9c5bfae0fe3d86d815e5.tar.gz box64-4e10cd654f4c9c0a106a9c5bfae0fe3d86d815e5.zip | |
Improved 0F 0D opcode ([ARM64_DYNAREC] too) (FF7RI now have sound)
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_0f.c | 15 | ||||
| -rw-r--r-- | src/emu/x64run0f.c | 10 |
2 files changed, 21 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c index b3b2ac34..79c0c916 100644 --- a/src/dynarec/arm64/dynarec_arm64_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_0f.c @@ -190,13 +190,24 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0x0D: nextop = F8; switch((nextop>>3)&7) { + case 0: + INST_NAME("PREFETCH"); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0xfff, 7, rex, NULL, 0, 0); + PLD_L1_STREAM_U12(ed, fixedaddress); + break; case 1: INST_NAME("PREFETCHW"); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0xfff, 7, rex, NULL, 0, 0); PST_L1_STREAM_U12(ed, fixedaddress); break; - default: //??? - DEFAULT; + case 2: + INST_NAME("PREFETCHWT1"); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0xfff, 7, rex, NULL, 0, 0); + PST_L1_STREAM_U12(ed, fixedaddress); + break; + default: //NOP + FAKEED; + break; } break; case 0x0E: diff --git a/src/emu/x64run0f.c b/src/emu/x64run0f.c index d81a9d12..d1ae6ff8 100644 --- a/src/emu/x64run0f.c +++ b/src/emu/x64run0f.c @@ -178,11 +178,17 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) nextop = F8; GETED(0); switch((nextop>>3)&7) { + case 0: //PREFETCH? + __builtin_prefetch((void*)ED, 0, 0); + break; case 1: //PREFETCHW __builtin_prefetch((void*)ED, 1, 0); break; - default: //??? - return 0; + case 2: //PREFETCHWT1 + __builtin_prefetch((void*)ED, 1, 0); + break; + default: //NOP + break; } break; case 0x0E: /* FEMMS */ |