summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
m---------externals/dynarmic0
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.cpp20
2 files changed, 18 insertions, 2 deletions
diff --git a/externals/dynarmic b/externals/dynarmic
Subproject e585e1d49ed65c31edd567510e00508d42decb1 Subproject 6b4c6b06a94290690d2132adfa45a8087958c2c
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp
index ab10b8a34..e7f6bf8c2 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic.cpp
@@ -67,8 +67,17 @@ public:
67 } 67 }
68 68
69 void ExceptionRaised(u64 pc, Dynarmic::A64::Exception exception) override { 69 void ExceptionRaised(u64 pc, Dynarmic::A64::Exception exception) override {
70 ASSERT_MSG(false, "ExceptionRaised(exception = %zu, pc = %" PRIx64 ")", 70 switch (exception) {
71 static_cast<size_t>(exception), pc); 71 case Dynarmic::A64::Exception::WaitForInterrupt:
72 case Dynarmic::A64::Exception::WaitForEvent:
73 case Dynarmic::A64::Exception::SendEvent:
74 case Dynarmic::A64::Exception::SendEventLocal:
75 case Dynarmic::A64::Exception::Yield:
76 return;
77 default:
78 ASSERT_MSG(false, "ExceptionRaised(exception = %zu, pc = %" PRIx64 ")",
79 static_cast<size_t>(exception), pc);
80 }
72 } 81 }
73 82
74 void CallSVC(u32 swi) override { 83 void CallSVC(u32 swi) override {
@@ -85,11 +94,15 @@ public:
85 u64 GetTicksRemaining() override { 94 u64 GetTicksRemaining() override {
86 return ticks_remaining; 95 return ticks_remaining;
87 } 96 }
97 u64 GetCNTPCT() override {
98 return CoreTiming::GetTicks();
99 }
88 100
89 ARM_Dynarmic& parent; 101 ARM_Dynarmic& parent;
90 size_t ticks_remaining = 0; 102 size_t ticks_remaining = 0;
91 size_t num_interpreted_instructions = 0; 103 size_t num_interpreted_instructions = 0;
92 u64 tpidrro_el0 = 0; 104 u64 tpidrro_el0 = 0;
105 u64 tpidr_el0 = 0;
93}; 106};
94 107
95std::unique_ptr<Dynarmic::A64::Jit> MakeJit(const std::unique_ptr<ARM_Dynarmic_Callbacks>& cb) { 108std::unique_ptr<Dynarmic::A64::Jit> MakeJit(const std::unique_ptr<ARM_Dynarmic_Callbacks>& cb) {
@@ -98,10 +111,13 @@ std::unique_ptr<Dynarmic::A64::Jit> MakeJit(const std::unique_ptr<ARM_Dynarmic_C
98 Dynarmic::A64::UserConfig config; 111 Dynarmic::A64::UserConfig config;
99 config.callbacks = cb.get(); 112 config.callbacks = cb.get();
100 config.tpidrro_el0 = &cb->tpidrro_el0; 113 config.tpidrro_el0 = &cb->tpidrro_el0;
114 config.tpidr_el0 = &cb->tpidr_el0;
101 config.dczid_el0 = 4; 115 config.dczid_el0 = 4;
116 config.ctr_el0 = 0x8444c004;
102 config.page_table = reinterpret_cast<void**>(page_table); 117 config.page_table = reinterpret_cast<void**>(page_table);
103 config.page_table_address_space_bits = Memory::ADDRESS_SPACE_BITS; 118 config.page_table_address_space_bits = Memory::ADDRESS_SPACE_BITS;
104 config.silently_mirror_page_table = false; 119 config.silently_mirror_page_table = false;
120
105 return std::make_unique<Dynarmic::A64::Jit>(config); 121 return std::make_unique<Dynarmic::A64::Jit>(config);
106} 122}
107 123