Update arm/arm64 to use asmjit
This commit is contained in:
parent
2c40d47a34
commit
9a04293a67
|
@ -4,11 +4,15 @@
|
||||||
#include <Project64-core/N64System/Mips/Register.h>
|
#include <Project64-core/N64System/Mips/Register.h>
|
||||||
#include <Project64-core/Settings/DebugSettings.h>
|
#include <Project64-core/Settings/DebugSettings.h>
|
||||||
|
|
||||||
|
class CX86RecompilerOps;
|
||||||
|
|
||||||
class R4300iOp :
|
class R4300iOp :
|
||||||
public CLogging,
|
public CLogging,
|
||||||
protected CDebugSettings,
|
protected CDebugSettings,
|
||||||
protected CSystemRegisters
|
protected CSystemRegisters
|
||||||
{
|
{
|
||||||
|
friend CX86RecompilerOps;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef void (*Func)();
|
typedef void (*Func)();
|
||||||
|
|
||||||
|
|
|
@ -1692,7 +1692,7 @@ void CN64System::DumpSyncErrors(CN64System * SecondCPU)
|
||||||
|
|
||||||
if (m_Recomp->MemoryStackPos() != TargetStackPos)
|
if (m_Recomp->MemoryStackPos() != TargetStackPos)
|
||||||
{
|
{
|
||||||
Error.LogF("MemoryStack = %p should be: %p\r\n", m_Recomp->MemoryStackPos(), (uint32_t)(m_MMU_VM.Rdram() + (m_Reg.m_GPR[29].W[0] & 0x1FFFFFFF)));
|
Error.LogF("MemoryStack = %p should be: %p\r\n", m_Recomp->MemoryStackPos(), (m_MMU_VM.Rdram() + (m_Reg.m_GPR[29].W[0] & 0x1FFFFFFF)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,24 @@
|
||||||
#if defined(__aarch64__)
|
#if defined(__aarch64__)
|
||||||
|
|
||||||
#include <Project64-core/N64System/Recompiler/Aarch64/Aarch64ops.h>
|
#include <Project64-core/N64System/Recompiler/Aarch64/Aarch64ops.h>
|
||||||
|
#include <Project64-core/N64System/Recompiler/CodeBlock.h>
|
||||||
|
|
||||||
CAarch64Ops::CAarch64Ops(CCodeBlock & CodeBlock) :
|
CAarch64Ops::CAarch64Ops(CCodeBlock & CodeBlock) :
|
||||||
|
asmjit::a64::Assembler(&CodeBlock.CodeHolder()),
|
||||||
m_CodeBlock(CodeBlock)
|
m_CodeBlock(CodeBlock)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asmjit::Error CAarch64Ops::_log(const char * data, size_t size) noexcept
|
||||||
|
{
|
||||||
|
stdstr AsmjitLog(std::string(data, size));
|
||||||
|
AsmjitLog.Trim("\n");
|
||||||
|
for (SymbolMap::const_iterator itr = m_Symbols.begin(); itr != m_Symbols.end(); itr++)
|
||||||
|
{
|
||||||
|
AsmjitLog.Replace(itr->first, itr->second);
|
||||||
|
}
|
||||||
|
m_CodeBlock.Log(" %s", AsmjitLog.c_str());
|
||||||
|
return asmjit::kErrorOk;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -1,9 +1,12 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#if defined(__aarch64__)
|
#if defined(__aarch64__)
|
||||||
|
#include <Project64-core/N64System/Recompiler/asmjit.h>
|
||||||
|
|
||||||
class CCodeBlock;
|
class CCodeBlock;
|
||||||
|
|
||||||
class CAarch64Ops
|
class CAarch64Ops :
|
||||||
|
public asmjit::a64::Assembler,
|
||||||
|
public asmjit::Logger
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CAarch64Ops(CCodeBlock & CodeBlock);
|
CAarch64Ops(CCodeBlock & CodeBlock);
|
||||||
|
@ -13,6 +16,11 @@ private:
|
||||||
CAarch64Ops(const CAarch64Ops &);
|
CAarch64Ops(const CAarch64Ops &);
|
||||||
CAarch64Ops & operator=(const CAarch64Ops &);
|
CAarch64Ops & operator=(const CAarch64Ops &);
|
||||||
|
|
||||||
|
asmjit::Error _log(const char * data, size_t size) noexcept;
|
||||||
|
|
||||||
|
typedef std::map<std::string, std::string> SymbolMap;
|
||||||
|
|
||||||
|
SymbolMap m_Symbols;
|
||||||
CCodeBlock & m_CodeBlock;
|
CCodeBlock & m_CodeBlock;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,24 @@
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#if defined(__arm__) || defined(_M_ARM)
|
#if defined(__arm__) || defined(_M_ARM)
|
||||||
#include <Project64-core/N64System/Recompiler/Arm/ArmOps.h>
|
#include <Project64-core/N64System/Recompiler/Arm/ArmOps.h>
|
||||||
|
#include <Project64-core/N64System/Recompiler/CodeBlock.h>
|
||||||
|
|
||||||
CArmOps::CArmOps(CCodeBlock & CodeBlock) :
|
CArmOps::CArmOps(CCodeBlock & CodeBlock) :
|
||||||
|
asmjit::a64::Assembler(&CodeBlock.CodeHolder()),
|
||||||
m_CodeBlock(CodeBlock)
|
m_CodeBlock(CodeBlock)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asmjit::Error CArmOps::_log(const char * data, size_t size) noexcept
|
||||||
|
{
|
||||||
|
stdstr AsmjitLog(std::string(data, size));
|
||||||
|
AsmjitLog.Trim("\n");
|
||||||
|
for (SymbolMap::const_iterator itr = m_Symbols.begin(); itr != m_Symbols.end(); itr++)
|
||||||
|
{
|
||||||
|
AsmjitLog.Replace(itr->first, itr->second);
|
||||||
|
}
|
||||||
|
m_CodeBlock.Log(" %s", AsmjitLog.c_str());
|
||||||
|
return asmjit::kErrorOk;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -1,9 +1,12 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#if defined(__arm__) || defined(_M_ARM)
|
#if defined(__arm__) || defined(_M_ARM)
|
||||||
|
#include <Project64-core/N64System/Recompiler/asmjit.h>
|
||||||
|
|
||||||
class CCodeBlock;
|
class CCodeBlock;
|
||||||
|
|
||||||
class CArmOps
|
class CArmOps :
|
||||||
|
public asmjit::a64::Assembler,
|
||||||
|
public asmjit::Logger
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CArmOps(CCodeBlock & CodeBlock);
|
CArmOps(CCodeBlock & CodeBlock);
|
||||||
|
@ -13,6 +16,11 @@ private:
|
||||||
CArmOps(const CArmOps &);
|
CArmOps(const CArmOps &);
|
||||||
CArmOps & operator=(const CArmOps &);
|
CArmOps & operator=(const CArmOps &);
|
||||||
|
|
||||||
|
asmjit::Error _log(const char * data, size_t size) noexcept;
|
||||||
|
|
||||||
|
typedef std::map<std::string, std::string> SymbolMap;
|
||||||
|
|
||||||
|
SymbolMap m_Symbols;
|
||||||
CCodeBlock & m_CodeBlock;
|
CCodeBlock & m_CodeBlock;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,3 +10,6 @@
|
||||||
#else
|
#else
|
||||||
#include <asmjit\asmjit.h>
|
#include <asmjit\asmjit.h>
|
||||||
#endif
|
#endif
|
||||||
|
#include <asmjit\a64.h>
|
||||||
|
#include <asmjit\arm.h>
|
||||||
|
#include <asmjit\arm\a64assembler.h>
|
||||||
|
|
|
@ -200,7 +200,7 @@ void CX86RecompilerOps::PreCompileOpcode(void)
|
||||||
/*if (m_CompilePC == 0x803275F4 && m_PipelineStage == PIPELINE_STAGE_NORMAL)
|
/*if (m_CompilePC == 0x803275F4 && m_PipelineStage == PIPELINE_STAGE_NORMAL)
|
||||||
{
|
{
|
||||||
m_Assembler.X86BreakPoint(__FILE__, __LINE__);
|
m_Assembler.X86BreakPoint(__FILE__, __LINE__);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/*if (m_CompilePC >= 0x80000000 && m_CompilePC <= 0x80400000 && m_PipelineStage == PIPELINE_STAGE_NORMAL)
|
/*if (m_CompilePC >= 0x80000000 && m_CompilePC <= 0x80400000 && m_PipelineStage == PIPELINE_STAGE_NORMAL)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue