MIPS3: X64 DRC Compile with MSVC

This commit is contained in:
Marcos Medeiros 2015-05-14 22:58:27 +00:00
parent e2a964357b
commit 424f646b8b
3 changed files with 15 additions and 3 deletions

View File

@ -29,6 +29,7 @@
namespace mips
{
mips3_x64::mips3_x64(mips3 *interpreter) : CodeGenerator(1024 * 1024 * 16)
{
m_core = interpreter;
@ -469,7 +470,8 @@ void mips3_x64::fallback(uint32_t opcode, void (mips3::*f)(uint32_t))
mov(rdi, (size_t) m_core);
mov(esi, opcode);
#endif
mov(rax, (size_t) (void*)f);
mov(rax, (size_t) (void*&)f);
call(rax);
}

View File

@ -30,7 +30,16 @@
#define HI_ref ((size_t)&m_core->m_state.hi)
#define R_ref(n) ((size_t)&m_core->m_state.r[n])
#define ADR(n) ((size_t)&n)
namespace mips {
template<class C, class R, typename...Args>
size_t get_method_addr(R (C::*f)(Args...)) {
return reinterpret_cast<size_t>((void* &)f);
}
}
#define F_ADR(f) ((size_t)(void*)&f)
#define M_ADR(f) (mips::get_method_addr(&f))
#define FPR_ref(n) ((size_t)&m_core->m_state.cpr[1][n])
#define FCR_ref(n) ((size_t)&m_core->m_state.fcr[n])

View File

@ -24,7 +24,8 @@ namespace mips
add(rsi, RS_x);\
and_(rsi, ~((uint64_t)ignore));\
lea(rdx, eaddr);\
mov(rax, F_ADR(mips3::translate));\
size_t madr = M_ADR(mips3::translate);\
mov(rax, madr);\
call(rax);\
mov(rdx, eaddr);\
} while (0)
@ -39,7 +40,7 @@ namespace mips
and_(rsi, ~((uint64_t)ignore));\
lea(rdx, eaddr);\
mov(vaddr, rsi);\
mov(rax, F_ADR(mips3::translate));\
mov(rax, M_ADR(mips3::translate));\
call(rax);\
mov(rdx, eaddr);\
mov(rcx, vaddr);\