Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Xele02 2012-12-19 01:08:02 +01:00
commit eb087120da
3 changed files with 29 additions and 6 deletions

View File

@ -851,6 +851,31 @@ namespace MIPSInt
EatPrefixes();
}
void Int_VHdp(u32 op)
{
float s[4], t[4];
float d;
int vd = _VD;
int vs = _VS;
int vt = _VT;
VectorSize sz = GetVecSize(op);
ReadVector(s, sz, vs);
ApplySwizzleS(s, sz);
ReadVector(t, sz, vt);
ApplySwizzleT(t, sz);
float sum = 0.0f;
int n = GetNumVectorElements(sz);
for (int i = 0; i < n; i++)
{
sum += (i == n - 1) ? t[i] : s[i]*t[i];
}
d = sum;
ApplyPrefixD(&d,V_Single);
V(vd) = d;
PC += 4;
EatPrefixes();
}
void Int_Vbfy(u32 op)
{
float s[4];

View File

@ -39,6 +39,7 @@ namespace MIPSInt
void Int_VV2Op(u32 op);
void Int_Vrot(u32 op);
void Int_VDot(u32 op);
void Int_VHdp(u32 op);
void Int_Vavg(u32 op);
void Int_Vfad(u32 op);
void Int_Vocp(u32 op);

View File

@ -492,8 +492,8 @@ MIPSInstruction tableVFPU1[8] =
INSTR("vmul",&Jit::Comp_Generic, Dis_VectorSet3, Int_VecDo3, IS_VFPU),
INSTR("vdot",&Jit::Comp_Generic, Dis_VectorDot, Int_VDot, IS_VFPU),
INSTR("vscl",&Jit::Comp_Generic, Dis_VScl, Int_VScl, IS_VFPU),
INSTR("vhdp",&Jit::Comp_Generic, Dis_Generic, 0, IS_VFPU),
{-2},
{-2},
INSTR("vhdp",&Jit::Comp_Generic, Dis_Generic, Int_VHdp, IS_VFPU),
INSTR("vcrs",&Jit::Comp_Generic, Dis_Vcrs, Int_Vcrs, IS_VFPU),
INSTR("vdet",&Jit::Comp_Generic, Dis_Generic, 0, IS_VFPU),
{-2},
@ -848,13 +848,10 @@ const MIPSInstruction *MIPSGetInstruction(u32 op)
instr = &table[subop];
if (encoding == Rese)
return 0; //invalid instruction
// if (encoding == Spe3)
// __asm int 3
if (!instr)
return 0;
if (instr->altEncoding == -2)
{
//BAD!!
//ERROR_LOG(CPU, "Invalid instruction %08x in table %i, entry %i", op, (int)encoding, subop);
return 0; //invalid instruction
}
@ -924,7 +921,7 @@ void MIPSInterpret(u32 op) //only for those rare ones
instr->interpret(op);
else
{
ERROR_LOG(CPU,"Unknown instruction %08x", op);
ERROR_LOG(CPU,"Unknown instruction %08x at %08x", op, currentMIPS->pc);
// Try to disassemble it
char disasm[256];
MIPSDisAsm(op, currentMIPS->pc, disasm);