From c133db672118bce81ca627f938ce80dea96762f1 Mon Sep 17 00:00:00 2001 From: Zion Date: Thu, 18 May 2017 04:22:45 -0700 Subject: [PATCH] Update asmjit submodule (Testers wanted!) (#2782) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update asmjit submodule * Add myself as a contributor 😉 --- asmjit | 2 +- rpcs3/Emu/Cell/SPUASMJITRecompiler.cpp | 158 +++++++++++++------------ rpcs3/Emu/Cell/SPUASMJITRecompiler.h | 26 ++-- rpcs3/Gui/AboutDialog.h | 2 +- rpcs3/Gui/GLGSFrame.cpp | 1 - 5 files changed, 98 insertions(+), 91 deletions(-) diff --git a/asmjit b/asmjit index b0dad1af25..1370fe6a26 160000 --- a/asmjit +++ b/asmjit @@ -1 +1 @@ -Subproject commit b0dad1af25fb141bf2b20cf29392194886448832 +Subproject commit 1370fe6a26a82f18500faedac66798953961a916 diff --git a/rpcs3/Emu/Cell/SPUASMJITRecompiler.cpp b/rpcs3/Emu/Cell/SPUASMJITRecompiler.cpp index 90c67d1fe6..d55141493f 100644 --- a/rpcs3/Emu/Cell/SPUASMJITRecompiler.cpp +++ b/rpcs3/Emu/Cell/SPUASMJITRecompiler.cpp @@ -15,11 +15,11 @@ #include "asmjit.h" -#define SPU_OFF_128(x, ...) asmjit::host::oword_ptr(*cpu, offset32(&SPUThread::x, ##__VA_ARGS__)) -#define SPU_OFF_64(x, ...) asmjit::host::qword_ptr(*cpu, offset32(&SPUThread::x, ##__VA_ARGS__)) -#define SPU_OFF_32(x, ...) asmjit::host::dword_ptr(*cpu, offset32(&SPUThread::x, ##__VA_ARGS__)) -#define SPU_OFF_16(x, ...) asmjit::host::word_ptr(*cpu, offset32(&SPUThread::x, ##__VA_ARGS__)) -#define SPU_OFF_8(x, ...) asmjit::host::byte_ptr(*cpu, offset32(&SPUThread::x, ##__VA_ARGS__)) +#define SPU_OFF_128(x, ...) asmjit::x86::oword_ptr(*cpu, offset32(&SPUThread::x, ##__VA_ARGS__)) +#define SPU_OFF_64(x, ...) asmjit::x86::qword_ptr(*cpu, offset32(&SPUThread::x, ##__VA_ARGS__)) +#define SPU_OFF_32(x, ...) asmjit::x86::dword_ptr(*cpu, offset32(&SPUThread::x, ##__VA_ARGS__)) +#define SPU_OFF_16(x, ...) asmjit::x86::word_ptr(*cpu, offset32(&SPUThread::x, ##__VA_ARGS__)) +#define SPU_OFF_8(x, ...) asmjit::x86::byte_ptr(*cpu, offset32(&SPUThread::x, ##__VA_ARGS__)) const spu_decoder s_spu_interpreter; // TODO: remove const spu_decoder s_spu_decoder; @@ -29,9 +29,6 @@ extern cfg::bool_entry g_cfg_spu_debug; spu_recompiler::spu_recompiler() : m_jit(std::make_shared()) { - asmjit::X86CpuInfo inf; - asmjit::X86CpuUtil::detect(&inf); - LOG_SUCCESS(SPU, "SPU Recompiler (ASMJIT) created..."); if (g_cfg_spu_debug) @@ -62,7 +59,7 @@ void spu_recompiler::compile(spu_function_t& f) dis_asm.offset = reinterpret_cast(f.data.data()) - f.addr; StringLogger logger; - logger.setOption(kLoggerOptionBinaryForm, true); + logger.addOptions(Logger::kOptionBinaryForm); std::string log; @@ -73,42 +70,46 @@ void spu_recompiler::compile(spu_function_t& f) this->m_func = &f; - X86Compiler compiler(m_jit.get()); + asmjit::CodeHolder code; + code.init(m_jit->getCodeInfo()); + this->codeHolder = &code; + + X86Compiler compiler(&code); this->c = &compiler; if (g_cfg_spu_debug) { // Set logger - compiler.setLogger(&logger); + codeHolder->setLogger(&logger); } - compiler.addFunc(kFuncConvHost, FuncBuilder2()); + compiler.addFunc(FuncSignature2(asmjit::CallConv::kIdHost)); // Initialize variables - X86GpVar cpu_var(compiler, kVarTypeIntPtr, "cpu"); + X86Gp cpu_var = compiler.newIntPtr("cpu"); compiler.setArg(0, cpu_var); - compiler.alloc(cpu_var, asmjit::host::rbp); // ASMJIT bug workaround + compiler.alloc(cpu_var, asmjit::x86::rbp); // ASMJIT bug workaround this->cpu = &cpu_var; - X86GpVar ls_var(compiler, kVarTypeIntPtr, "ls"); + X86Gp ls_var = compiler.newIntPtr("ls"); compiler.setArg(1, ls_var); - compiler.alloc(ls_var, asmjit::host::rbx); // ASMJIT bug workaround + compiler.alloc(ls_var, asmjit::x86::rbx); // ASMJIT bug workaround this->ls = &ls_var; - X86GpVar addr_var(compiler, kVarTypeUInt32, "addr"); + X86Gp addr_var = compiler.newUInt32("addr"); this->addr = &addr_var; - X86GpVar qw0_var(compiler, kVarTypeUInt64, "qw0"); + X86Gp qw0_var = compiler.newUInt64("qw0"); this->qw0 = &qw0_var; - X86GpVar qw1_var(compiler, kVarTypeUInt64, "qw1"); + X86Gp qw1_var = compiler.newUInt64("qw1"); this->qw1 = &qw1_var; - X86GpVar qw2_var(compiler, kVarTypeUInt64, "qw2"); + X86Gp qw2_var = compiler.newUInt64("qw2"); this->qw2 = &qw2_var; - std::array vec_vars; + std::array vec_vars; for (u32 i = 0; i < vec_vars.size(); i++) { - vec_vars[i] = X86XmmVar{ compiler, kX86VarTypeXmm, fmt::format("vec%d", i).c_str() }; + vec_vars[i] = compiler.newXmm(fmt::format("vec%d", i).c_str()); vec.at(i) = vec_vars.data() + i; } @@ -152,13 +153,13 @@ void spu_recompiler::compile(spu_function_t& f) for (const u32 op : f.data) { // Bind label if initialized - if (pos_labels[m_pos / 4].isInitialized()) + if (pos_labels[m_pos / 4].isValid()) { compiler.bind(pos_labels[m_pos / 4]); if (f.blocks.find(m_pos) != f.blocks.end()) { - compiler.addComment("Block:"); + compiler.comment("Block:"); } } @@ -167,7 +168,7 @@ void spu_recompiler::compile(spu_function_t& f) // Disasm dis_asm.dump_pc = m_pos; dis_asm.disasm(m_pos); - compiler.addComment(dis_asm.last_opcode.c_str()); + compiler.comment(dis_asm.last_opcode.c_str()); log += dis_asm.last_opcode.c_str(); log += '\n'; } @@ -196,7 +197,7 @@ void spu_recompiler::compile(spu_function_t& f) // Generate default function end (go to the next address) compiler.bind(pos_labels[m_pos / 4 % 0x10000]); - compiler.addComment("Fallthrough:"); + compiler.comment("Fallthrough:"); compiler.mov(addr_var, spu_branch_target(m_pos)); compiler.jmp(end_label); @@ -205,12 +206,12 @@ void spu_recompiler::compile(spu_function_t& f) if (f.jtable.size()) { - compiler.addComment("Jump table resolver:"); + compiler.comment("Jump table resolver:"); } for (const u32 addr : f.jtable) { - if ((addr % 4) == 0 && addr < 0x40000 && pos_labels[addr / 4].isInitialized()) + if ((addr % 4) == 0 && addr < 0x40000 && pos_labels[addr / 4].isValid()) { // It could be binary search or something compiler.cmp(addr_var, addr); @@ -230,10 +231,15 @@ void spu_recompiler::compile(spu_function_t& f) // Finalization compiler.endFunc(); + compiler.finalize(); // Compile and store function address - f.compiled = asmjit_cast(compiler.make()); + typedef u32 (*Func)(void* x, void* y); + Func fn; + m_jit->add(&fn, codeHolder); + f.compiled = asmjit::Internal::ptr_cast(fn); + if (g_cfg_spu_debug) { // Add ASMJIT logs @@ -272,7 +278,7 @@ spu_recompiler::XmmLink spu_recompiler::XmmGet(s8 reg, XmmType type) // get xmm inline asmjit::X86Mem spu_recompiler::XmmConst(v128 data) { - return c->newXmmConst(asmjit::kConstScopeLocal, asmjit::Vec128::fromUq(data._u64[0], data._u64[1])); + return c->newXmmConst(asmjit::kConstScopeLocal, asmjit::Data128::fromU64(data._u64[0], data._u64[1])); } inline asmjit::X86Mem spu_recompiler::XmmConst(__m128 data) @@ -319,10 +325,10 @@ void spu_recompiler::InterpreterCall(spu_opcode_t op) }; c->mov(SPU_OFF_32(pc), m_pos); - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(gate)), asmjit::kFuncConvHost, asmjit::FuncBuilder3()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(gate)), asmjit::FuncSignature3(asmjit::CallConv::kIdHost)); call->setArg(0, *cpu); call->setArg(1, asmjit::imm_u(op.opcode)); - call->setArg(2, asmjit::imm_ptr(asmjit_cast(s_spu_interpreter.decode(op.opcode)))); + call->setArg(2, asmjit::imm_ptr(asmjit::Internal::ptr_cast(s_spu_interpreter.decode(op.opcode)))); call->setRet(0, *addr); // return immediately if an error occured @@ -395,7 +401,7 @@ void spu_recompiler::FunctionCall() } }; - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(gate)), asmjit::kFuncConvHost, asmjit::FuncBuilder2()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(gate)), asmjit::FuncSignature2(asmjit::CallConv::kIdHost)); call->setArg(0, *cpu); call->setArg(1, asmjit::imm_u(spu_branch_target(m_pos + 4))); call->setRet(0, *addr); @@ -541,7 +547,7 @@ void spu_recompiler::ROT(spu_opcode_t op) c->lea(*qw0, SPU_OFF_128(gpr, op.rt)); c->lea(*qw1, SPU_OFF_128(gpr, op.ra)); c->lea(*qw2, SPU_OFF_128(gpr, op.rb)); - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(body)), asmjit::kFuncConvHost, asmjit::FuncBuilder3()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(body)), asmjit::FuncSignature3(asmjit::CallConv::kIdHost)); call->setArg(0, *qw0); call->setArg(1, *qw1); call->setArg(2, *qw2); @@ -568,7 +574,7 @@ void spu_recompiler::ROTM(spu_opcode_t op) c->lea(*qw0, SPU_OFF_128(gpr, op.rt)); c->lea(*qw1, SPU_OFF_128(gpr, op.ra)); c->lea(*qw2, SPU_OFF_128(gpr, op.rb)); - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(body)), asmjit::kFuncConvHost, asmjit::FuncBuilder3()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(body)), asmjit::FuncSignature3(asmjit::CallConv::kIdHost)); call->setArg(0, *qw0); call->setArg(1, *qw1); call->setArg(2, *qw2); @@ -596,7 +602,7 @@ void spu_recompiler::ROTMA(spu_opcode_t op) c->lea(*qw0, SPU_OFF_128(gpr, op.rt)); c->lea(*qw1, SPU_OFF_128(gpr, op.ra)); c->lea(*qw2, SPU_OFF_128(gpr, op.rb)); - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(body)), asmjit::kFuncConvHost, asmjit::FuncBuilder3()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(body)), asmjit::FuncSignature3(asmjit::CallConv::kIdHost)); call->setArg(0, *qw0); call->setArg(1, *qw1); call->setArg(2, *qw2); @@ -624,7 +630,7 @@ void spu_recompiler::SHL(spu_opcode_t op) c->lea(*qw0, SPU_OFF_128(gpr, op.rt)); c->lea(*qw1, SPU_OFF_128(gpr, op.ra)); c->lea(*qw2, SPU_OFF_128(gpr, op.rb)); - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(body)), asmjit::kFuncConvHost, asmjit::FuncBuilder3()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(body)), asmjit::FuncSignature3(asmjit::CallConv::kIdHost)); call->setArg(0, *qw0); call->setArg(1, *qw1); call->setArg(2, *qw2); @@ -651,7 +657,7 @@ void spu_recompiler::ROTH(spu_opcode_t op) //nf c->lea(*qw0, SPU_OFF_128(gpr, op.rt)); c->lea(*qw1, SPU_OFF_128(gpr, op.ra)); c->lea(*qw2, SPU_OFF_128(gpr, op.rb)); - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(body)), asmjit::kFuncConvHost, asmjit::FuncBuilder3()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(body)), asmjit::FuncSignature3(asmjit::CallConv::kIdHost)); call->setArg(0, *qw0); call->setArg(1, *qw1); call->setArg(2, *qw2); @@ -678,7 +684,7 @@ void spu_recompiler::ROTHM(spu_opcode_t op) c->lea(*qw0, SPU_OFF_128(gpr, op.rt)); c->lea(*qw1, SPU_OFF_128(gpr, op.ra)); c->lea(*qw2, SPU_OFF_128(gpr, op.rb)); - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(body)), asmjit::kFuncConvHost, asmjit::FuncBuilder3()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(body)), asmjit::FuncSignature3(asmjit::CallConv::kIdHost)); call->setArg(0, *qw0); call->setArg(1, *qw1); call->setArg(2, *qw2); @@ -706,7 +712,7 @@ void spu_recompiler::ROTMAH(spu_opcode_t op) c->lea(*qw0, SPU_OFF_128(gpr, op.rt)); c->lea(*qw1, SPU_OFF_128(gpr, op.ra)); c->lea(*qw2, SPU_OFF_128(gpr, op.rb)); - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(body)), asmjit::kFuncConvHost, asmjit::FuncBuilder3()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(body)), asmjit::FuncSignature3(asmjit::CallConv::kIdHost)); call->setArg(0, *qw0); call->setArg(1, *qw1); call->setArg(2, *qw2); @@ -734,7 +740,7 @@ void spu_recompiler::SHLH(spu_opcode_t op) c->lea(*qw0, SPU_OFF_128(gpr, op.rt)); c->lea(*qw1, SPU_OFF_128(gpr, op.ra)); c->lea(*qw2, SPU_OFF_128(gpr, op.rb)); - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(body)), asmjit::kFuncConvHost, asmjit::FuncBuilder3()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(body)), asmjit::FuncSignature3(asmjit::CallConv::kIdHost)); call->setArg(0, *qw0); call->setArg(1, *qw1); call->setArg(2, *qw2); @@ -1002,7 +1008,7 @@ void spu_recompiler::STQX(spu_opcode_t op) const XmmLink& vt = XmmGet(op.rt, XmmType::Int); c->pshufb(vt, XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); - c->movdqa(asmjit::host::oword_ptr(*ls, *addr), vt); + c->movdqa(asmjit::x86::oword_ptr(*ls, *addr), vt); c->unuse(*addr); } @@ -1089,7 +1095,7 @@ void spu_recompiler::FSM(spu_opcode_t op) c->mov(*addr, SPU_OFF_32(gpr, op.ra, &v128::_u32, 3)); c->and_(*addr, 0xf); c->shl(*addr, 4); - c->movdqa(vr, asmjit::host::oword_ptr(*qw0, *addr)); + c->movdqa(vr, asmjit::x86::oword_ptr(*qw0, *addr)); c->movdqa(SPU_OFF_128(gpr, op.rt), vr); c->unuse(*addr); c->unuse(*qw0); @@ -1102,7 +1108,7 @@ void spu_recompiler::FSMH(spu_opcode_t op) c->mov(*addr, SPU_OFF_32(gpr, op.ra, &v128::_u32, 3)); c->and_(*addr, 0xff); c->shl(*addr, 4); - c->movdqa(vr, asmjit::host::oword_ptr(*qw0, *addr)); + c->movdqa(vr, asmjit::x86::oword_ptr(*qw0, *addr)); c->movdqa(SPU_OFF_128(gpr, op.rt), vr); c->unuse(*addr); c->unuse(*qw0); @@ -1115,7 +1121,7 @@ void spu_recompiler::FSMB(spu_opcode_t op) c->mov(*addr, SPU_OFF_32(gpr, op.ra, &v128::_u32, 3)); c->and_(*addr, 0xffff); c->shl(*addr, 4); - c->movdqa(vr, asmjit::host::oword_ptr(*qw0, *addr)); + c->movdqa(vr, asmjit::x86::oword_ptr(*qw0, *addr)); c->movdqa(SPU_OFF_128(gpr, op.rt), vr); c->unuse(*addr); c->unuse(*qw0); @@ -1143,7 +1149,7 @@ void spu_recompiler::LQX(spu_opcode_t op) c->and_(*addr, 0x3fff0); const XmmLink& vt = XmmAlloc(); - c->movdqa(vt, asmjit::host::oword_ptr(*ls, *addr)); + c->movdqa(vt, asmjit::x86::oword_ptr(*ls, *addr)); c->pshufb(vt, XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); c->movdqa(SPU_OFF_128(gpr, op.rt), vt); c->unuse(*addr); @@ -1156,7 +1162,7 @@ void spu_recompiler::ROTQBYBI(spu_opcode_t op) c->mov(*addr, SPU_OFF_32(gpr, op.rb, &v128::_u32, 3)); c->and_(*addr, 0xf << 3); c->shl(*addr, 1); - c->pshufb(va, asmjit::host::oword_ptr(*qw0, *addr)); + c->pshufb(va, asmjit::x86::oword_ptr(*qw0, *addr)); c->movdqa(SPU_OFF_128(gpr, op.rt), va); c->unuse(*addr); c->unuse(*qw0); @@ -1171,7 +1177,7 @@ void spu_recompiler::ROTQMBYBI(spu_opcode_t op) c->neg(*addr); c->and_(*addr, 0x1f); c->shl(*addr, 4); - c->pshufb(va, asmjit::host::oword_ptr(*qw0, *addr)); + c->pshufb(va, asmjit::x86::oword_ptr(*qw0, *addr)); c->movdqa(SPU_OFF_128(gpr, op.rt), va); c->unuse(*addr); c->unuse(*qw0); @@ -1184,7 +1190,7 @@ void spu_recompiler::SHLQBYBI(spu_opcode_t op) c->mov(*addr, SPU_OFF_32(gpr, op.rb, &v128::_u32, 3)); c->and_(*addr, 0x1f << 3); c->shl(*addr, 1); - c->pshufb(va, asmjit::host::oword_ptr(*qw0, *addr)); + c->pshufb(va, asmjit::x86::oword_ptr(*qw0, *addr)); c->movdqa(SPU_OFF_128(gpr, op.rt), va); c->unuse(*addr); c->unuse(*qw0); @@ -1200,7 +1206,7 @@ void spu_recompiler::CBX(spu_opcode_t op) const XmmLink& vr = XmmAlloc(); c->movdqa(vr, XmmConst(_mm_set_epi32(0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f))); c->movdqa(SPU_OFF_128(gpr, op.rt), vr); - c->mov(asmjit::host::byte_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), 0x03); + c->mov(asmjit::x86::byte_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), 0x03); c->unuse(*addr); } @@ -1214,7 +1220,7 @@ void spu_recompiler::CHX(spu_opcode_t op) const XmmLink& vr = XmmAlloc(); c->movdqa(vr, XmmConst(_mm_set_epi32(0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f))); c->movdqa(SPU_OFF_128(gpr, op.rt), vr); - c->mov(asmjit::host::word_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), 0x0203); + c->mov(asmjit::x86::word_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), 0x0203); c->unuse(*addr); } @@ -1228,7 +1234,7 @@ void spu_recompiler::CWX(spu_opcode_t op) const XmmLink& vr = XmmAlloc(); c->movdqa(vr, XmmConst(_mm_set_epi32(0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f))); c->movdqa(SPU_OFF_128(gpr, op.rt), vr); - c->mov(asmjit::host::dword_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), 0x00010203); + c->mov(asmjit::x86::dword_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), 0x00010203); c->unuse(*addr); } @@ -1243,7 +1249,7 @@ void spu_recompiler::CDX(spu_opcode_t op) c->movdqa(vr, XmmConst(_mm_set_epi32(0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f))); c->movdqa(SPU_OFF_128(gpr, op.rt), vr); c->mov(*qw0, asmjit::imm_u(0x0001020304050607)); - c->mov(asmjit::host::qword_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), *qw0); + c->mov(asmjit::x86::qword_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), *qw0); c->unuse(*addr); c->unuse(*qw0); } @@ -1303,7 +1309,7 @@ void spu_recompiler::ROTQBY(spu_opcode_t op) c->mov(*addr, SPU_OFF_32(gpr, op.rb, &v128::_u32, 3)); c->and_(*addr, 0xf); c->shl(*addr, 4); - c->pshufb(va, asmjit::host::oword_ptr(*qw0, *addr)); + c->pshufb(va, asmjit::x86::oword_ptr(*qw0, *addr)); c->movdqa(SPU_OFF_128(gpr, op.rt), va); c->unuse(*addr); c->unuse(*qw0); @@ -1317,7 +1323,7 @@ void spu_recompiler::ROTQMBY(spu_opcode_t op) c->neg(*addr); c->and_(*addr, 0x1f); c->shl(*addr, 4); - c->pshufb(va, asmjit::host::oword_ptr(*qw0, *addr)); + c->pshufb(va, asmjit::x86::oword_ptr(*qw0, *addr)); c->movdqa(SPU_OFF_128(gpr, op.rt), va); c->unuse(*addr); c->unuse(*qw0); @@ -1330,7 +1336,7 @@ void spu_recompiler::SHLQBY(spu_opcode_t op) c->mov(*addr, SPU_OFF_32(gpr, op.rb, &v128::_u32, 3)); c->and_(*addr, 0x1f); c->shl(*addr, 4); - c->pshufb(va, asmjit::host::oword_ptr(*qw0, *addr)); + c->pshufb(va, asmjit::x86::oword_ptr(*qw0, *addr)); c->movdqa(SPU_OFF_128(gpr, op.rt), va); c->unuse(*addr); c->unuse(*qw0); @@ -1371,7 +1377,7 @@ void spu_recompiler::CBD(spu_opcode_t op) const XmmLink& vr = XmmAlloc(); c->movdqa(vr, XmmConst(_mm_set_epi32(0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f))); c->movdqa(SPU_OFF_128(gpr, op.rt), vr); - c->mov(asmjit::host::byte_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), 0x03); + c->mov(asmjit::x86::byte_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), 0x03); c->unuse(*addr); } @@ -1396,7 +1402,7 @@ void spu_recompiler::CHD(spu_opcode_t op) const XmmLink& vr = XmmAlloc(); c->movdqa(vr, XmmConst(_mm_set_epi32(0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f))); c->movdqa(SPU_OFF_128(gpr, op.rt), vr); - c->mov(asmjit::host::word_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), 0x0203); + c->mov(asmjit::x86::word_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), 0x0203); c->unuse(*addr); } @@ -1421,7 +1427,7 @@ void spu_recompiler::CWD(spu_opcode_t op) const XmmLink& vr = XmmAlloc(); c->movdqa(vr, XmmConst(_mm_set_epi32(0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f))); c->movdqa(SPU_OFF_128(gpr, op.rt), vr); - c->mov(asmjit::host::dword_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), 0x00010203); + c->mov(asmjit::x86::dword_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), 0x00010203); c->unuse(*addr); } @@ -1447,7 +1453,7 @@ void spu_recompiler::CDD(spu_opcode_t op) c->movdqa(vr, XmmConst(_mm_set_epi32(0x10111213, 0x14151617, 0x18191a1b, 0x1c1d1e1f))); c->movdqa(SPU_OFF_128(gpr, op.rt), vr); c->mov(*qw0, asmjit::imm_u(0x0001020304050607)); - c->mov(asmjit::host::qword_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), *qw0); + c->mov(asmjit::x86::qword_ptr(*cpu, *addr, 0, offset32(&SPUThread::gpr, op.rt)), *qw0); c->unuse(*addr); c->unuse(*qw0); } @@ -1591,7 +1597,7 @@ void spu_recompiler::CLZ(spu_opcode_t op) c->lea(*qw0, SPU_OFF_128(gpr, op.rt)); c->lea(*qw1, SPU_OFF_128(gpr, op.ra)); - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(body)), asmjit::kFuncConvHost, asmjit::FuncBuilder2()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(body)), asmjit::FuncSignature2(asmjit::CallConv::kIdHost)); call->setArg(0, *qw0); call->setArg(1, *qw1); @@ -1874,7 +1880,7 @@ void spu_recompiler::CGX(spu_opcode_t op) //nf c->lea(*qw0, SPU_OFF_128(gpr, op.rt)); c->lea(*qw1, SPU_OFF_128(gpr, op.ra)); c->lea(*qw2, SPU_OFF_128(gpr, op.rb)); - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(body)), asmjit::kFuncConvHost, asmjit::FuncBuilder3()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(body)), asmjit::FuncSignature3(asmjit::CallConv::kIdHost)); call->setArg(0, *qw0); call->setArg(1, *qw1); call->setArg(2, *qw2); @@ -1894,7 +1900,7 @@ void spu_recompiler::BGX(spu_opcode_t op) //nf c->lea(*qw0, SPU_OFF_128(gpr, op.rt)); c->lea(*qw1, SPU_OFF_128(gpr, op.ra)); c->lea(*qw2, SPU_OFF_128(gpr, op.rb)); - asmjit::X86CallNode* call = c->call(asmjit::imm_ptr(asmjit_cast(body)), asmjit::kFuncConvHost, asmjit::FuncBuilder3()); + asmjit::CCFuncCall* call = c->call(asmjit::imm_ptr(asmjit::Internal::ptr_cast(body)), asmjit::FuncSignature3(asmjit::CallConv::kIdHost)); call->setArg(0, *qw0); call->setArg(1, *qw1); call->setArg(2, *qw2); @@ -2142,7 +2148,7 @@ void spu_recompiler::BRZ(spu_opcode_t op) c->cmp(SPU_OFF_32(gpr, op.rt, &v128::_u32, 3), 0); - if (labels[target / 4].isInitialized()) + if (labels[target / 4].isValid()) { c->je(labels[target / 4]); } @@ -2163,7 +2169,7 @@ void spu_recompiler::STQA(spu_opcode_t op) { const XmmLink& vt = XmmGet(op.rt, XmmType::Int); c->pshufb(vt, XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); - c->movdqa(asmjit::host::oword_ptr(*ls, spu_ls_target(0, op.i16)), vt); + c->movdqa(asmjit::x86::oword_ptr(*ls, spu_ls_target(0, op.i16)), vt); } void spu_recompiler::BRNZ(spu_opcode_t op) @@ -2174,7 +2180,7 @@ void spu_recompiler::BRNZ(spu_opcode_t op) c->cmp(SPU_OFF_32(gpr, op.rt, &v128::_u32, 3), 0); - if (labels[target / 4].isInitialized()) + if (labels[target / 4].isValid()) { c->jne(labels[target / 4]); } @@ -2199,7 +2205,7 @@ void spu_recompiler::BRHZ(spu_opcode_t op) c->cmp(SPU_OFF_16(gpr, op.rt, &v128::_u16, 6), 0); - if (labels[target / 4].isInitialized()) + if (labels[target / 4].isValid()) { c->je(labels[target / 4]); } @@ -2224,7 +2230,7 @@ void spu_recompiler::BRHNZ(spu_opcode_t op) c->cmp(SPU_OFF_16(gpr, op.rt, &v128::_u16, 6), 0); - if (labels[target / 4].isInitialized()) + if (labels[target / 4].isValid()) { c->jne(labels[target / 4]); } @@ -2245,7 +2251,7 @@ void spu_recompiler::STQR(spu_opcode_t op) { const XmmLink& vt = XmmGet(op.rt, XmmType::Int); c->pshufb(vt, XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); - c->movdqa(asmjit::host::oword_ptr(*ls, spu_ls_target(m_pos, op.i16)), vt); + c->movdqa(asmjit::x86::oword_ptr(*ls, spu_ls_target(m_pos, op.i16)), vt); } void spu_recompiler::BRA(spu_opcode_t op) @@ -2254,7 +2260,7 @@ void spu_recompiler::BRA(spu_opcode_t op) if (target == m_pos) fmt::throw_exception("Branch-to-self (0x%05x)" HERE, target); - if (labels[target / 4].isInitialized()) + if (labels[target / 4].isValid()) { c->jmp(labels[target / 4]); } @@ -2274,7 +2280,7 @@ void spu_recompiler::BRA(spu_opcode_t op) void spu_recompiler::LQA(spu_opcode_t op) { const XmmLink& vt = XmmAlloc(); - c->movdqa(vt, asmjit::host::oword_ptr(*ls, spu_ls_target(0, op.i16))); + c->movdqa(vt, asmjit::x86::oword_ptr(*ls, spu_ls_target(0, op.i16))); c->pshufb(vt, XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); c->movdqa(SPU_OFF_128(gpr, op.rt), vt); } @@ -2302,7 +2308,7 @@ void spu_recompiler::BR(spu_opcode_t op) if (target == m_pos) { c->mov(*addr, target | 0x2000000); - //c->cmp(asmjit::host::dword_ptr(*ls, m_pos), 0x32); // compare instruction opcode with BR-to-self + //c->cmp(asmjit::x86::dword_ptr(*ls, m_pos), 0x32); // compare instruction opcode with BR-to-self //c->je(labels[target / 4]); c->lock().or_(SPU_OFF_32(state), static_cast(cpu_flag::stop + cpu_flag::ret)); c->jmp(*end); @@ -2310,7 +2316,7 @@ void spu_recompiler::BR(spu_opcode_t op) return; } - if (labels[target / 4].isInitialized()) + if (labels[target / 4].isValid()) { c->jmp(labels[target / 4]); } @@ -2359,7 +2365,7 @@ void spu_recompiler::BRSL(spu_opcode_t op) void spu_recompiler::LQR(spu_opcode_t op) { const XmmLink& vt = XmmAlloc(); - c->movdqa(vt, asmjit::host::oword_ptr(*ls, spu_ls_target(m_pos, op.i16))); + c->movdqa(vt, asmjit::x86::oword_ptr(*ls, spu_ls_target(m_pos, op.i16))); c->pshufb(vt, XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); c->movdqa(SPU_OFF_128(gpr, op.rt), vt); } @@ -2474,7 +2480,7 @@ void spu_recompiler::STQD(spu_opcode_t op) const XmmLink& vt = XmmGet(op.rt, XmmType::Int); c->pshufb(vt, XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); - c->movdqa(asmjit::host::oword_ptr(*ls, *addr), vt); + c->movdqa(asmjit::x86::oword_ptr(*ls, *addr), vt); c->unuse(*addr); } @@ -2485,7 +2491,7 @@ void spu_recompiler::LQD(spu_opcode_t op) c->and_(*addr, 0x3fff0); const XmmLink& vt = XmmAlloc(); - c->movdqa(vt, asmjit::host::oword_ptr(*ls, *addr)); + c->movdqa(vt, asmjit::x86::oword_ptr(*ls, *addr)); c->pshufb(vt, XmmConst(_mm_set_epi32(0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f))); c->movdqa(SPU_OFF_128(gpr, op.rt), vt); c->unuse(*addr); diff --git a/rpcs3/Emu/Cell/SPUASMJITRecompiler.h b/rpcs3/Emu/Cell/SPUASMJITRecompiler.h index 2055a778ca..f65363a61f 100644 --- a/rpcs3/Emu/Cell/SPUASMJITRecompiler.h +++ b/rpcs3/Emu/Cell/SPUASMJITRecompiler.h @@ -5,9 +5,10 @@ namespace asmjit { struct JitRuntime; + struct CodeHolder; struct X86Compiler; - struct X86GpVar; - struct X86XmmVar; + struct X86Gp; + struct X86Xmm; struct X86Mem; struct Label; } @@ -25,17 +26,18 @@ public: private: // emitter: asmjit::X86Compiler* c; + asmjit::CodeHolder* codeHolder; // input: - asmjit::X86GpVar* cpu; - asmjit::X86GpVar* ls; + asmjit::X86Gp* cpu; + asmjit::X86Gp* ls; // temporary: - asmjit::X86GpVar* addr; - asmjit::X86GpVar* qw0; - asmjit::X86GpVar* qw1; - asmjit::X86GpVar* qw2; - std::array vec; + asmjit::X86Gp* addr; + asmjit::X86Gp* qw0; + asmjit::X86Gp* qw1; + asmjit::X86Gp* qw2; + std::array vec; // labels: asmjit::Label* labels; // array[0x10000] @@ -44,10 +46,10 @@ private: class XmmLink { - asmjit::X86XmmVar* m_var; + asmjit::X86Xmm* m_var; public: - XmmLink(asmjit::X86XmmVar*& xmm_var) + XmmLink(asmjit::X86Xmm*& xmm_var) : m_var(xmm_var) { xmm_var = nullptr; @@ -55,7 +57,7 @@ private: XmmLink(XmmLink&&) = default; // MoveConstructible + delete copy constructor and copy/move operators - operator asmjit::X86XmmVar&() const + operator asmjit::X86Xmm&() const { return *m_var; } diff --git a/rpcs3/Gui/AboutDialog.h b/rpcs3/Gui/AboutDialog.h index 4ad3de0183..02869bd25e 100644 --- a/rpcs3/Gui/AboutDialog.h +++ b/rpcs3/Gui/AboutDialog.h @@ -42,7 +42,7 @@ public: wxStaticText* t_section1 = new wxStaticText(this, wxID_ANY, fmt::FromUTF8(u8"\nDevelopers:\n\n¬DH\n¬AlexAltea\n¬Hykem\nOil\nNekotekina\nBigpet\n¬gopalsr83\n¬tambry\nvlj\nkd-11\njarveson\nraven02\nAniLeo\ncornytrace\nssshadow\nNuman\n")); wxStaticText* t_section2 = new wxStaticText(this, wxID_ANY, - fmt::FromUTF8(u8"\nContributors:\n\nBlackDaemon\nelisha464\nAishou\nkrofna\nxsacha\ndanilaml\nunknownbrackets\nZangetsu38\nlioncash\nachurch\ndarkf\nSyphurith\nBlaypeg\nSurvanium90\ngeorgemoralis\nikki84\n")); + fmt::FromUTF8(u8"\nContributors:\n\nBlackDaemon\nelisha464\nAishou\nkrofna\nxsacha\ndanilaml\nunknownbrackets\nZangetsu38\nlioncash\nachurch\ndarkf\nSyphurith\nBlaypeg\nSurvanium90\ngeorgemoralis\nikki84\nhcorion\n")); wxStaticText* t_section3 = new wxStaticText(this, wxID_ANY, fmt::FromUTF8(u8"\nSupporters:\n\nHoward Garrison\nEXPotemkin\nMarko V.\ndanhp\nJake (5315825)\nIan Reid\nTad Sherlock\nTyler Friesen\nFolzar\nPayton Williams\nRedPill Australia\nyanghong\nMohammed El-Serougi\nДима ~Ximer13~ Кулин\nJames Reed\nBaroqueSonata\n")); diff --git a/rpcs3/Gui/GLGSFrame.cpp b/rpcs3/Gui/GLGSFrame.cpp index d2de2936d0..01fe961ac0 100644 --- a/rpcs3/Gui/GLGSFrame.cpp +++ b/rpcs3/Gui/GLGSFrame.cpp @@ -2,7 +2,6 @@ #include "stdafx_gui.h" #include "Utilities/Config.h" #include "GLGSFrame.h" -#include "config.h" #include extern cfg::bool_entry g_cfg_rsx_debug_output;