diff options
| author | 2022-08-12 14:57:32 -0400 | |
|---|---|---|
| committer | 2022-08-12 14:57:32 -0400 | |
| commit | 5a6a26449cf5f3e0428b49a5f55352c47fb09f91 (patch) | |
| tree | 220843bb6741439ee99de0c30d2b54eb24041af0 | |
| parent | Merge pull request #8647 from Docteh/default_dark (diff) | |
| parent | arm_dynarmic: Fix nullptr fastmem arenas (diff) | |
| download | yuzu-5a6a26449cf5f3e0428b49a5f55352c47fb09f91.tar.gz yuzu-5a6a26449cf5f3e0428b49a5f55352c47fb09f91.tar.xz yuzu-5a6a26449cf5f3e0428b49a5f55352c47fb09f91.zip | |
Merge pull request #8745 from merryhime/null-fastmem-arena
arm_dynarmic: Fix nullptr fastmem arenas
Diffstat (limited to '')
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.cpp | 15 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 3 |
2 files changed, 11 insertions, 7 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index 1638bc41d..3b8b43994 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp | |||
| @@ -195,14 +195,16 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable* | |||
| 195 | if (page_table) { | 195 | if (page_table) { |
| 196 | config.page_table = reinterpret_cast<std::array<std::uint8_t*, NUM_PAGE_TABLE_ENTRIES>*>( | 196 | config.page_table = reinterpret_cast<std::array<std::uint8_t*, NUM_PAGE_TABLE_ENTRIES>*>( |
| 197 | page_table->pointers.data()); | 197 | page_table->pointers.data()); |
| 198 | config.absolute_offset_page_table = true; | ||
| 199 | config.page_table_pointer_mask_bits = Common::PageTable::ATTRIBUTE_BITS; | ||
| 200 | config.detect_misaligned_access_via_page_table = 16 | 32 | 64 | 128; | ||
| 201 | config.only_detect_misalignment_via_page_table_on_page_boundary = true; | ||
| 202 | |||
| 198 | config.fastmem_pointer = page_table->fastmem_arena; | 203 | config.fastmem_pointer = page_table->fastmem_arena; |
| 204 | |||
| 205 | config.fastmem_exclusive_access = config.fastmem_pointer != nullptr; | ||
| 206 | config.recompile_on_exclusive_fastmem_failure = true; | ||
| 199 | } | 207 | } |
| 200 | config.absolute_offset_page_table = true; | ||
| 201 | config.page_table_pointer_mask_bits = Common::PageTable::ATTRIBUTE_BITS; | ||
| 202 | config.detect_misaligned_access_via_page_table = 16 | 32 | 64 | 128; | ||
| 203 | config.only_detect_misalignment_via_page_table_on_page_boundary = true; | ||
| 204 | config.fastmem_exclusive_access = true; | ||
| 205 | config.recompile_on_exclusive_fastmem_failure = true; | ||
| 206 | 208 | ||
| 207 | // Multi-process state | 209 | // Multi-process state |
| 208 | config.processor_id = core_index; | 210 | config.processor_id = core_index; |
| @@ -254,6 +256,7 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable* | |||
| 254 | } | 256 | } |
| 255 | if (!Settings::values.cpuopt_fastmem) { | 257 | if (!Settings::values.cpuopt_fastmem) { |
| 256 | config.fastmem_pointer = nullptr; | 258 | config.fastmem_pointer = nullptr; |
| 259 | config.fastmem_exclusive_access = false; | ||
| 257 | } | 260 | } |
| 258 | if (!Settings::values.cpuopt_fastmem_exclusives) { | 261 | if (!Settings::values.cpuopt_fastmem_exclusives) { |
| 259 | config.fastmem_exclusive_access = false; | 262 | config.fastmem_exclusive_access = false; |
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index 921a5a734..1d46f6d40 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp | |||
| @@ -250,7 +250,7 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable* | |||
| 250 | config.fastmem_address_space_bits = address_space_bits; | 250 | config.fastmem_address_space_bits = address_space_bits; |
| 251 | config.silently_mirror_fastmem = false; | 251 | config.silently_mirror_fastmem = false; |
| 252 | 252 | ||
| 253 | config.fastmem_exclusive_access = true; | 253 | config.fastmem_exclusive_access = config.fastmem_pointer != nullptr; |
| 254 | config.recompile_on_exclusive_fastmem_failure = true; | 254 | config.recompile_on_exclusive_fastmem_failure = true; |
| 255 | } | 255 | } |
| 256 | 256 | ||
| @@ -314,6 +314,7 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable* | |||
| 314 | } | 314 | } |
| 315 | if (!Settings::values.cpuopt_fastmem) { | 315 | if (!Settings::values.cpuopt_fastmem) { |
| 316 | config.fastmem_pointer = nullptr; | 316 | config.fastmem_pointer = nullptr; |
| 317 | config.fastmem_exclusive_access = false; | ||
| 317 | } | 318 | } |
| 318 | if (!Settings::values.cpuopt_fastmem_exclusives) { | 319 | if (!Settings::values.cpuopt_fastmem_exclusives) { |
| 319 | config.fastmem_exclusive_access = false; | 320 | config.fastmem_exclusive_access = false; |