mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-02-19 13:42:00 +00:00
ARMJIT: disable vi2f, it seems buggy. preliminary disabled impl of vcrsp.t.
This commit is contained in:
parent
5468637278
commit
2f0cdc6988
@ -112,6 +112,18 @@ enum NormalOp {
|
|||||||
nrmXCHG,
|
nrmXCHG,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
CMP_EQ = 0,
|
||||||
|
CMP_LT = 1,
|
||||||
|
CMP_LE = 2,
|
||||||
|
CMP_UNORD = 3,
|
||||||
|
CMP_NEQ = 4,
|
||||||
|
CMP_NLT = 5,
|
||||||
|
CMP_NLE = 6,
|
||||||
|
CMP_ORD = 7,
|
||||||
|
};
|
||||||
|
|
||||||
class XEmitter;
|
class XEmitter;
|
||||||
|
|
||||||
// RIP addressing does not benefit from micro op fusion on Core arch
|
// RIP addressing does not benefit from micro op fusion on Core arch
|
||||||
@ -231,18 +243,6 @@ struct FixupBranch
|
|||||||
int type; //0 = 8bit 1 = 32bit
|
int type; //0 = 8bit 1 = 32bit
|
||||||
};
|
};
|
||||||
|
|
||||||
enum SSECompare
|
|
||||||
{
|
|
||||||
EQ = 0,
|
|
||||||
LT,
|
|
||||||
LE,
|
|
||||||
UNORD,
|
|
||||||
NEQ,
|
|
||||||
NLT,
|
|
||||||
NLE,
|
|
||||||
ORD,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef const u8* JumpTarget;
|
typedef const u8* JumpTarget;
|
||||||
|
|
||||||
class XEmitter
|
class XEmitter
|
||||||
@ -468,6 +468,15 @@ public:
|
|||||||
void CMPSS(X64Reg regOp, OpArg arg, u8 compare);
|
void CMPSS(X64Reg regOp, OpArg arg, u8 compare);
|
||||||
void CMPSD(X64Reg regOp, OpArg arg, u8 compare);
|
void CMPSD(X64Reg regOp, OpArg arg, u8 compare);
|
||||||
|
|
||||||
|
inline void CMPEQSS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_EQ); }
|
||||||
|
inline void CMPLTSS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_LT); }
|
||||||
|
inline void CMPLESS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_LE); }
|
||||||
|
inline void CMPUNORDSS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_UNORD); }
|
||||||
|
inline void CMPNEQSS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_NEQ); }
|
||||||
|
inline void CMPNLTSS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_NLT); }
|
||||||
|
inline void CMPORDSS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_ORD); }
|
||||||
|
|
||||||
|
|
||||||
// I don't think these exist
|
// I don't think these exist
|
||||||
/*
|
/*
|
||||||
void ANDSD(X64Reg regOp, OpArg arg);
|
void ANDSD(X64Reg regOp, OpArg arg);
|
||||||
|
@ -29,6 +29,8 @@
|
|||||||
#include "ArmRegCache.h"
|
#include "ArmRegCache.h"
|
||||||
|
|
||||||
|
|
||||||
|
const bool disablePrefixes = false;
|
||||||
|
|
||||||
// All functions should have CONDITIONAL_DISABLE, so we can narrow things down to a file quickly.
|
// All functions should have CONDITIONAL_DISABLE, so we can narrow things down to a file quickly.
|
||||||
// Currently known non working ones should have DISABLE.
|
// Currently known non working ones should have DISABLE.
|
||||||
|
|
||||||
@ -78,7 +80,6 @@ namespace MIPSComp
|
|||||||
int regnum = (op >> 24) & 3;
|
int regnum = (op >> 24) & 3;
|
||||||
switch (regnum) {
|
switch (regnum) {
|
||||||
case 0: // S
|
case 0: // S
|
||||||
//ERROR_LOG(CPU, "VPFX - S %08x %i", data, regnum);
|
|
||||||
js.prefixS = data;
|
js.prefixS = data;
|
||||||
js.prefixSFlag = ArmJitState::PREFIX_KNOWN_DIRTY;
|
js.prefixSFlag = ArmJitState::PREFIX_KNOWN_DIRTY;
|
||||||
break;
|
break;
|
||||||
@ -437,7 +438,7 @@ namespace MIPSComp
|
|||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
|
|
||||||
// WARNING: No prefix support!
|
// WARNING: No prefix support!
|
||||||
if (js.HasUnknownPrefix()) {
|
if (js.HasUnknownPrefix() || disablePrefixes) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -472,7 +473,7 @@ namespace MIPSComp
|
|||||||
void Jit::Comp_VIdt(u32 op) {
|
void Jit::Comp_VIdt(u32 op) {
|
||||||
CONDITIONAL_DISABLE
|
CONDITIONAL_DISABLE
|
||||||
|
|
||||||
if (js.HasUnknownPrefix()) {
|
if (js.HasUnknownPrefix() || disablePrefixes) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -510,7 +511,7 @@ namespace MIPSComp
|
|||||||
{
|
{
|
||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
|
|
||||||
if (js.HasUnknownPrefix()) {
|
if (js.HasUnknownPrefix() || disablePrefixes) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -554,10 +555,9 @@ namespace MIPSComp
|
|||||||
fpr.ReleaseSpillLocksAndDiscardTemps();
|
fpr.ReleaseSpillLocksAndDiscardTemps();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Jit::Comp_VDot(u32 op)
|
void Jit::Comp_VDot(u32 op) {
|
||||||
{
|
|
||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
if (js.HasUnknownPrefix()) {
|
if (js.HasUnknownPrefix() || disablePrefixes) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -567,9 +567,10 @@ namespace MIPSComp
|
|||||||
VectorSize sz = GetVecSize(op);
|
VectorSize sz = GetVecSize(op);
|
||||||
|
|
||||||
// TODO: Force read one of them into regs? probably not.
|
// TODO: Force read one of them into regs? probably not.
|
||||||
u8 sregs[4], tregs[4];
|
u8 sregs[4], tregs[4], dregs[1];
|
||||||
GetVectorRegs(sregs, sz, vs);
|
GetVectorRegsPrefixS(sregs, sz, vs);
|
||||||
GetVectorRegs(tregs, sz, vt);
|
GetVectorRegsPrefixT(tregs, sz, vt);
|
||||||
|
GetVectorRegsPrefixD(dregs, V_Single, vd);
|
||||||
|
|
||||||
// TODO: applyprefixST here somehow (shuffle, etc...)
|
// TODO: applyprefixST here somehow (shuffle, etc...)
|
||||||
fpr.MapRegsAndSpillLockV(sregs, sz, 0);
|
fpr.MapRegsAndSpillLockV(sregs, sz, 0);
|
||||||
@ -583,19 +584,24 @@ namespace MIPSComp
|
|||||||
}
|
}
|
||||||
fpr.ReleaseSpillLocksAndDiscardTemps();
|
fpr.ReleaseSpillLocksAndDiscardTemps();
|
||||||
|
|
||||||
fpr.MapRegV(vd, MAP_NOINIT | MAP_DIRTY);
|
fpr.MapRegV(dregs[0], MAP_NOINIT | MAP_DIRTY);
|
||||||
|
|
||||||
// TODO: applyprefixD here somehow (write mask etc..)
|
// TODO: applyprefixD here somehow (write mask etc..)
|
||||||
VMOV(fpr.V(vd), S0);
|
VMOV(fpr.V(dregs[0]), S0);
|
||||||
|
ApplyPrefixD(dregs, V_Single);
|
||||||
|
fpr.ReleaseSpillLocksAndDiscardTemps();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Jit::Comp_VHdp(u32 op) {
|
||||||
|
// Similar to vdot
|
||||||
|
DISABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Jit::Comp_VecDo3(u32 op) {
|
void Jit::Comp_VecDo3(u32 op) {
|
||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
|
|
||||||
// WARNING: No prefix support!
|
if (js.HasUnknownPrefix() || disablePrefixes) {
|
||||||
|
|
||||||
//if (js.MayHavePrefix()) {
|
|
||||||
if (js.HasUnknownPrefix()) {
|
|
||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -671,7 +677,7 @@ namespace MIPSComp
|
|||||||
void Jit::Comp_VV2Op(u32 op) {
|
void Jit::Comp_VV2Op(u32 op) {
|
||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
|
|
||||||
if (js.HasUnknownPrefix()) {
|
if (js.HasUnknownPrefix() || disablePrefixes) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -796,8 +802,9 @@ namespace MIPSComp
|
|||||||
|
|
||||||
void Jit::Comp_Vi2f(u32 op) {
|
void Jit::Comp_Vi2f(u32 op) {
|
||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
|
DISABLE;
|
||||||
|
|
||||||
if (js.HasUnknownPrefix())
|
if (js.HasUnknownPrefix() || disablePrefixes)
|
||||||
DISABLE;
|
DISABLE;
|
||||||
|
|
||||||
VectorSize sz = GetVecSize(op);
|
VectorSize sz = GetVecSize(op);
|
||||||
@ -840,8 +847,6 @@ namespace MIPSComp
|
|||||||
fpr.ReleaseSpillLocksAndDiscardTemps();
|
fpr.ReleaseSpillLocksAndDiscardTemps();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Jit::Comp_Mftv(u32 op)
|
void Jit::Comp_Mftv(u32 op)
|
||||||
{
|
{
|
||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
@ -968,7 +973,7 @@ namespace MIPSComp
|
|||||||
void Jit::Comp_VScl(u32 op) {
|
void Jit::Comp_VScl(u32 op) {
|
||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
|
|
||||||
if (js.HasUnknownPrefix()) {
|
if (js.HasUnknownPrefix() || disablePrefixes) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1018,7 +1023,7 @@ namespace MIPSComp
|
|||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
|
|
||||||
// TODO: This probably ignores prefixes?
|
// TODO: This probably ignores prefixes?
|
||||||
if (js.MayHavePrefix()) {
|
if (js.MayHavePrefix() || disablePrefixes) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1064,8 +1069,9 @@ namespace MIPSComp
|
|||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
|
|
||||||
// TODO: This probably ignores prefixes? Or maybe uses D?
|
// TODO: This probably ignores prefixes? Or maybe uses D?
|
||||||
if (js.MayHavePrefix())
|
if (js.MayHavePrefix() || disablePrefixes) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
|
}
|
||||||
|
|
||||||
VectorSize sz = GetVecSize(op);
|
VectorSize sz = GetVecSize(op);
|
||||||
MatrixSize msz = GetMtxSize(op);
|
MatrixSize msz = GetMtxSize(op);
|
||||||
@ -1073,8 +1079,7 @@ namespace MIPSComp
|
|||||||
int ins = (op >> 23) & 7;
|
int ins = (op >> 23) & 7;
|
||||||
|
|
||||||
bool homogenous = false;
|
bool homogenous = false;
|
||||||
if (n == ins)
|
if (n == ins) {
|
||||||
{
|
|
||||||
n++;
|
n++;
|
||||||
sz = (VectorSize)((int)(sz) + 1);
|
sz = (VectorSize)((int)(sz) + 1);
|
||||||
msz = (MatrixSize)((int)(msz) + 1);
|
msz = (MatrixSize)((int)(msz) + 1);
|
||||||
@ -1120,10 +1125,6 @@ namespace MIPSComp
|
|||||||
fpr.ReleaseSpillLocksAndDiscardTemps();
|
fpr.ReleaseSpillLocksAndDiscardTemps();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Jit::Comp_VHdp(u32 op) {
|
|
||||||
DISABLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Jit::Comp_VCrs(u32 op) {
|
void Jit::Comp_VCrs(u32 op) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
@ -1146,10 +1147,56 @@ namespace MIPSComp
|
|||||||
|
|
||||||
void Jit::Comp_VCrossQuat(u32 op) {
|
void Jit::Comp_VCrossQuat(u32 op) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
|
|
||||||
|
// This op does not support prefixes.
|
||||||
|
if (js.HasUnknownPrefix() || disablePrefixes)
|
||||||
|
DISABLE;
|
||||||
|
|
||||||
|
VectorSize sz = GetVecSize(op);
|
||||||
|
int n = GetNumVectorElements(sz);
|
||||||
|
|
||||||
|
u8 sregs[4], tregs[4], dregs[4];
|
||||||
|
GetVectorRegs(sregs, sz, _VS);
|
||||||
|
GetVectorRegs(tregs, sz, _VT);
|
||||||
|
GetVectorRegs(dregs, sz, _VD);
|
||||||
|
|
||||||
|
// Map everything into registers.
|
||||||
|
fpr.MapRegsAndSpillLockV(sregs, sz, 0);
|
||||||
|
fpr.MapRegsAndSpillLockV(tregs, sz, 0);
|
||||||
|
|
||||||
|
if (sz == V_Triple) {
|
||||||
|
int temp3 = fpr.GetTempV();
|
||||||
|
fpr.MapRegV(temp3, MAP_DIRTY | MAP_NOINIT);
|
||||||
|
// Cross product vcrsp.t
|
||||||
|
|
||||||
|
// Compute X
|
||||||
|
VMUL(S0, fpr.V(sregs[1]), fpr.V(tregs[2]));
|
||||||
|
VMLS(S0, fpr.V(sregs[2]), fpr.V(tregs[1]));
|
||||||
|
|
||||||
|
// Compute Y
|
||||||
|
VMUL(S1, fpr.V(sregs[2]), fpr.V(tregs[0]));
|
||||||
|
VMLS(S1, fpr.V(sregs[0]), fpr.V(tregs[2]));
|
||||||
|
|
||||||
|
// Compute Z
|
||||||
|
VMUL(fpr.V(temp3), fpr.V(sregs[2]), fpr.V(tregs[0]));
|
||||||
|
VMLS(fpr.V(temp3), fpr.V(sregs[0]), fpr.V(tregs[2]));
|
||||||
|
|
||||||
|
fpr.MapRegsAndSpillLockV(dregs, V_Triple, MAP_DIRTY | MAP_NOINIT);
|
||||||
|
VMOV(fpr.V(dregs[0]), S0);
|
||||||
|
VMOV(fpr.V(dregs[1]), S1);
|
||||||
|
VMOV(fpr.V(dregs[2]), fpr.V(temp3));
|
||||||
|
} else if (sz == V_Quad) {
|
||||||
|
// Quaternion product vqmul.q untested
|
||||||
|
DISABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
fpr.ReleaseSpillLocksAndDiscardTemps();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Jit::Comp_Vsge(u32 op) {
|
void Jit::Comp_Vsge(u32 op) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Jit::Comp_Vslt(u32 op) {
|
void Jit::Comp_Vslt(u32 op) {
|
||||||
@ -1160,7 +1207,7 @@ namespace MIPSComp
|
|||||||
// Not ready yet
|
// Not ready yet
|
||||||
DISABLE;
|
DISABLE;
|
||||||
|
|
||||||
if (js.HasUnknownPrefix())
|
if (js.HasUnknownPrefix() || disablePrefixes)
|
||||||
DISABLE;
|
DISABLE;
|
||||||
|
|
||||||
VectorSize sz = GetVecSize(op);
|
VectorSize sz = GetVecSize(op);
|
||||||
@ -1312,7 +1359,7 @@ namespace MIPSComp
|
|||||||
void Jit::Comp_Vfim(u32 op) {
|
void Jit::Comp_Vfim(u32 op) {
|
||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
|
|
||||||
if (js.HasUnknownPrefix()) {
|
if (js.HasUnknownPrefix() || disablePrefixes) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1332,7 +1379,7 @@ namespace MIPSComp
|
|||||||
void Jit::Comp_Vcst(u32 op) {
|
void Jit::Comp_Vcst(u32 op) {
|
||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
|
|
||||||
if (js.HasUnknownPrefix()) {
|
if (js.HasUnknownPrefix() || disablePrefixes) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1390,7 +1437,7 @@ namespace MIPSComp
|
|||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
|
|
||||||
// This op doesn't support prefixes anyway..
|
// This op doesn't support prefixes anyway..
|
||||||
if (js.HasUnknownPrefix()) {
|
if (js.HasUnknownPrefix() || disablePrefixes) {
|
||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ void ArmRegCacheFPU::Start(MIPSAnalyst::AnalysisResults &stats) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const ARMReg *GetMIPSAllocationOrder(int &count) {
|
static const ARMReg *GetMIPSAllocationOrder(int &count) {
|
||||||
// We conservatively reserve both S0 and S1 as scratch for now.
|
// We conservatively reserve both S0-S2 as scratch for now.
|
||||||
static const ARMReg allocationOrder[] = {
|
static const ARMReg allocationOrder[] = {
|
||||||
S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15
|
S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15
|
||||||
};
|
};
|
||||||
|
@ -153,18 +153,6 @@ static const u64 GC_ALIGNED16(ssNoSignMask[2]) = {0x7FFFFFFF7FFFFFFFULL, 0x7FFFF
|
|||||||
|
|
||||||
static u32 ssCompareTemp;
|
static u32 ssCompareTemp;
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
CMPEQSS = 0,
|
|
||||||
CMPLTSS = 1,
|
|
||||||
CMPLESS = 2,
|
|
||||||
CMPUNORDSS = 3,
|
|
||||||
CMPNEQSS = 4,
|
|
||||||
CMPNLTSS = 5,
|
|
||||||
CMPNLESS = 6,
|
|
||||||
CMPORDSS = 7,
|
|
||||||
};
|
|
||||||
|
|
||||||
void Jit::CompFPComp(int lhs, int rhs, u8 compare, bool allowNaN)
|
void Jit::CompFPComp(int lhs, int rhs, u8 compare, bool allowNaN)
|
||||||
{
|
{
|
||||||
MOVSS(XMM0, fpr.R(lhs));
|
MOVSS(XMM0, fpr.R(lhs));
|
||||||
@ -175,7 +163,7 @@ void Jit::CompFPComp(int lhs, int rhs, u8 compare, bool allowNaN)
|
|||||||
if (allowNaN)
|
if (allowNaN)
|
||||||
{
|
{
|
||||||
MOVSS(XMM0, fpr.R(lhs));
|
MOVSS(XMM0, fpr.R(lhs));
|
||||||
CMPSS(XMM0, fpr.R(rhs), CMPUNORDSS);
|
CMPUNORDSS(XMM0, fpr.R(rhs));
|
||||||
MOVSS(M((void *) &ssCompareTemp), XMM0);
|
MOVSS(M((void *) &ssCompareTemp), XMM0);
|
||||||
|
|
||||||
MOV(32, R(EAX), M((void *) &ssCompareTemp));
|
MOV(32, R(EAX), M((void *) &ssCompareTemp));
|
||||||
@ -199,37 +187,37 @@ void Jit::Comp_FPUComp(u32 op)
|
|||||||
|
|
||||||
case 1: //un
|
case 1: //un
|
||||||
case 9: //ngle
|
case 9: //ngle
|
||||||
CompFPComp(fs, ft, CMPUNORDSS);
|
CompFPComp(fs, ft, CMP_UNORD);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: //eq
|
case 2: //eq
|
||||||
case 10: //seq
|
case 10: //seq
|
||||||
CompFPComp(fs, ft, CMPEQSS);
|
CompFPComp(fs, ft, CMP_EQ);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: //ueq
|
case 3: //ueq
|
||||||
case 11: //ngl
|
case 11: //ngl
|
||||||
CompFPComp(fs, ft, CMPEQSS, true);
|
CompFPComp(fs, ft, CMP_EQ, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4: //olt
|
case 4: //olt
|
||||||
case 12: //lt
|
case 12: //lt
|
||||||
CompFPComp(fs, ft, CMPLTSS);
|
CompFPComp(fs, ft, CMP_LT);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5: //ult
|
case 5: //ult
|
||||||
case 13: //nge
|
case 13: //nge
|
||||||
CompFPComp(ft, fs, CMPNLESS);
|
CompFPComp(ft, fs, CMP_NLE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6: //ole
|
case 6: //ole
|
||||||
case 14: //le
|
case 14: //le
|
||||||
CompFPComp(fs, ft, CMPLESS);
|
CompFPComp(fs, ft, CMP_LE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7: //ule
|
case 7: //ule
|
||||||
case 15: //ngt
|
case 15: //ngt
|
||||||
CompFPComp(ft, fs, CMPNLTSS);
|
CompFPComp(ft, fs, CMP_NLT);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -708,18 +708,6 @@ void Jit::Comp_VecDo3(u32 op) {
|
|||||||
fpr.ReleaseSpillLocks();
|
fpr.ReleaseSpillLocks();
|
||||||
}
|
}
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
CMPEQSS = 0,
|
|
||||||
CMPLTSS = 1,
|
|
||||||
CMPLESS = 2,
|
|
||||||
CMPUNORDSS = 3,
|
|
||||||
CMPNEQSS = 4,
|
|
||||||
CMPNLTSS = 5,
|
|
||||||
CMPNLESS = 6,
|
|
||||||
CMPORDSS = 7,
|
|
||||||
};
|
|
||||||
|
|
||||||
static float ssCompareTemp;
|
static float ssCompareTemp;
|
||||||
|
|
||||||
void Jit::Comp_Vcmp(u32 op) {
|
void Jit::Comp_Vcmp(u32 op) {
|
||||||
@ -772,44 +760,44 @@ void Jit::Comp_Vcmp(u32 op) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case VC_EQ: // c = s[i] == t[i]; break;
|
case VC_EQ: // c = s[i] == t[i]; break;
|
||||||
comparison = CMPEQSS;
|
comparison = CMP_EQ;
|
||||||
compareTwo = true;
|
compareTwo = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VC_LT: // c = s[i] < t[i]; break;
|
case VC_LT: // c = s[i] < t[i]; break;
|
||||||
comparison = CMPLTSS;
|
comparison = CMP_LT;
|
||||||
compareTwo = true;
|
compareTwo = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VC_LE: // c = s[i] <= t[i]; break;
|
case VC_LE: // c = s[i] <= t[i]; break;
|
||||||
comparison = CMPLESS;
|
comparison = CMP_LE;
|
||||||
compareTwo = true;
|
compareTwo = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VC_NE: // c = s[i] != t[i]; break;
|
case VC_NE: // c = s[i] != t[i]; break;
|
||||||
comparison = CMPNEQSS;
|
comparison = CMP_NEQ;
|
||||||
compareTwo = true;
|
compareTwo = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VC_GE: // c = s[i] >= t[i]; break;
|
case VC_GE: // c = s[i] >= t[i]; break;
|
||||||
comparison = CMPLESS;
|
comparison = CMP_LE;
|
||||||
flip = true;
|
flip = true;
|
||||||
compareTwo = true;
|
compareTwo = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VC_GT: // c = s[i] > t[i]; break;
|
case VC_GT: // c = s[i] > t[i]; break;
|
||||||
comparison = CMPLTSS;
|
comparison = CMP_LT;
|
||||||
flip = true;
|
flip = true;
|
||||||
compareTwo = true;
|
compareTwo = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VC_EZ: // c = s[i] == 0.0f || s[i] == -0.0f; break;
|
case VC_EZ: // c = s[i] == 0.0f || s[i] == -0.0f; break;
|
||||||
comparison = CMPEQSS;
|
comparison = CMP_EQ;
|
||||||
compareToZero = true;
|
compareToZero = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VC_NZ: // c = s[i] != 0; break;
|
case VC_NZ: // c = s[i] != 0; break;
|
||||||
comparison = CMPNEQSS;
|
comparison = CMP_NEQ;
|
||||||
compareToZero = true;
|
compareToZero = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -869,6 +857,14 @@ void Jit::Comp_Vcmp(u32 op) {
|
|||||||
gpr.UnlockAllX();
|
gpr.UnlockAllX();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Jit::Comp_Vsge(u32 op) {
|
||||||
|
DISABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Jit::Comp_Vslt(u32 op) {
|
||||||
|
DISABLE;
|
||||||
|
}
|
||||||
|
|
||||||
// There are no immediates for floating point, so we need to load these
|
// There are no immediates for floating point, so we need to load these
|
||||||
// from RAM. Might as well have a table ready.
|
// from RAM. Might as well have a table ready.
|
||||||
extern const float mulTableVi2f[32] = {
|
extern const float mulTableVi2f[32] = {
|
||||||
@ -1466,14 +1462,6 @@ void Jit::Comp_Vcmov(u32 op) {
|
|||||||
DISABLE;
|
DISABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Jit::Comp_Vsge(u32 op) {
|
|
||||||
DISABLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Jit::Comp_Vslt(u32 op) {
|
|
||||||
DISABLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Jit::Comp_Viim(u32 op) {
|
void Jit::Comp_Viim(u32 op) {
|
||||||
CONDITIONAL_DISABLE;
|
CONDITIONAL_DISABLE;
|
||||||
|
|
||||||
|
@ -322,7 +322,7 @@ void EmuScreen::pspKey(int pspKeyCode, int flags) {
|
|||||||
onVKeyUp(pspKeyCode);
|
onVKeyUp(pspKeyCode);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ILOG("pspKey %i %i", pspKeyCode, flags);
|
// ILOG("pspKey %i %i", pspKeyCode, flags);
|
||||||
if (flags & KEY_DOWN)
|
if (flags & KEY_DOWN)
|
||||||
__CtrlButtonDown(pspKeyCode);
|
__CtrlButtonDown(pspKeyCode);
|
||||||
if (flags & KEY_UP)
|
if (flags & KEY_UP)
|
||||||
|
2
native
2
native
@ -1 +1 @@
|
|||||||
Subproject commit 14833656898f4c711201d95446228f51722cf0cc
|
Subproject commit f00bfc546401e93803f1b41ba64804247b8ac6c7
|
Loading…
x
Reference in New Issue
Block a user