mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-11-03 23:28:48 +00:00 
			
		
		
		
	Pretty sure ARM/Thread serialization works now
This commit is contained in:
		
							parent
							
								
									c983528862
								
							
						
					
					
						commit
						246ae84a52
					
				
					 8 changed files with 40 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -167,7 +167,7 @@ ARM_Dynarmic::ARM_Dynarmic(Core::System* system, Memory::MemorySystem& memory,
 | 
			
		|||
                           PrivilegeMode initial_mode)
 | 
			
		||||
    : system(*system), memory(memory), cb(std::make_unique<DynarmicUserCallbacks>(*this)) {
 | 
			
		||||
    interpreter_state = std::make_shared<ARMul_State>(system, memory, initial_mode);
 | 
			
		||||
    PageTableChanged();
 | 
			
		||||
    SetPageTable(memory.GetCurrentPageTable());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ARM_Dynarmic::~ARM_Dynarmic() = default;
 | 
			
		||||
| 
						 | 
				
			
			@ -281,8 +281,12 @@ void ARM_Dynarmic::InvalidateCacheRange(u32 start_address, std::size_t length) {
 | 
			
		|||
    jit->InvalidateCacheRange(start_address, length);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ARM_Dynarmic::PageTableChanged() {
 | 
			
		||||
    current_page_table = memory.GetCurrentPageTable();
 | 
			
		||||
std::shared_ptr<Memory::PageTable> ARM_Dynarmic::GetPageTable() const {
 | 
			
		||||
    return current_page_table;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ARM_Dynarmic::SetPageTable(const std::shared_ptr<Memory::PageTable>& page_table) {
 | 
			
		||||
    current_page_table = page_table;
 | 
			
		||||
    Dynarmic::A32::Context ctx{};
 | 
			
		||||
    if (jit) {
 | 
			
		||||
        jit->SaveContext(ctx);
 | 
			
		||||
| 
						 | 
				
			
			@ -309,3 +313,7 @@ std::unique_ptr<Dynarmic::A32::Jit> ARM_Dynarmic::MakeJit() {
 | 
			
		|||
    config.define_unpredictable_behaviour = true;
 | 
			
		||||
    return std::make_unique<Dynarmic::A32::Jit>(config);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ARM_Dynarmic::PurgeState() {
 | 
			
		||||
    ClearInstructionCache();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,9 @@ public:
 | 
			
		|||
 | 
			
		||||
    void ClearInstructionCache() override;
 | 
			
		||||
    void InvalidateCacheRange(u32 start_address, std::size_t length) override;
 | 
			
		||||
    void PageTableChanged() override;
 | 
			
		||||
    void SetPageTable(const std::shared_ptr<Memory::PageTable>& page_table) override;
 | 
			
		||||
    std::shared_ptr<Memory::PageTable> GetPageTable() const override;
 | 
			
		||||
    void PurgeState() override;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    friend class DynarmicUserCallbacks;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue