about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_0f.c15
-rw-r--r--src/emu/x64run0f.c10
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 */