about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-04-17 10:36:52 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-04-17 10:36:52 +0200
commit74b99b52ee801bd91676897043d8a52040bc4fec (patch)
tree864f81e55babf077768fdafe003ed4e9a389c1b6
parentc7b573dcffaf1074ac382f8b98b6c3a1d5bb2573 (diff)
downloadbox64-74b99b52ee801bd91676897043d8a52040bc4fec.tar.gz
box64-74b99b52ee801bd91676897043d8a52040bc4fec.zip
[DYNAREC] Added 0F AE /7 opcode
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_0f.c9
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_functions.c5
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_functions.h1
3 files changed, 15 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c
index 733eb5dd..23ef668f 100755
--- a/src/dynarec/arm64/dynarec_arm64_0f.c
+++ b/src/dynarec/arm64/dynarec_arm64_0f.c
@@ -1225,6 +1225,15 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                             STRw_U12(x4, ed, fixedaddress);

                         }

                         break;

+                    case 7:

+                        INST_NAME("CLFLUSH Ed");

+                        MESSAGE(LOG_DUMP, "Need Optimization?\n");

+                        GETED(0);

+                        if(ed!=x1) {

+                            MOVx_REG(x1, ed);

+                        }

+                        CALL_(arm_clflush, -1, 0);

+                        break;

                     default:

                         DEFAULT;

                 }

diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c
index 900e2b7a..2ac2cc34 100755
--- a/src/dynarec/arm64/dynarec_arm64_functions.c
+++ b/src/dynarec/arm64/dynarec_arm64_functions.c
@@ -309,6 +309,11 @@ void arm_aese(x64emu_t* emu, int xmm)
     arm_aesmc(emu, xmm);
 }
 
+void arm_clflush(x64emu_t* emu, void* p)
+{
+    cleanDBFromAddressRange((uintptr_t)p, 8, 0);
+}
+
 
 #define XMM0    0
 #define XMM8    16
diff --git a/src/dynarec/arm64/dynarec_arm64_functions.h b/src/dynarec/arm64/dynarec_arm64_functions.h
index bf6c270f..55d5c697 100755
--- a/src/dynarec/arm64/dynarec_arm64_functions.h
+++ b/src/dynarec/arm64/dynarec_arm64_functions.h
@@ -35,6 +35,7 @@ void arm_aesdlast(x64emu_t* emu, int xmm);
 void arm_aeselast(x64emu_t* emu, int xmm);
 void arm_aesimc(x64emu_t* emu, int xmm);
 
+void arm_clflush(x64emu_t* emu, void* p);
 
 void arm_ud(x64emu_t* emu);