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)