Przeglądaj źródła

Merge pull request #8098 from merryhime/ic-ivau

dynarmic: Invalidate CPU cache on all cores
bunnei 4 lat temu
rodzic
commit
642913b0d1

+ 1 - 1
externals/dynarmic

@@ -1 +1 @@
-Subproject commit e1a266b9299be81cc0318c7e25b00388c342704f
+Subproject commit af2d50288fc537201014c4230bb55ab9018a7438

+ 4 - 2
src/core/arm/dynarmic/arm_dynarmic_64.cpp

@@ -93,17 +93,19 @@ public:
             static constexpr u64 ICACHE_LINE_SIZE = 64;
             static constexpr u64 ICACHE_LINE_SIZE = 64;
 
 
             const u64 cache_line_start = value & ~(ICACHE_LINE_SIZE - 1);
             const u64 cache_line_start = value & ~(ICACHE_LINE_SIZE - 1);
-            parent.InvalidateCacheRange(cache_line_start, ICACHE_LINE_SIZE);
+            parent.system.InvalidateCpuInstructionCacheRange(cache_line_start, ICACHE_LINE_SIZE);
             break;
             break;
         }
         }
         case Dynarmic::A64::InstructionCacheOperation::InvalidateAllToPoU:
         case Dynarmic::A64::InstructionCacheOperation::InvalidateAllToPoU:
-            parent.ClearInstructionCache();
+            parent.system.InvalidateCpuInstructionCaches();
             break;
             break;
         case Dynarmic::A64::InstructionCacheOperation::InvalidateAllToPoUInnerSharable:
         case Dynarmic::A64::InstructionCacheOperation::InvalidateAllToPoUInnerSharable:
         default:
         default:
             LOG_DEBUG(Core_ARM, "Unprocesseed instruction cache operation: {}", op);
             LOG_DEBUG(Core_ARM, "Unprocesseed instruction cache operation: {}", op);
             break;
             break;
         }
         }
+
+        parent.jit->HaltExecution();
     }
     }
 
 
     void ExceptionRaised(u64 pc, Dynarmic::A64::Exception exception) override {
     void ExceptionRaised(u64 pc, Dynarmic::A64::Exception exception) override {