From 4173cd587659d08dc2900546149cdf4f5ffcd7f8 Mon Sep 17 00:00:00 2001 From: Sonicadvance1 <sonicadvance1@gmail.com> Date: Wed, 24 Mar 2010 22:51:06 +0000 Subject: [PATCH] Disable divwux until we find out what's wrong with it, enable subfcx, and also JIT64 now sets cr[0] correctly. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5233 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Core/Src/PowerPC/Jit64/JitAsm.cpp | 21 +++++++++++++++++-- .../Core/Src/PowerPC/Jit64/Jit_Integer.cpp | 6 +----- Source/Plugins/Plugin_GCPad/Src/SConscript | 3 +++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/Source/Core/Core/Src/PowerPC/Jit64/JitAsm.cpp b/Source/Core/Core/Src/PowerPC/Jit64/JitAsm.cpp index 7d525a5c6d..98f258dfcb 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/JitAsm.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/JitAsm.cpp @@ -217,12 +217,29 @@ void Jit64AsmRoutineManager::GenerateCommon() FixupBranch pLesser = J_CC(CC_L); FixupBranch pGreater = J_CC(CC_G); MOV(8, M(&PowerPC::ppcState.cr_fast[0]), Imm8(0x2)); // _x86Reg == 0 - RET(); + FixupBranch continue1 = J(); + SetJumpTarget(pGreater); MOV(8, M(&PowerPC::ppcState.cr_fast[0]), Imm8(0x4)); // _x86Reg > 0 - RET(); + FixupBranch continue2 = J(); + SetJumpTarget(pLesser); MOV(8, M(&PowerPC::ppcState.cr_fast[0]), Imm8(0x8)); // _x86Reg < 0 + + SetJumpTarget(continue1); + SetJumpTarget(continue2); + + // cr[0] |= SPR_XER & ~(0xFFFFFFFE) + + MOV(32, R(EAX), M(&PowerPC::ppcState.spr[SPR_XER])); + + AND(32, R(ECX), Imm32(0xFFFFFFFE)); + NOT(32, R(ECX)); + AND(32, R(EAX), R(ECX)); + + MOVSX(32, 8, ECX, M(&PowerPC::ppcState.cr_fast[0])); + OR(32, R(ECX), R(EAX)); + MOV(8, M(&PowerPC::ppcState.cr_fast[0]), R(ECX)); RET(); fifoDirectWrite8 = AlignCode4(); diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp index a84ec60c48..682bd54d1f 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_Integer.cpp @@ -389,8 +389,6 @@ void Jit64::subfcx(UGeckoInstruction inst) { INSTRUCTION_START; JITDISABLE(Integer) - Default(inst); - return; int a = inst.RA, b = inst.RB, d = inst.RD; gpr.FlushLockX(ECX); gpr.Lock(a, b, d); @@ -449,9 +447,6 @@ void Jit64::subfcx(UGeckoInstruction inst) if (inst.Rc) { MOV(32, R(EAX), gpr.R(d)); CALL((u8*)asm_routines.computeRc); - - // Doesn't yet work for 64bit machines - //CALL((u8*)asm_routines.computeCr); } } @@ -561,6 +556,7 @@ void Jit64::divwux(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(Integer) + Default(inst); return; int a = inst.RA, b = inst.RB, d = inst.RD; gpr.FlushLockX(EDX); gpr.Lock(a, b, d); diff --git a/Source/Plugins/Plugin_GCPad/Src/SConscript b/Source/Plugins/Plugin_GCPad/Src/SConscript index 4c07501ca4..4ae051f59f 100644 --- a/Source/Plugins/Plugin_GCPad/Src/SConscript +++ b/Source/Plugins/Plugin_GCPad/Src/SConscript @@ -25,4 +25,7 @@ padenv.Append( LIBS = [ 'inputcommon', 'common', ], ) +if sys.platform == 'darwin': + padenv['FRAMEWORKS'] = ['CoreFoundation', 'System' ] + padenv.SharedLibrary(env['plugin_dir']+name, files)