From f8d8618af171c30e9bf0e7d5cdddace6921a9e08 Mon Sep 17 00:00:00 2001 From: merry Date: Tue, 6 Dec 2022 14:53:14 +0000 Subject: [PATCH] emit_arm64: Passthrough pagetable information --- src/dynarmic/backend/arm64/a32_address_space.cpp | 8 ++++++++ src/dynarmic/backend/arm64/a64_address_space.cpp | 8 ++++++++ src/dynarmic/backend/arm64/emit_arm64.h | 9 +++++++++ 3 files changed, 25 insertions(+) diff --git a/src/dynarmic/backend/arm64/a32_address_space.cpp b/src/dynarmic/backend/arm64/a32_address_space.cpp index 1957af15..4ef74ca7 100644 --- a/src/dynarmic/backend/arm64/a32_address_space.cpp +++ b/src/dynarmic/backend/arm64/a32_address_space.cpp @@ -276,6 +276,14 @@ EmitConfig A32AddressSpace::GetEmitConfig() { .tpidrro_el0{}, .tpidr_el0{}, + .page_table_pointer = mcl::bit_cast(conf.page_table), + .page_table_address_space_bits = 32, + .page_table_pointer_mask_bits = conf.page_table_pointer_mask_bits, + .silently_mirror_page_table = true, + .absolute_offset_page_table = conf.absolute_offset_page_table, + .detect_misaligned_access_via_page_table = conf.detect_misaligned_access_via_page_table, + .only_detect_misalignment_via_page_table_on_page_boundary = conf.only_detect_misalignment_via_page_table_on_page_boundary, + .wall_clock_cntpct = conf.wall_clock_cntpct, .enable_cycle_counting = conf.enable_cycle_counting, diff --git a/src/dynarmic/backend/arm64/a64_address_space.cpp b/src/dynarmic/backend/arm64/a64_address_space.cpp index d21f6090..3b8b6668 100644 --- a/src/dynarmic/backend/arm64/a64_address_space.cpp +++ b/src/dynarmic/backend/arm64/a64_address_space.cpp @@ -396,6 +396,14 @@ EmitConfig A64AddressSpace::GetEmitConfig() { .tpidrro_el0 = conf.tpidrro_el0, .tpidr_el0 = conf.tpidr_el0, + .page_table_pointer = mcl::bit_cast(conf.page_table), + .page_table_address_space_bits = conf.page_table_address_space_bits, + .page_table_pointer_mask_bits = conf.page_table_pointer_mask_bits, + .silently_mirror_page_table = conf.silently_mirror_page_table, + .absolute_offset_page_table = conf.absolute_offset_page_table, + .detect_misaligned_access_via_page_table = conf.detect_misaligned_access_via_page_table, + .only_detect_misalignment_via_page_table_on_page_boundary = conf.only_detect_misalignment_via_page_table_on_page_boundary, + .wall_clock_cntpct = conf.wall_clock_cntpct, .enable_cycle_counting = conf.enable_cycle_counting, diff --git a/src/dynarmic/backend/arm64/emit_arm64.h b/src/dynarmic/backend/arm64/emit_arm64.h index 7b5eebec..13a0b317 100644 --- a/src/dynarmic/backend/arm64/emit_arm64.h +++ b/src/dynarmic/backend/arm64/emit_arm64.h @@ -104,6 +104,15 @@ struct EmitConfig { const u64* tpidrro_el0; u64* tpidr_el0; + // Page table + u64 page_table_pointer; + size_t page_table_address_space_bits; + int page_table_pointer_mask_bits; + bool silently_mirror_page_table; + bool absolute_offset_page_table; + u8 detect_misaligned_access_via_page_table; + bool only_detect_misalignment_via_page_table_on_page_boundary; + // Timing bool wall_clock_cntpct; bool enable_cycle_counting;