about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-05-28 11:00:44 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-05-28 11:00:44 +0200
commit085239ef4a5d76ae4cb77af5d4bb9d3f743bc6f8 (patch)
tree89d0ae48383d437f21907d1fd4644bebe2a6484b /src
parentdf61d561f6aaa5842b223bc88fbb24f4719c61f0 (diff)
downloadbox64-085239ef4a5d76ae4cb77af5d4bb9d3f743bc6f8.tar.gz
box64-085239ef4a5d76ae4cb77af5d4bb9d3f743bc6f8.zip
Added 0F 0D /1 opcode ([DYNAREC] too)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/arm64_emitter.h2
-rwxr-xr-xsrc/dynarec/dynarec_arm64_0f.c13
-rw-r--r--src/emu/x64run0f.c12
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);