mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-11-03 23:28:48 +00:00 
			
		
		
		
	externals: bump dynarmic to 6.4.6 (#6423)
This commit is contained in:
		
							parent
							
								
									a94acde519
								
							
						
					
					
						commit
						8d19483b7e
					
				
					 2 changed files with 29 additions and 21 deletions
				
			
		| 
						 | 
				
			
			@ -4,7 +4,6 @@
 | 
			
		|||
 | 
			
		||||
#include <cstring>
 | 
			
		||||
#include <dynarmic/interface/A32/a32.h>
 | 
			
		||||
#include <dynarmic/interface/A32/context.h>
 | 
			
		||||
#include <dynarmic/interface/optimization_flags.h>
 | 
			
		||||
#include "common/assert.h"
 | 
			
		||||
#include "common/microprofile.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -26,36 +25,36 @@ public:
 | 
			
		|||
    ~DynarmicThreadContext() override = default;
 | 
			
		||||
 | 
			
		||||
    void Reset() override {
 | 
			
		||||
        ctx.Regs() = {};
 | 
			
		||||
        ctx.SetCpsr(0);
 | 
			
		||||
        ctx.ExtRegs() = {};
 | 
			
		||||
        ctx.SetFpscr(0);
 | 
			
		||||
        regs = {};
 | 
			
		||||
        ext_regs = {};
 | 
			
		||||
        cpsr = 0;
 | 
			
		||||
        fpscr = 0;
 | 
			
		||||
        fpexc = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    u32 GetCpuRegister(std::size_t index) const override {
 | 
			
		||||
        return ctx.Regs()[index];
 | 
			
		||||
        return regs[index];
 | 
			
		||||
    }
 | 
			
		||||
    void SetCpuRegister(std::size_t index, u32 value) override {
 | 
			
		||||
        ctx.Regs()[index] = value;
 | 
			
		||||
        regs[index] = value;
 | 
			
		||||
    }
 | 
			
		||||
    u32 GetCpsr() const override {
 | 
			
		||||
        return ctx.Cpsr();
 | 
			
		||||
        return cpsr;
 | 
			
		||||
    }
 | 
			
		||||
    void SetCpsr(u32 value) override {
 | 
			
		||||
        ctx.SetCpsr(value);
 | 
			
		||||
        cpsr = value;
 | 
			
		||||
    }
 | 
			
		||||
    u32 GetFpuRegister(std::size_t index) const override {
 | 
			
		||||
        return ctx.ExtRegs()[index];
 | 
			
		||||
        return ext_regs[index];
 | 
			
		||||
    }
 | 
			
		||||
    void SetFpuRegister(std::size_t index, u32 value) override {
 | 
			
		||||
        ctx.ExtRegs()[index] = value;
 | 
			
		||||
        ext_regs[index] = value;
 | 
			
		||||
    }
 | 
			
		||||
    u32 GetFpscr() const override {
 | 
			
		||||
        return ctx.Fpscr();
 | 
			
		||||
        return fpscr;
 | 
			
		||||
    }
 | 
			
		||||
    void SetFpscr(u32 value) override {
 | 
			
		||||
        ctx.SetFpscr(value);
 | 
			
		||||
        fpscr = value;
 | 
			
		||||
    }
 | 
			
		||||
    u32 GetFpexc() const override {
 | 
			
		||||
        return fpexc;
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +66,10 @@ public:
 | 
			
		|||
private:
 | 
			
		||||
    friend class ARM_Dynarmic;
 | 
			
		||||
 | 
			
		||||
    Dynarmic::A32::Context ctx;
 | 
			
		||||
    std::array<u32, 16> regs;
 | 
			
		||||
    std::array<u32, 64> ext_regs;
 | 
			
		||||
    u32 cpsr;
 | 
			
		||||
    u32 fpscr;
 | 
			
		||||
    u32 fpexc;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -291,7 +293,10 @@ void ARM_Dynarmic::SaveContext(const std::unique_ptr<ThreadContext>& arg) {
 | 
			
		|||
    DynarmicThreadContext* ctx = dynamic_cast<DynarmicThreadContext*>(arg.get());
 | 
			
		||||
    ASSERT(ctx);
 | 
			
		||||
 | 
			
		||||
    jit->SaveContext(ctx->ctx);
 | 
			
		||||
    ctx->regs = jit->Regs();
 | 
			
		||||
    ctx->ext_regs = jit->ExtRegs();
 | 
			
		||||
    ctx->cpsr = jit->Cpsr();
 | 
			
		||||
    ctx->fpscr = jit->Fpscr();
 | 
			
		||||
    ctx->fpexc = fpexc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -299,7 +304,10 @@ void ARM_Dynarmic::LoadContext(const std::unique_ptr<ThreadContext>& arg) {
 | 
			
		|||
    const DynarmicThreadContext* ctx = dynamic_cast<DynarmicThreadContext*>(arg.get());
 | 
			
		||||
    ASSERT(ctx);
 | 
			
		||||
 | 
			
		||||
    jit->LoadContext(ctx->ctx);
 | 
			
		||||
    jit->Regs() = ctx->regs;
 | 
			
		||||
    jit->ExtRegs() = ctx->ext_regs;
 | 
			
		||||
    jit->SetCpsr(ctx->cpsr);
 | 
			
		||||
    jit->SetFpscr(ctx->fpscr);
 | 
			
		||||
    fpexc = ctx->fpexc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -329,21 +337,21 @@ std::shared_ptr<Memory::PageTable> ARM_Dynarmic::GetPageTable() const {
 | 
			
		|||
 | 
			
		||||
void ARM_Dynarmic::SetPageTable(const std::shared_ptr<Memory::PageTable>& page_table) {
 | 
			
		||||
    current_page_table = page_table;
 | 
			
		||||
    Dynarmic::A32::Context ctx{};
 | 
			
		||||
    auto ctx{NewContext()};
 | 
			
		||||
    if (jit) {
 | 
			
		||||
        jit->SaveContext(ctx);
 | 
			
		||||
        SaveContext(ctx);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    auto iter = jits.find(current_page_table);
 | 
			
		||||
    if (iter != jits.end()) {
 | 
			
		||||
        jit = iter->second.get();
 | 
			
		||||
        jit->LoadContext(ctx);
 | 
			
		||||
        LoadContext(ctx);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    auto new_jit = MakeJit();
 | 
			
		||||
    jit = new_jit.get();
 | 
			
		||||
    jit->LoadContext(ctx);
 | 
			
		||||
    LoadContext(ctx);
 | 
			
		||||
    jits.emplace(current_page_table, std::move(new_jit));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue