Minor cleanup for vdot in x86 jit.

This commit is contained in:
Unknown W. Brackets 2013-02-14 23:47:03 -08:00
parent ccad259ae5
commit b9506c9568
2 changed files with 17 additions and 1 deletions

View file

@ -288,7 +288,13 @@ void Jit::Comp_SVQ(u32 op)
void Jit::Comp_VDot(u32 op) {
DISABLE;
// WARNING: No prefix support!
if (js.MayHavePrefix()) {
Comp_Generic(op);
js.EatPrefix();
return;
}
int vd = _VD;
int vs = _VS;
@ -306,7 +312,6 @@ void Jit::Comp_VDot(u32 op) {
MOVSS(XMM0, fpr.V(sregs[0]));
MULSS(XMM0, fpr.V(tregs[0]));
float sum = 0.0f;
int n = GetNumVectorElements(sz);
for (int i = 1; i < n; i++)
{

View file

@ -78,6 +78,17 @@ struct JitState
prefixTFlag = PREFIX_UNKNOWN;
prefixDFlag = PREFIX_UNKNOWN;
}
bool MayHavePrefix() const {
if (!(prefixSFlag & PREFIX_KNOWN) || !(prefixTFlag & PREFIX_KNOWN) || !(prefixDFlag & PREFIX_KNOWN)) {
return true;
} else if (prefixS != 0xE4 || prefixT != 0xE4 || prefixD != 0) {
return true;
} else if (writeMask[0] || writeMask[1] || writeMask[2] || writeMask[3]) {
return true;
}
return false;
}
void EatPrefix() {
if ((prefixSFlag & PREFIX_KNOWN) == 0 || prefixS != 0xE4) {
prefixSFlag = PREFIX_KNOWN_DIRTY;