diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.cpp | 5 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 5 |
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 | ||
| 307 | void ARM_Dynarmic_32::PageTableChanged(Common::PageTable& page_table, | 307 | void 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 | ||
| 349 | void ARM_Dynarmic_64::PageTableChanged(Common::PageTable& page_table, | 349 | void 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 | ||