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
This commit is contained in:
Sonicadvance1 2010-03-24 22:51:06 +00:00
parent 5ff07aace6
commit 4173cd5876
3 changed files with 23 additions and 7 deletions

View File

@ -217,12 +217,29 @@ void Jit64AsmRoutineManager::GenerateCommon()
FixupBranch pLesser = J_CC(CC_L); FixupBranch pLesser = J_CC(CC_L);
FixupBranch pGreater = J_CC(CC_G); FixupBranch pGreater = J_CC(CC_G);
MOV(8, M(&PowerPC::ppcState.cr_fast[0]), Imm8(0x2)); // _x86Reg == 0 MOV(8, M(&PowerPC::ppcState.cr_fast[0]), Imm8(0x2)); // _x86Reg == 0
RET(); FixupBranch continue1 = J();
SetJumpTarget(pGreater); SetJumpTarget(pGreater);
MOV(8, M(&PowerPC::ppcState.cr_fast[0]), Imm8(0x4)); // _x86Reg > 0 MOV(8, M(&PowerPC::ppcState.cr_fast[0]), Imm8(0x4)); // _x86Reg > 0
RET(); FixupBranch continue2 = J();
SetJumpTarget(pLesser); SetJumpTarget(pLesser);
MOV(8, M(&PowerPC::ppcState.cr_fast[0]), Imm8(0x8)); // _x86Reg < 0 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(); RET();
fifoDirectWrite8 = AlignCode4(); fifoDirectWrite8 = AlignCode4();

View File

@ -389,8 +389,6 @@ void Jit64::subfcx(UGeckoInstruction inst)
{ {
INSTRUCTION_START; INSTRUCTION_START;
JITDISABLE(Integer) JITDISABLE(Integer)
Default(inst);
return;
int a = inst.RA, b = inst.RB, d = inst.RD; int a = inst.RA, b = inst.RB, d = inst.RD;
gpr.FlushLockX(ECX); gpr.FlushLockX(ECX);
gpr.Lock(a, b, d); gpr.Lock(a, b, d);
@ -449,9 +447,6 @@ void Jit64::subfcx(UGeckoInstruction inst)
if (inst.Rc) { if (inst.Rc) {
MOV(32, R(EAX), gpr.R(d)); MOV(32, R(EAX), gpr.R(d));
CALL((u8*)asm_routines.computeRc); 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 INSTRUCTION_START
JITDISABLE(Integer) JITDISABLE(Integer)
Default(inst); return;
int a = inst.RA, b = inst.RB, d = inst.RD; int a = inst.RA, b = inst.RB, d = inst.RD;
gpr.FlushLockX(EDX); gpr.FlushLockX(EDX);
gpr.Lock(a, b, d); gpr.Lock(a, b, d);

View File

@ -25,4 +25,7 @@ padenv.Append(
LIBS = [ 'inputcommon', 'common', ], LIBS = [ 'inputcommon', 'common', ],
) )
if sys.platform == 'darwin':
padenv['FRAMEWORKS'] = ['CoreFoundation', 'System' ]
padenv.SharedLibrary(env['plugin_dir']+name, files) padenv.SharedLibrary(env['plugin_dir']+name, files)