Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[ARM] Add ps_sum0 and a disabled ps_madd.
  • Loading branch information
Sonicadvance1 committed Aug 19, 2013
1 parent 42de733 commit 8094037
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 8 deletions.
2 changes: 2 additions & 0 deletions Source/Core/Core/Src/PowerPC/JitArm32/Jit.h
Expand Up @@ -210,6 +210,8 @@ class JitArm : public JitBase, public ArmGen::ARMXCodeBlock

// Paired Singles
void ps_add(UGeckoInstruction _inst);
void ps_sum0(UGeckoInstruction _inst);
void ps_madd(UGeckoInstruction _inst);
void ps_sub(UGeckoInstruction _inst);
void ps_mul(UGeckoInstruction _inst);
};
Expand Down
71 changes: 65 additions & 6 deletions Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Paired.cpp
Expand Up @@ -43,12 +43,71 @@ void JitArm::ps_add(UGeckoInstruction inst)
ARMReg vA1 = fpr.R1(a);
ARMReg vB0 = fpr.R0(b);
ARMReg vB1 = fpr.R1(b);
ARMReg vD0 = fpr.R0(d, false);
ARMReg vD1 = fpr.R1(d, false);
ARMReg vD0 = fpr.R0(d);
ARMReg vD1 = fpr.R1(d);

VADD(vD0, vA0, vB0);
VADD(vD1, vA1, vB1);
}

// Wrong, THP videos like SMS and Ikaruga show artifacts
void JitArm::ps_madd(UGeckoInstruction inst)
{
INSTRUCTION_START
JITDISABLE(Paired)

Default(inst); return;

u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD;

if (inst.Rc) {
Default(inst); return;
}
ARMReg vA0 = fpr.R0(a);
ARMReg vA1 = fpr.R1(a);
ARMReg vB0 = fpr.R0(b);
ARMReg vB1 = fpr.R1(b);
ARMReg vC0 = fpr.R0(c);
ARMReg vC1 = fpr.R1(c);
ARMReg vD0 = fpr.R0(d);
ARMReg vD1 = fpr.R1(d);

ARMReg V0 = fpr.GetReg();
ARMReg V1 = fpr.GetReg();

VMOV(V0, vC0);
VMOV(V1, vC1);

VMLA(V0, vA0, vB0);
VMLA(V1, vA1, vB1);

VMOV(vD0, V0);
VMOV(vD1, V1);

fpr.Unlock(V0);
fpr.Unlock(V1);
}

void JitArm::ps_sum0(UGeckoInstruction inst)
{
INSTRUCTION_START
JITDISABLE(Paired)

u32 a = inst.FA, b = inst.FB, c = inst.FC, d = inst.FD;

if (inst.Rc) {
Default(inst); return;
}
ARMReg vA0 = fpr.R0(a);
ARMReg vB1 = fpr.R1(b);
ARMReg vC1 = fpr.R1(c);
ARMReg vD0 = fpr.R0(d);
ARMReg vD1 = fpr.R1(d);

VADD(vD0, vA0, vB1);
VMOV(vD1, vC1);
}

void JitArm::ps_sub(UGeckoInstruction inst)
{
INSTRUCTION_START
Expand All @@ -62,8 +121,8 @@ void JitArm::ps_sub(UGeckoInstruction inst)
ARMReg vA1 = fpr.R1(a);
ARMReg vB0 = fpr.R0(b);
ARMReg vB1 = fpr.R1(b);
ARMReg vD0 = fpr.R0(d, false);
ARMReg vD1 = fpr.R1(d, false);
ARMReg vD0 = fpr.R0(d);
ARMReg vD1 = fpr.R1(d);

VSUB(vD0, vA0, vB0);
VSUB(vD1, vA1, vB1);
Expand All @@ -81,8 +140,8 @@ void JitArm::ps_mul(UGeckoInstruction inst)
ARMReg vA1 = fpr.R1(a);
ARMReg vC0 = fpr.R0(c);
ARMReg vC1 = fpr.R1(c);
ARMReg vD0 = fpr.R0(d, false);
ARMReg vD1 = fpr.R1(d, false);
ARMReg vD0 = fpr.R0(d);
ARMReg vD1 = fpr.R1(d);

VMUL(vD0, vA0, vC0);
VMUL(vD1, vA1, vC1);
Expand Down
4 changes: 2 additions & 2 deletions Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Tables.cpp
Expand Up @@ -143,7 +143,7 @@ static GekkoOPTemplate table4[] =

static GekkoOPTemplate table4_2[] =
{
{10, &JitArm::Default}, //"ps_sum0", OPTYPE_PS, 0}},
{10, &JitArm::ps_sum0}, //"ps_sum0", OPTYPE_PS, 0}},
{11, &JitArm::Default}, //"ps_sum1", OPTYPE_PS, 0}},
{12, &JitArm::Default}, //"ps_muls0", OPTYPE_PS, 0}},
{13, &JitArm::Default}, //"ps_muls1", OPTYPE_PS, 0}},
Expand All @@ -157,7 +157,7 @@ static GekkoOPTemplate table4_2[] =
{25, &JitArm::ps_mul}, //"ps_mul", OPTYPE_PS, 0}},
{26, &JitArm::Default}, //"ps_rsqrte", OPTYPE_PS, 0, 1}},
{28, &JitArm::Default}, //"ps_msub", OPTYPE_PS, 0}},
{29, &JitArm::Default}, //"ps_madd", OPTYPE_PS, 0}},
{29, &JitArm::ps_madd}, //"ps_madd", OPTYPE_PS, 0}},
{30, &JitArm::Default}, //"ps_nmsub", OPTYPE_PS, 0}},
{31, &JitArm::Default}, //"ps_nmadd", OPTYPE_PS, 0}},
};
Expand Down

0 comments on commit 8094037

Please sign in to comment.