mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-06 06:51:26 +12:00
Merge pull request #206 from Bigpet/linspurec
enable SPU recompiler on linux
This commit is contained in:
commit
db1ca2f89f
10 changed files with 3435 additions and 28 deletions
|
@ -10,11 +10,13 @@ if (CMAKE_COMPILER_IS_GNUCXX)
|
||||||
#add_definitions(-D__WXGTK__)
|
#add_definitions(-D__WXGTK__)
|
||||||
#add_definitions(-Wfatal-errors)
|
#add_definitions(-Wfatal-errors)
|
||||||
add_definitions(-w) # TODO: remove me
|
add_definitions(-w) # TODO: remove me
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions")
|
||||||
add_definitions(-fpermissive) # TODO: remove me
|
add_definitions(-fpermissive) # TODO: remove me
|
||||||
add_definitions(-g) # Debugging!!
|
add_definitions(-g) # Debugging!!
|
||||||
add_definitions(-msse2)
|
add_definitions(-msse2)
|
||||||
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
If( NOT RPCS3_SRC_DIR)
|
If( NOT RPCS3_SRC_DIR)
|
||||||
|
@ -26,6 +28,7 @@ EndIf()
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH "${RPCS3_SRC_DIR}/cmake_modules")
|
set(CMAKE_MODULE_PATH "${RPCS3_SRC_DIR}/cmake_modules")
|
||||||
set(EXECUTABLE_OUTPUT_PATH "${RPCS3_SRC_DIR}/../bin") # TODO: do real installation, including copying directory structure
|
set(EXECUTABLE_OUTPUT_PATH "${RPCS3_SRC_DIR}/../bin") # TODO: do real installation, including copying directory structure
|
||||||
|
#include(cotire)
|
||||||
|
|
||||||
add_definitions(-DGL_GLEXT_PROTOTYPES)
|
add_definitions(-DGL_GLEXT_PROTOTYPES)
|
||||||
add_definitions(-DGLX_GLXEXT_PROTOTYPES)
|
add_definitions(-DGLX_GLXEXT_PROTOTYPES)
|
||||||
|
@ -79,5 +82,8 @@ RPCS3_SRC
|
||||||
|
|
||||||
add_executable(rpcs3 ${RPCS3_SRC})
|
add_executable(rpcs3 ${RPCS3_SRC})
|
||||||
|
|
||||||
target_link_libraries(rpcs3 ${wxWidgets_LIBRARIES} ${OPENAL_LIBRARY} ${GLEW_LIBRARY} ${OPENGL_LIBRARIES} libavformat.a libavcodec.a libavutil.a libswresample.a libswscale.a ${ZLIB_LIBRARIES})
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_CURRENT_BINARY_DIR}/../asmjit/") #hack because the asmjit cmake file force fno exceptions
|
||||||
|
target_link_libraries(rpcs3 asmjit.a ${wxWidgets_LIBRARIES} ${OPENAL_LIBRARY} ${GLEW_LIBRARY} ${OPENGL_LIBRARIES} libavformat.a libavcodec.a libavutil.a libswresample.a libswscale.a ${ZLIB_LIBRARIES})
|
||||||
|
|
||||||
|
#set_target_properties(rpcs3 PROPERTIES COTIRE_CXX_PREFIX_HEADER_INIT "${RPCS3_SRC_DIR}/stdafx.h")
|
||||||
|
#cotire(rpcs3)
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#ifdef _WIN32
|
|
||||||
#include "Emu/Cell/SPUOpcodes.h"
|
#include "Emu/Cell/SPUOpcodes.h"
|
||||||
#include "Emu/Memory/Memory.h"
|
#include "Emu/Memory/Memory.h"
|
||||||
#include "Emu/Cell/SPUThread.h"
|
#include "Emu/Cell/SPUThread.h"
|
||||||
|
@ -14,6 +13,11 @@ using namespace asmjit::host;
|
||||||
|
|
||||||
#define UNIMPLEMENTED() UNK(__FUNCTION__)
|
#define UNIMPLEMENTED() UNK(__FUNCTION__)
|
||||||
|
|
||||||
|
#define mmToU64Ptr(x) ((u64*)(&x))
|
||||||
|
#define mmToU32Ptr(x) ((u32*)(&x))
|
||||||
|
#define mmToU16Ptr(x) ((u16*)(&x))
|
||||||
|
#define mmToU8Ptr(x) ((u8*)(&x))
|
||||||
|
|
||||||
struct g_imm_table_struct
|
struct g_imm_table_struct
|
||||||
{
|
{
|
||||||
//u16 cntb_table[65536];
|
//u16 cntb_table[65536];
|
||||||
|
@ -42,27 +46,27 @@ struct g_imm_table_struct
|
||||||
for (u32 i = 0; i < sizeof(fsm_table) / sizeof(fsm_table[0]); i++)
|
for (u32 i = 0; i < sizeof(fsm_table) / sizeof(fsm_table[0]); i++)
|
||||||
{
|
{
|
||||||
|
|
||||||
for (u32 j = 0; j < 4; j++) fsm_table[i].m128i_u32[j] = (i & (1 << j)) ? ~0 : 0;
|
for (u32 j = 0; j < 4; j++) mmToU32Ptr(fsm_table[i])[j] = (i & (1 << j)) ? ~0 : 0;
|
||||||
}
|
}
|
||||||
for (u32 i = 0; i < sizeof(fsmh_table) / sizeof(fsmh_table[0]); i++)
|
for (u32 i = 0; i < sizeof(fsmh_table) / sizeof(fsmh_table[0]); i++)
|
||||||
{
|
{
|
||||||
for (u32 j = 0; j < 8; j++) fsmh_table[i].m128i_u16[j] = (i & (1 << j)) ? ~0 : 0;
|
for (u32 j = 0; j < 8; j++) mmToU16Ptr(fsmh_table[i])[j] = (i & (1 << j)) ? ~0 : 0;
|
||||||
}
|
}
|
||||||
for (u32 i = 0; i < sizeof(fsmb_table) / sizeof(fsmb_table[0]); i++)
|
for (u32 i = 0; i < sizeof(fsmb_table) / sizeof(fsmb_table[0]); i++)
|
||||||
{
|
{
|
||||||
for (u32 j = 0; j < 16; j++) fsmb_table[i].m128i_u8[j] = (i & (1 << j)) ? ~0 : 0;
|
for (u32 j = 0; j < 16; j++) mmToU8Ptr(fsmb_table[i])[j] = (i & (1 << j)) ? ~0 : 0;
|
||||||
}
|
}
|
||||||
for (u32 i = 0; i < sizeof(sldq_pshufb) / sizeof(sldq_pshufb[0]); i++)
|
for (u32 i = 0; i < sizeof(sldq_pshufb) / sizeof(sldq_pshufb[0]); i++)
|
||||||
{
|
{
|
||||||
for (u32 j = 0; j < 16; j++) sldq_pshufb[i].m128i_u8[j] = (u8)(j - i);
|
for (u32 j = 0; j < 16; j++) mmToU8Ptr(sldq_pshufb[i])[j] = (u8)(j - i);
|
||||||
}
|
}
|
||||||
for (u32 i = 0; i < sizeof(srdq_pshufb) / sizeof(srdq_pshufb[0]); i++)
|
for (u32 i = 0; i < sizeof(srdq_pshufb) / sizeof(srdq_pshufb[0]); i++)
|
||||||
{
|
{
|
||||||
for (u32 j = 0; j < 16; j++) srdq_pshufb[i].m128i_u8[j] = (j + i > 15) ? 0xff : (u8)(j + i);
|
for (u32 j = 0; j < 16; j++) mmToU8Ptr(srdq_pshufb[i])[j] = (j + i > 15) ? 0xff : (u8)(j + i);
|
||||||
}
|
}
|
||||||
for (u32 i = 0; i < sizeof(rldq_pshufb) / sizeof(rldq_pshufb[0]); i++)
|
for (u32 i = 0; i < sizeof(rldq_pshufb) / sizeof(rldq_pshufb[0]); i++)
|
||||||
{
|
{
|
||||||
for (u32 j = 0; j < 16; j++) rldq_pshufb[i].m128i_u8[j] = (u8)(j - i) & 0xf;
|
for (u32 j = 0; j < 16; j++) mmToU8Ptr(rldq_pshufb[i])[j] = (u8)(j - i) & 0xf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -104,6 +108,7 @@ public:
|
||||||
|
|
||||||
#define c (*compiler)
|
#define c (*compiler)
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
#define cpu_xmm(x) oword_ptr(*cpu_var, (sizeof((*(SPUThread*)nullptr).x) == 16) ? offsetof(SPUThread, x) : throw "sizeof("#x") != 16")
|
#define cpu_xmm(x) oword_ptr(*cpu_var, (sizeof((*(SPUThread*)nullptr).x) == 16) ? offsetof(SPUThread, x) : throw "sizeof("#x") != 16")
|
||||||
#define cpu_qword(x) qword_ptr(*cpu_var, (sizeof((*(SPUThread*)nullptr).x) == 8) ? offsetof(SPUThread, x) : throw "sizeof("#x") != 8")
|
#define cpu_qword(x) qword_ptr(*cpu_var, (sizeof((*(SPUThread*)nullptr).x) == 8) ? offsetof(SPUThread, x) : throw "sizeof("#x") != 8")
|
||||||
#define cpu_dword(x) dword_ptr(*cpu_var, (sizeof((*(SPUThread*)nullptr).x) == 4) ? offsetof(SPUThread, x) : throw "sizeof("#x") != 4")
|
#define cpu_dword(x) dword_ptr(*cpu_var, (sizeof((*(SPUThread*)nullptr).x) == 4) ? offsetof(SPUThread, x) : throw "sizeof("#x") != 4")
|
||||||
|
@ -112,6 +117,17 @@ public:
|
||||||
|
|
||||||
#define g_imm_xmm(x) oword_ptr(*g_imm_var, offsetof(g_imm_table_struct, x))
|
#define g_imm_xmm(x) oword_ptr(*g_imm_var, offsetof(g_imm_table_struct, x))
|
||||||
#define g_imm2_xmm(x, y) oword_ptr(*g_imm_var, y, 0, offsetof(g_imm_table_struct, x))
|
#define g_imm2_xmm(x, y) oword_ptr(*g_imm_var, y, 0, offsetof(g_imm_table_struct, x))
|
||||||
|
#else
|
||||||
|
#define cpu_xmm(x) oword_ptr(*cpu_var, reinterpret_cast<uintptr_t>(&(((SPUThread*)0)->x)) )
|
||||||
|
#define cpu_qword(x) qword_ptr(*cpu_var, reinterpret_cast<uintptr_t>(&(((SPUThread*)0)->x)) )
|
||||||
|
#define cpu_dword(x) dword_ptr(*cpu_var, reinterpret_cast<uintptr_t>(&(((SPUThread*)0)->x)) )
|
||||||
|
#define cpu_word(x) word_ptr(*cpu_var, reinterpret_cast<uintptr_t>(&(((SPUThread*)0)->x)) )
|
||||||
|
#define cpu_byte(x) byte_ptr(*cpu_var, reinterpret_cast<uintptr_t>(&(((SPUThread*)0)->x)) )
|
||||||
|
|
||||||
|
#define g_imm_xmm(x) oword_ptr(*g_imm_var, reinterpret_cast<uintptr_t>(&(((g_imm_table_struct*)0)->x)))
|
||||||
|
#define g_imm2_xmm(x, y) oword_ptr(*g_imm_var, y, 0, reinterpret_cast<uintptr_t>(&(((g_imm_table_struct*)0)->x)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define LOG_OPCODE(...) //ConLog.Write("Compiled "__FUNCTION__"(): "__VA_ARGS__)
|
#define LOG_OPCODE(...) //ConLog.Write("Compiled "__FUNCTION__"(): "__VA_ARGS__)
|
||||||
|
|
||||||
|
@ -132,7 +148,7 @@ public:
|
||||||
if (#a1[0] == 'r') XmmInvalidate(a1); \
|
if (#a1[0] == 'r') XmmInvalidate(a1); \
|
||||||
if (#a2[0] == 'r') XmmInvalidate(a2); \
|
if (#a2[0] == 'r') XmmInvalidate(a2); \
|
||||||
if (#a3[0] == 'r') XmmInvalidate(a3); \
|
if (#a3[0] == 'r') XmmInvalidate(a3); \
|
||||||
X86X64CallNode* call##a0 = c.call(imm_ptr(&opwr_##a0::opcode), kFuncConvHost, FuncBuilder4<FnVoid, u32, u32, u32, u32>()); \
|
X86X64CallNode* call##a0 = c.call(imm_ptr(reinterpret_cast<void*>(&opwr_##a0::opcode)), kFuncConvHost, FuncBuilder4<FnVoid, u32, u32, u32, u32>()); \
|
||||||
call##a0->setArg(0, imm_u(a0)); \
|
call##a0->setArg(0, imm_u(a0)); \
|
||||||
call##a0->setArg(1, imm_u(a1)); \
|
call##a0->setArg(1, imm_u(a1)); \
|
||||||
call##a0->setArg(2, imm_u(a2)); \
|
call##a0->setArg(2, imm_u(a2)); \
|
||||||
|
@ -398,7 +414,7 @@ public:
|
||||||
{
|
{
|
||||||
for (u32 i = 0; i < rec.imm_table.size(); i++)
|
for (u32 i = 0; i < rec.imm_table.size(); i++)
|
||||||
{
|
{
|
||||||
if (rec.imm_table[i].m128i_u64[0] == data.m128i_u64[0] && rec.imm_table[i].m128i_u64[1] == data.m128i_u64[1])
|
if (mmToU64Ptr(rec.imm_table[i])[0] == mmToU64Ptr(data)[0] && mmToU64Ptr(rec.imm_table[i])[1] == mmToU64Ptr(data)[1])
|
||||||
{
|
{
|
||||||
return oword_ptr(*imm_var, i * sizeof(__m128i));
|
return oword_ptr(*imm_var, i * sizeof(__m128i));
|
||||||
}
|
}
|
||||||
|
@ -427,7 +443,7 @@ private:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
c.mov(cpu_qword(PC), (u32)CPU.PC);
|
c.mov(cpu_qword(PC), (u32)CPU.PC);
|
||||||
X86X64CallNode* call = c.call(imm_ptr(&STOP_wrapper::STOP), kFuncConvHost, FuncBuilder1<FnVoid, u32>());
|
X86X64CallNode* call = c.call(imm_ptr(reinterpret_cast<void*>(&STOP_wrapper::STOP)), kFuncConvHost, FuncBuilder1<FnVoid, u32>());
|
||||||
call->setArg(0, imm_u(code));
|
call->setArg(0, imm_u(code));
|
||||||
c.mov(*pos_var, (CPU.PC >> 2) + 1);
|
c.mov(*pos_var, (CPU.PC >> 2) + 1);
|
||||||
do_finalize = true;
|
do_finalize = true;
|
||||||
|
@ -1133,7 +1149,7 @@ private:
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
X86X64CallNode* call = c.call(imm_ptr(&WRCH_wrapper::WRCH), kFuncConvHost, FuncBuilder2<FnVoid, u32, u32>());
|
X86X64CallNode* call = c.call(imm_ptr(reinterpret_cast<void*>(&WRCH_wrapper::WRCH)), kFuncConvHost, FuncBuilder2<FnVoid, u32, u32>());
|
||||||
call->setArg(0, imm_u(ra));
|
call->setArg(0, imm_u(ra));
|
||||||
call->setArg(1, v);
|
call->setArg(1, v);
|
||||||
}
|
}
|
||||||
|
@ -3692,7 +3708,7 @@ private:
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw __FUNCTION__"(): invalid case";
|
throw (std::string(__FUNCTION__) + std::string("(): invalid case")).c_str();
|
||||||
}
|
}
|
||||||
LOG_OPCODE();
|
LOG_OPCODE();
|
||||||
}
|
}
|
||||||
|
@ -3777,7 +3793,7 @@ private:
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw __FUNCTION__"(): invalid case";
|
throw (std::string(__FUNCTION__) + std::string("(): invalid case")).c_str();
|
||||||
}
|
}
|
||||||
LOG_OPCODE();
|
LOG_OPCODE();
|
||||||
}
|
}
|
||||||
|
@ -3797,6 +3813,5 @@ private:
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif WIN32
|
|
||||||
|
|
||||||
#undef c
|
#undef c
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
#include "SPUInterpreter.h"
|
#include "SPUInterpreter.h"
|
||||||
#include "SPURecompiler.h"
|
#include "SPURecompiler.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
static const g_imm_table_struct g_imm_table;
|
static const g_imm_table_struct g_imm_table;
|
||||||
|
|
||||||
SPURecompilerCore::SPURecompilerCore(SPUThread& cpu)
|
SPURecompilerCore::SPURecompilerCore(SPUThread& cpu)
|
||||||
|
@ -251,4 +250,3 @@ u8 SPURecompilerCore::DecodeMemory(const u64 address)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
|
@ -75,11 +75,7 @@ void SPUThread::DoRun()
|
||||||
m_dec = new SPUDecoder(*new SPUInterpreter(*this));
|
m_dec = new SPUDecoder(*new SPUInterpreter(*this));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
#ifdef _WIN32
|
|
||||||
m_dec = new SPURecompilerCore(*this);
|
m_dec = new SPURecompilerCore(*this);
|
||||||
#else
|
|
||||||
m_dec = new SPUDecoder(*new SPUInterpreter(*this));
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -6,7 +6,7 @@ void InitProcTable()
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define OPENGL_PROC(p, n) OPENGL_PROC2(p, n, gl##n)
|
#define OPENGL_PROC(p, n) OPENGL_PROC2(p, n, gl##n)
|
||||||
#define OPENGL_PROC2(p, n, tn) /*if(!gl##n)*/ if(!(gl##n = (p)wglGetProcAddress(#tn))) ConLog.Error("OpenGL: initialization of " #tn " failed.")
|
#define OPENGL_PROC2(p, n, tn) /*if(!gl##n)*/ if(!(gl##n = (p)wglGetProcAddress(#tn))) ConLog.Error("OpenGL: initialization of " #tn " failed.")
|
||||||
#include "GLProcTable.tbl"
|
#include "GLProcTable.h"
|
||||||
#undef OPENGL_PROC
|
#undef OPENGL_PROC
|
||||||
#undef OPENGL_PROC2
|
#undef OPENGL_PROC2
|
||||||
#endif
|
#endif
|
||||||
|
@ -19,7 +19,7 @@ void InitProcTable()
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define OPENGL_PROC(p, n) p gl##n = nullptr
|
#define OPENGL_PROC(p, n) p gl##n = nullptr
|
||||||
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
||||||
#include "GLProcTable.tbl"
|
#include "GLProcTable.h"
|
||||||
#undef OPENGL_PROC
|
#undef OPENGL_PROC
|
||||||
#undef OPENGL_PROC2
|
#undef OPENGL_PROC2
|
||||||
#endif
|
#endif
|
||||||
|
@ -40,7 +40,7 @@ void OpenGL::Init()
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define OPENGL_PROC(p, n) OPENGL_PROC2(p, n, gl##n)
|
#define OPENGL_PROC(p, n) OPENGL_PROC2(p, n, gl##n)
|
||||||
#define OPENGL_PROC2(p, n, tn) if(!(n = (p)wglGetProcAddress(#tn))) ConLog.Error("OpenGL: initialization of " #tn " failed.")
|
#define OPENGL_PROC2(p, n, tn) if(!(n = (p)wglGetProcAddress(#tn))) ConLog.Error("OpenGL: initialization of " #tn " failed.")
|
||||||
#include "GLProcTable.tbl"
|
#include "GLProcTable.h"
|
||||||
#undef OPENGL_PROC
|
#undef OPENGL_PROC
|
||||||
#undef OPENGL_PROC2
|
#undef OPENGL_PROC2
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,7 +51,7 @@ void OpenGL::Close()
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define OPENGL_PROC(p, n) n = nullptr
|
#define OPENGL_PROC(p, n) n = nullptr
|
||||||
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
||||||
#include "GLProcTable.tbl"
|
#include "GLProcTable.h"
|
||||||
#undef OPENGL_PROC
|
#undef OPENGL_PROC
|
||||||
#undef OPENGL_PROC2
|
#undef OPENGL_PROC2
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -10,7 +10,7 @@ typedef BOOL (WINAPI* PFNWGLSWAPINTERVALEXTPROC) (int interval);
|
||||||
|
|
||||||
#define OPENGL_PROC(p, n) extern p gl##n
|
#define OPENGL_PROC(p, n) extern p gl##n
|
||||||
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
||||||
#include "GLProcTable.tbl"
|
#include "GLProcTable.h"
|
||||||
#undef OPENGL_PROC
|
#undef OPENGL_PROC
|
||||||
#undef OPENGL_PROC2
|
#undef OPENGL_PROC2
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ struct OpenGL
|
||||||
{
|
{
|
||||||
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
#define OPENGL_PROC2(p, n, tn) OPENGL_PROC(p, n)
|
||||||
#define OPENGL_PROC(p, n) p n
|
#define OPENGL_PROC(p, n) p n
|
||||||
#include "GLProcTable.tbl"
|
#include "GLProcTable.h"
|
||||||
#undef OPENGL_PROC
|
#undef OPENGL_PROC
|
||||||
#undef OPENGL_PROC2
|
#undef OPENGL_PROC2
|
||||||
|
|
||||||
|
|
|
@ -293,7 +293,7 @@ public:
|
||||||
u64 getMappedAddress(u64 realAddress);
|
u64 getMappedAddress(u64 realAddress);
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "DynamicMemoryBlockBase.inl"
|
#include "DynamicMemoryBlockBase.h"
|
||||||
|
|
||||||
typedef DynamicMemoryBlockBase<MemoryBlock> DynamicMemoryBlock;
|
typedef DynamicMemoryBlockBase<MemoryBlock> DynamicMemoryBlock;
|
||||||
typedef DynamicMemoryBlockBase<MemoryBlockLE> DynamicMemoryBlockLE;
|
typedef DynamicMemoryBlockBase<MemoryBlockLE> DynamicMemoryBlockLE;
|
||||||
|
|
3392
rpcs3/cmake_modules/cotire.cmake
Normal file
3392
rpcs3/cmake_modules/cotire.cmake
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue