diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-05-28 11:00:44 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-05-28 11:00:44 +0200 |
| commit | 085239ef4a5d76ae4cb77af5d4bb9d3f743bc6f8 (patch) | |
| tree | 89d0ae48383d437f21907d1fd4644bebe2a6484b /src | |
| parent | df61d561f6aaa5842b223bc88fbb24f4719c61f0 (diff) | |
| download | box64-085239ef4a5d76ae4cb77af5d4bb9d3f743bc6f8.tar.gz box64-085239ef4a5d76ae4cb77af5d4bb9d3f743bc6f8.zip | |
Added 0F 0D /1 opcode ([DYNAREC] too)
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/arm64_emitter.h | 2 | ||||
| -rwxr-xr-x | src/dynarec/dynarec_arm64_0f.c | 13 | ||||
| -rw-r--r-- | src/emu/x64run0f.c | 12 |
3 files changed, 27 insertions, 0 deletions
diff --git a/src/dynarec/arm64_emitter.h b/src/dynarec/arm64_emitter.h index 3b0e1558..3d3fe8f6 100755 --- a/src/dynarec/arm64_emitter.h +++ b/src/dynarec/arm64_emitter.h @@ -346,6 +346,8 @@ #define PLD_L2_STREAM_U12(Rn, imm12) EMIT(PRFM_imm(((imm12)>>3)&0xfff, Rn, 0b00011)) #define PLD_L3_STREAM_U12(Rn, imm12) EMIT(PRFM_imm(((imm12)>>3)&0xfff, Rn, 0b00101)) +#define PST_L1_STREAM_U12(Rn, imm12) EMIT(PRFM_imm(((imm12)>>3)&0xfff, Rn, 0b01001)) + // BR and Branches #define BR_gen(Z, op, A, M, Rn, Rm) (0b1101011<<25 | (Z)<<24 | (op)<<21 | 0b11111<<16 | (A)<<11 | (M)<<10 | (Rn)<<5 | (Rm)) diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c index 3df73d30..2660fbbf 100755 --- a/src/dynarec/dynarec_arm64_0f.c +++ b/src/dynarec/dynarec_arm64_0f.c @@ -100,6 +100,19 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CALL(arm_ud, -1); break; + case 0x0D: + nextop = F8; + switch((nextop>>3)&7) { + case 1: + INST_NAME("PREFETCHW"); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0xfff, 7, rex, 0, 0); + PST_L1_STREAM_U12(ed, fixedaddress); + break; + default: //??? + DEFAULT; + } + break; + case 0x10: INST_NAME("MOVUPS Gx,Ex"); nextop = F8; diff --git a/src/emu/x64run0f.c b/src/emu/x64run0f.c index 0c7d53ba..7426a4af 100644 --- a/src/emu/x64run0f.c +++ b/src/emu/x64run0f.c @@ -53,6 +53,18 @@ int Run0F(x64emu_t *emu, rex_t rex) emit_signal(emu, SIGILL, (void*)R_RIP, 0); break; + case 0x0D: + nextop = F8; + GETED(0); + switch((nextop>>3)&7) { + case 1: //PREFETCHW + __builtin_prefetch((void*)ED, 1, 0); + break; + default: //??? + return 1; + } + break; + case 0x10: /* MOVUPS Gx,Ex */ nextop = F8; GETEX(0); |