Remove redundant vmov instructions (seen in wipeout)

This commit is contained in:
Henrik Rydgard 2013-06-15 00:19:48 +02:00
parent 043f819c38
commit ce2c18d2fe
5 changed files with 18 additions and 1 deletions

View File

@ -516,6 +516,11 @@ namespace MIPSComp
if (js.HasUnknownPrefix())
DISABLE;
// Pre-processing: Eliminate silly no-op VMOVs, common in Wipeout Pure
if (((op >> 16) & 0x1f) == 0 && _VS == _VD && js.HasNoPrefix()) {
return;
}
VectorSize sz = GetVecSize(op);
int n = GetNumVectorElements(sz);

View File

@ -96,6 +96,10 @@ struct ArmJitState
}
return false;
}
bool HasNoPrefix() const {
return (prefixDFlag & PREFIX_KNOWN) && (prefixSFlag & PREFIX_KNOWN) && (prefixTFlag & PREFIX_KNOWN) && (prefixS == 0xE4 && prefixT == 0xE4 && prefixD == 0);
}
void EatPrefix() {
if ((prefixSFlag & PREFIX_KNOWN) == 0 || prefixS != 0xE4) {
prefixSFlag = PREFIX_KNOWN_DIRTY;

View File

@ -632,6 +632,11 @@ void Jit::Comp_VV2Op(u32 op) {
if (js.HasUnknownPrefix())
DISABLE;
// Pre-processing: Eliminate silly no-op VMOVs, common in Wipeout Pure
if (((op >> 16) & 0x1f) == 0 && _VS == _VD && js.HasNoPrefix()) {
return;
}
VectorSize sz = GetVecSize(op);
int n = GetNumVectorElements(sz);

View File

@ -111,6 +111,9 @@ struct JitState
}
return false;
}
bool HasNoPrefix() const {
return (prefixDFlag & PREFIX_KNOWN) && (prefixSFlag & PREFIX_KNOWN) && (prefixTFlag & PREFIX_KNOWN) && (prefixS == 0xE4 && prefixT == 0xE4 && prefixD == 0);
}
void EatPrefix() {
if ((prefixSFlag & PREFIX_KNOWN) == 0 || prefixS != 0xE4) {
prefixSFlag = PREFIX_KNOWN_DIRTY;

2
native

@ -1 +1 @@
Subproject commit ce962bdf95717c52f29c211b6b242f899dcb9174
Subproject commit 5e50ceca86e4f8b3580662a1a5619fb660c5e066