diff options
| author | MerryMage <MerryMage@users.noreply.github.com> | 2018-02-21 20:51:54 +0000 | 
|---|---|---|
| committer | MerryMage <MerryMage@users.noreply.github.com> | 2018-02-21 21:39:07 +0000 | 
| commit | 32d127ad3e94b09566ca17b83072ff42018b02b3 (patch) | |
| tree | ec887f2feca3e3ced5480a5180a32c1a9ce0050c /src/core/arm/dynarmic | |
| parent | e8b9731af3a2ee2234a09300d8af7ea3469d22bd (diff) | |
dynarmic: Update to 6b4c6b0
6b4c6b0 impl: Update PC when raising exception
7a1313a A64: Implement FDIV (vector)
b2d781d system: Raise exception for YIELD, WFE, WFI, SEV, SEVL
b277bf5 Correct FPSR and FPCR
7673933 A64: Implement USHL
8d0e558 A64: Implement UCVTF (vector, integer), scalar variant
da9a4f8 A64: Partially implement FCVTZU (scalar, fixed-point) and FCVTZS (scalar, fixed-point)
7479684 A64: Implement system register TPIDR_EL0
0fd75fd A64: Implement system registers FPCR and FPSR
31e370c A64: Implement system register CNTPCT_EL0
9a88fd3 A64: Implement system register CTR_EL0
1d16896 A64: Implement NEG (vector)
3184edf IR: Add IR instruction ZeroVector
31f8fbc emit_x64_floating_point: Add maybe_unused to preprocess parameter
567eb1a A64: Implement FMINNM (scalar)
c6d8fa1 A64: Implement FMAXNM (scalar)
616056d constant_pool: Add frame parameter
a3747cb A64: Implement ADDP (scalar)
5cd5d9f reg_alloc: Only exchange GPRs
dd0452a A64: Implement DUP (element), scalar variant
e5732ea emit_x64_floating_point: Correct FP{Max,Min}{32,64} implementations for -0/+0
40eb9c3 A64: Implement FMAX (scalar), FMIN (scalar)
7cef39b fuzz_with_unicorn: QEMU's implementation of FCVT is incorrect
826dce2 travis: Switch unicorn repository
9605f28 a64/config: Allow NaN emulation accuracy to be set
e9435bc a64_emit_x64: Add conf to A64EmitContext
30b596d fuzz_with_unicorn: Explicitly test floating point instructions
be292a8 A64: Implement FSQRT (scalar)
3c42d48 backend_x64: Accurately handle NaNs
4aefed0 fuzz_with_unicorn: Print AArch64 disassembly
Diffstat (limited to 'src/core/arm/dynarmic')
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic.cpp | 20 | 
1 files changed, 18 insertions, 2 deletions
| 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:      }      void ExceptionRaised(u64 pc, Dynarmic::A64::Exception exception) override { -        ASSERT_MSG(false, "ExceptionRaised(exception = %zu, pc = %" PRIx64 ")", -                   static_cast<size_t>(exception), pc); +        switch (exception) { +        case Dynarmic::A64::Exception::WaitForInterrupt: +        case Dynarmic::A64::Exception::WaitForEvent: +        case Dynarmic::A64::Exception::SendEvent: +        case Dynarmic::A64::Exception::SendEventLocal: +        case Dynarmic::A64::Exception::Yield: +            return; +        default: +            ASSERT_MSG(false, "ExceptionRaised(exception = %zu, pc = %" PRIx64 ")", +                       static_cast<size_t>(exception), pc); +        }      }      void CallSVC(u32 swi) override { @@ -85,11 +94,15 @@ public:      u64 GetTicksRemaining() override {          return ticks_remaining;      } +    u64 GetCNTPCT() override { +        return CoreTiming::GetTicks(); +    }      ARM_Dynarmic& parent;      size_t ticks_remaining = 0;      size_t num_interpreted_instructions = 0;      u64 tpidrro_el0 = 0; +    u64 tpidr_el0 = 0;  };  std::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      Dynarmic::A64::UserConfig config;      config.callbacks = cb.get();      config.tpidrro_el0 = &cb->tpidrro_el0; +    config.tpidr_el0 = &cb->tpidr_el0;      config.dczid_el0 = 4; +    config.ctr_el0 = 0x8444c004;      config.page_table = reinterpret_cast<void**>(page_table);      config.page_table_address_space_bits = Memory::ADDRESS_SPACE_BITS;      config.silently_mirror_page_table = false; +      return std::make_unique<Dynarmic::A64::Jit>(config);  } | 
