diff options
| author | 2018-01-13 22:34:15 +0000 | |
|---|---|---|
| committer | 2018-01-13 22:38:57 +0000 | |
| commit | 668e5452fa318ba57e6d5165b6df66fd2d004a66 (patch) | |
| tree | da030e85b2d25280d16ebf24643cdbf6f3eba2d7 | |
| parent | Fix build on macOS and linux (diff) | |
| download | yuzu-668e5452fa318ba57e6d5165b6df66fd2d004a66.tar.gz yuzu-668e5452fa318ba57e6d5165b6df66fd2d004a66.tar.xz yuzu-668e5452fa318ba57e6d5165b6df66fd2d004a66.zip | |
Update dynarmic to bc73004
bc73004 a64_merge_interpret_blocks: Remove debug output
4e656ed tests/A64: Randomize PSTATE.<NZCV>
fd9530b A64: Optimization: Merge interpret blocks
3c9eb04 testenv: Use format constants
324f3fc tests/A64: Unicorn interface fixes
98ecbe7 tests/A64: Fuzz against unicorn
b1d38e7 tests/A64: Move TestEnvironment to own header
5218ad9 A64/data_processing_pcrel: bug: ADR{,P} instructions sign extend their immediate
b1a8c39 A64/data_processing_addsub: bug: {ADD,SUB}S (extended register) instructions write to ZR when d = 31
64827fb a64_emit_x64: bug: A64CallSupervisor trampled callee-save registers
1bfa04d emit_x64: bug: OP m/r64, imm32 form instructions sign-extend their immediate on x64
edadeea A64 inferface: Use two argument static_assert
9ab1304 A64: Add ExceptionRaised IR instruction
6843eed Update readme
7438d07 A64/translate: Add TranslateSingleInstruction function
| m--------- | externals/dynarmic | 0 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic.cpp | 29 |
2 files changed, 17 insertions, 12 deletions
diff --git a/externals/dynarmic b/externals/dynarmic | |||
| Subproject 83afe4353cfc2276dd1dad18c9df1c4b70b7f69 | Subproject bc73004dd5aaa10bedef031917bc87a5bb8f6fb | ||
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index f1c15ff03..2ad48dcc7 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <cinttypes> | ||
| 5 | #include <memory> | 6 | #include <memory> |
| 6 | #include <dynarmic/A64/a64.h> | 7 | #include <dynarmic/A64/a64.h> |
| 7 | #include <dynarmic/A64/config.h> | 8 | #include <dynarmic/A64/config.h> |
| @@ -15,33 +16,33 @@ public: | |||
| 15 | explicit ARM_Dynarmic_Callbacks(ARM_Dynarmic& parent) : parent(parent) {} | 16 | explicit ARM_Dynarmic_Callbacks(ARM_Dynarmic& parent) : parent(parent) {} |
| 16 | ~ARM_Dynarmic_Callbacks() = default; | 17 | ~ARM_Dynarmic_Callbacks() = default; |
| 17 | 18 | ||
| 18 | virtual u8 MemoryRead8(u64 vaddr) override { | 19 | u8 MemoryRead8(u64 vaddr) override { |
| 19 | return Memory::Read8(vaddr); | 20 | return Memory::Read8(vaddr); |
| 20 | } | 21 | } |
| 21 | virtual u16 MemoryRead16(u64 vaddr) override { | 22 | u16 MemoryRead16(u64 vaddr) override { |
| 22 | return Memory::Read16(vaddr); | 23 | return Memory::Read16(vaddr); |
| 23 | } | 24 | } |
| 24 | virtual u32 MemoryRead32(u64 vaddr) override { | 25 | u32 MemoryRead32(u64 vaddr) override { |
| 25 | return Memory::Read32(vaddr); | 26 | return Memory::Read32(vaddr); |
| 26 | } | 27 | } |
| 27 | virtual u64 MemoryRead64(u64 vaddr) override { | 28 | u64 MemoryRead64(u64 vaddr) override { |
| 28 | return Memory::Read64(vaddr); | 29 | return Memory::Read64(vaddr); |
| 29 | } | 30 | } |
| 30 | 31 | ||
| 31 | virtual void MemoryWrite8(u64 vaddr, u8 value) override { | 32 | void MemoryWrite8(u64 vaddr, u8 value) override { |
| 32 | Memory::Write8(vaddr, value); | 33 | Memory::Write8(vaddr, value); |
| 33 | } | 34 | } |
| 34 | virtual void MemoryWrite16(u64 vaddr, u16 value) override { | 35 | void MemoryWrite16(u64 vaddr, u16 value) override { |
| 35 | Memory::Write16(vaddr, value); | 36 | Memory::Write16(vaddr, value); |
| 36 | } | 37 | } |
| 37 | virtual void MemoryWrite32(u64 vaddr, u32 value) override { | 38 | void MemoryWrite32(u64 vaddr, u32 value) override { |
| 38 | Memory::Write32(vaddr, value); | 39 | Memory::Write32(vaddr, value); |
| 39 | } | 40 | } |
| 40 | virtual void MemoryWrite64(u64 vaddr, u64 value) override { | 41 | void MemoryWrite64(u64 vaddr, u64 value) override { |
| 41 | Memory::Write64(vaddr, value); | 42 | Memory::Write64(vaddr, value); |
| 42 | } | 43 | } |
| 43 | 44 | ||
| 44 | virtual void InterpreterFallback(u64 pc, size_t num_instructions) override { | 45 | void InterpreterFallback(u64 pc, size_t num_instructions) override { |
| 45 | ARM_Interface::ThreadContext ctx; | 46 | ARM_Interface::ThreadContext ctx; |
| 46 | parent.SaveContext(ctx); | 47 | parent.SaveContext(ctx); |
| 47 | parent.inner_unicorn.LoadContext(ctx); | 48 | parent.inner_unicorn.LoadContext(ctx); |
| @@ -51,19 +52,23 @@ public: | |||
| 51 | num_interpreted_instructions += num_instructions; | 52 | num_interpreted_instructions += num_instructions; |
| 52 | } | 53 | } |
| 53 | 54 | ||
| 54 | virtual void CallSVC(u32 swi) override { | 55 | void ExceptionRaised(u64 pc, Dynarmic::A64::Exception /*exception*/) override { |
| 56 | ASSERT_MSG(false, "ExceptionRaised(%" PRIx64 ")", pc); | ||
| 57 | } | ||
| 58 | |||
| 59 | void CallSVC(u32 swi) override { | ||
| 55 | printf("svc %x\n", swi); | 60 | printf("svc %x\n", swi); |
| 56 | Kernel::CallSVC(swi); | 61 | Kernel::CallSVC(swi); |
| 57 | } | 62 | } |
| 58 | 63 | ||
| 59 | virtual void AddTicks(u64 ticks) override { | 64 | void AddTicks(u64 ticks) override { |
| 60 | if (ticks > ticks_remaining) { | 65 | if (ticks > ticks_remaining) { |
| 61 | ticks_remaining = 0; | 66 | ticks_remaining = 0; |
| 62 | return; | 67 | return; |
| 63 | } | 68 | } |
| 64 | ticks -= ticks_remaining; | 69 | ticks -= ticks_remaining; |
| 65 | } | 70 | } |
| 66 | virtual u64 GetTicksRemaining() override { | 71 | u64 GetTicksRemaining() override { |
| 67 | return ticks_remaining; | 72 | return ticks_remaining; |
| 68 | } | 73 | } |
| 69 | 74 | ||