summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_32.cpp5
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_64.cpp5
2 files changed, 10 insertions, 0 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
index ec4407b6e..53d78de32 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
@@ -306,13 +306,18 @@ void ARM_Dynarmic_32::ClearExclusiveState() {
306 306
307void ARM_Dynarmic_32::PageTableChanged(Common::PageTable& page_table, 307void ARM_Dynarmic_32::PageTableChanged(Common::PageTable& page_table,
308 std::size_t new_address_space_size_in_bits) { 308 std::size_t new_address_space_size_in_bits) {
309 ThreadContext32 ctx{};
310 SaveContext(ctx);
311
309 auto key = std::make_pair(&page_table, new_address_space_size_in_bits); 312 auto key = std::make_pair(&page_table, new_address_space_size_in_bits);
310 auto iter = jit_cache.find(key); 313 auto iter = jit_cache.find(key);
311 if (iter != jit_cache.end()) { 314 if (iter != jit_cache.end()) {
312 jit = iter->second; 315 jit = iter->second;
316 LoadContext(ctx);
313 return; 317 return;
314 } 318 }
315 jit = MakeJit(page_table, new_address_space_size_in_bits); 319 jit = MakeJit(page_table, new_address_space_size_in_bits);
320 LoadContext(ctx);
316 jit_cache.emplace(key, jit); 321 jit_cache.emplace(key, jit);
317} 322}
318 323
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
index ae5566ab8..b36b7d918 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
@@ -348,13 +348,18 @@ void ARM_Dynarmic_64::ClearExclusiveState() {
348 348
349void ARM_Dynarmic_64::PageTableChanged(Common::PageTable& page_table, 349void ARM_Dynarmic_64::PageTableChanged(Common::PageTable& page_table,
350 std::size_t new_address_space_size_in_bits) { 350 std::size_t new_address_space_size_in_bits) {
351 ThreadContext64 ctx{};
352 SaveContext(ctx);
353
351 auto key = std::make_pair(&page_table, new_address_space_size_in_bits); 354 auto key = std::make_pair(&page_table, new_address_space_size_in_bits);
352 auto iter = jit_cache.find(key); 355 auto iter = jit_cache.find(key);
353 if (iter != jit_cache.end()) { 356 if (iter != jit_cache.end()) {
354 jit = iter->second; 357 jit = iter->second;
358 LoadContext(ctx);
355 return; 359 return;
356 } 360 }
357 jit = MakeJit(page_table, new_address_space_size_in_bits); 361 jit = MakeJit(page_table, new_address_space_size_in_bits);
362 LoadContext(ctx);
358 jit_cache.emplace(key, jit); 363 jit_cache.emplace(key, jit);
359} 364}
360 365