mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-26 23:55:40 +00:00
CPU: Add AArch32/armv7 recompiler
This commit is contained in:
parent
1128836826
commit
9f3e8bed86
|
@ -120,6 +120,13 @@ if(${CPU_ARCH} STREQUAL "x64")
|
||||||
cpu_recompiler_code_generator_x64.cpp
|
cpu_recompiler_code_generator_x64.cpp
|
||||||
)
|
)
|
||||||
message("Building x64 recompiler")
|
message("Building x64 recompiler")
|
||||||
|
elseif(${CPU_ARCH} STREQUAL "aarch32")
|
||||||
|
target_compile_definitions(core PRIVATE "WITH_RECOMPILER=1")
|
||||||
|
target_sources(core PRIVATE ${RECOMPILER_SRCS}
|
||||||
|
cpu_recompiler_code_generator_aarch32.cpp
|
||||||
|
)
|
||||||
|
target_link_libraries(core PRIVATE vixl)
|
||||||
|
message("Building AArch32 recompiler")
|
||||||
elseif(${CPU_ARCH} STREQUAL "aarch64")
|
elseif(${CPU_ARCH} STREQUAL "aarch64")
|
||||||
target_compile_definitions(core PRIVATE "WITH_RECOMPILER=1 WITH_FASTMEM=1")
|
target_compile_definitions(core PRIVATE "WITH_RECOMPILER=1 WITH_FASTMEM=1")
|
||||||
target_sources(core PRIVATE ${RECOMPILER_SRCS}
|
target_sources(core PRIVATE ${RECOMPILER_SRCS}
|
||||||
|
|
|
@ -67,6 +67,20 @@
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'">true</ExcludedFromBuild>
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="cpu_recompiler_code_generator_aarch32.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTCG|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTCG|ARM64'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugFast|ARM64'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTCG|x64'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugFast|x64'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="cpu_recompiler_code_generator_aarch64.cpp">
|
<ClCompile Include="cpu_recompiler_code_generator_aarch64.cpp">
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTCG|Win32'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseLTCG|Win32'">true</ExcludedFromBuild>
|
||||||
|
@ -825,4 +839,4 @@
|
||||||
<IgnoreWarnCompileDuplicatedFilename>true</IgnoreWarnCompileDuplicatedFilename>
|
<IgnoreWarnCompileDuplicatedFilename>true</IgnoreWarnCompileDuplicatedFilename>
|
||||||
<ProjectName>core</ProjectName>
|
<ProjectName>core</ProjectName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -50,6 +50,7 @@
|
||||||
<ClCompile Include="shadergen.cpp" />
|
<ClCompile Include="shadergen.cpp" />
|
||||||
<ClCompile Include="memory_card_image.cpp" />
|
<ClCompile Include="memory_card_image.cpp" />
|
||||||
<ClCompile Include="analog_joystick.cpp" />
|
<ClCompile Include="analog_joystick.cpp" />
|
||||||
|
<ClCompile Include="cpu_recompiler_code_generator_aarch32.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="types.h" />
|
<ClInclude Include="types.h" />
|
||||||
|
|
1794
src/core/cpu_recompiler_code_generator_aarch32.cpp
Normal file
1794
src/core/cpu_recompiler_code_generator_aarch32.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
@ -12,10 +12,16 @@
|
||||||
#define XBYAK_NO_OP_NAMES 1
|
#define XBYAK_NO_OP_NAMES 1
|
||||||
#include "xbyak.h"
|
#include "xbyak.h"
|
||||||
|
|
||||||
|
#elif defined(CPU_AARCH32)
|
||||||
|
|
||||||
|
#include "vixl/aarch32/constants-aarch32.h"
|
||||||
|
#include "vixl/aarch32/instructions-aarch32.h"
|
||||||
|
#include "vixl/aarch32/macro-assembler-aarch32.h"
|
||||||
|
|
||||||
#elif defined(CPU_AARCH64)
|
#elif defined(CPU_AARCH64)
|
||||||
|
|
||||||
#include <vixl/aarch64/constants-aarch64.h>
|
#include "vixl/aarch64/constants-aarch64.h"
|
||||||
#include <vixl/aarch64/macro-assembler-aarch64.h>
|
#include "vixl/aarch64/macro-assembler-aarch64.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -83,6 +89,25 @@ constexpr u32 CODE_STORAGE_ALIGNMENT = 4096;
|
||||||
#error Unknown ABI.
|
#error Unknown ABI.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#elif defined(CPU_AARCH32)
|
||||||
|
|
||||||
|
using HostReg = unsigned;
|
||||||
|
using CodeEmitter = vixl::aarch32::MacroAssembler;
|
||||||
|
using LabelType = vixl::aarch32::Label;
|
||||||
|
enum : u32
|
||||||
|
{
|
||||||
|
HostReg_Count = vixl::aarch32::kNumberOfRegisters
|
||||||
|
};
|
||||||
|
constexpr HostReg HostReg_Invalid = static_cast<HostReg>(HostReg_Count);
|
||||||
|
constexpr RegSize HostPointerSize = RegSize_32;
|
||||||
|
|
||||||
|
// A reasonable "maximum" number of bytes per instruction.
|
||||||
|
constexpr u32 MAX_NEAR_HOST_BYTES_PER_INSTRUCTION = 64;
|
||||||
|
constexpr u32 MAX_FAR_HOST_BYTES_PER_INSTRUCTION = 128;
|
||||||
|
|
||||||
|
// Alignment of code stoarge.
|
||||||
|
constexpr u32 CODE_STORAGE_ALIGNMENT = 4096;
|
||||||
|
|
||||||
#elif defined(CPU_AARCH64)
|
#elif defined(CPU_AARCH64)
|
||||||
|
|
||||||
using HostReg = unsigned;
|
using HostReg = unsigned;
|
||||||
|
|
Loading…
Reference in a new issue