diff options
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index 4e73cc03a..56836bd05 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp | |||
| @@ -86,6 +86,26 @@ public: | |||
| 86 | num_instructions, MemoryReadCode(pc)); | 86 | num_instructions, MemoryReadCode(pc)); |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | void InstructionCacheOperationRaised(Dynarmic::A64::InstructionCacheOperation op, | ||
| 90 | VAddr value) override { | ||
| 91 | switch (op) { | ||
| 92 | case Dynarmic::A64::InstructionCacheOperation::InvalidateByVAToPoU: { | ||
| 93 | static constexpr u64 ICACHE_LINE_SIZE = 64; | ||
| 94 | |||
| 95 | const u64 cache_line_start = value & ~(ICACHE_LINE_SIZE - 1); | ||
| 96 | parent.InvalidateCacheRange(cache_line_start, ICACHE_LINE_SIZE); | ||
| 97 | break; | ||
| 98 | } | ||
| 99 | case Dynarmic::A64::InstructionCacheOperation::InvalidateAllToPoU: | ||
| 100 | parent.ClearInstructionCache(); | ||
| 101 | break; | ||
| 102 | case Dynarmic::A64::InstructionCacheOperation::InvalidateAllToPoUInnerSharable: | ||
| 103 | default: | ||
| 104 | LOG_DEBUG(Core_ARM, "Unprocesseed instruction cache operation: {}", op); | ||
| 105 | break; | ||
| 106 | } | ||
| 107 | } | ||
| 108 | |||
| 89 | void ExceptionRaised(u64 pc, Dynarmic::A64::Exception exception) override { | 109 | void ExceptionRaised(u64 pc, Dynarmic::A64::Exception exception) override { |
| 90 | switch (exception) { | 110 | switch (exception) { |
| 91 | case Dynarmic::A64::Exception::WaitForInterrupt: | 111 | case Dynarmic::A64::Exception::WaitForInterrupt: |