microVU: bugfix for prev revision (.r and .flag member mixup); and removed an unneeded check against exactMatch.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3718 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2010-09-02 02:38:54 +00:00
parent 76d639ff39
commit 96855850f3
2 changed files with 16 additions and 15 deletions

View File

@ -90,9 +90,8 @@ public:
else { // Can do Simple Search (Only Matches the Important Pipeline Stuff) else { // Can do Simple Search (Only Matches the Important Pipeline Stuff)
for (microBlockLink* linkI = blockList; linkI != NULL; linkI = linkI->next) { for (microBlockLink* linkI = blockList; linkI != NULL; linkI = linkI->next) {
if (doConstProp && (linkI->block.pState.vi15 != pState->vi15)) continue; if (doConstProp && (linkI->block.pState.vi15 != pState->vi15)) continue;
if (linkI->block.pState.simple32[0] != pState->simple32[0]) continue; if (linkI->block.pState.quick32[0] != pState->quick32[0]) continue;
if (linkI->block.pState.simple32[1] != pState->simple32[1]) continue; if (linkI->block.pState.quick32[1] != pState->quick32[1]) continue;
if (linkI->block.pState.needExactMatch & 7) continue;
return &linkI->block; return &linkI->block;
} }
} }

View File

@ -25,31 +25,33 @@ union regInfo {
}; };
}; };
union __aligned16 microRegInfo { // Ordered for Faster Compares // microRegInfo is carefully ordered for faster compares. The "important" information is
struct // housed in a union that is accessed via 'quick32' so that several u8 fields can be compared
{ // using a pair of 32-bit equalities.
// vi15 is only used if microVU constprop is enabled (it is *not* by default). When constprop
// is disabled the vi15 field acts as additional padding that is required for 16 byte alignment
// needed by the xmm compare.
union __aligned16 microRegInfo {
struct {
u32 vi15; // Constant Prop Info for vi15 (only valid if sign-bit set) u32 vi15; // Constant Prop Info for vi15 (only valid if sign-bit set)
union union {
{ struct {
struct
{
u8 needExactMatch; // If set, block needs an exact match of pipeline state u8 needExactMatch; // If set, block needs an exact match of pipeline state
u8 q; u8 q;
u8 p; u8 p;
u8 r; u8 flags; // clip x2 :: status x2
u8 xgkick; u8 xgkick;
u8 viBackUp; // VI reg number that was written to on branch-delay slot u8 viBackUp; // VI reg number that was written to on branch-delay slot
u8 blockType; // 0 = Normal; 1,2 = Compile one instruction (E-bit/Branch Ending) u8 blockType; // 0 = Normal; 1,2 = Compile one instruction (E-bit/Branch Ending)
}; };
u32 simple32[2]; u32 quick32[2];
}; };
struct struct {
{
u8 VI[16]; u8 VI[16];
regInfo VF[32]; regInfo VF[32];
u8 flags; // clip x2 :: status x2 u8 r;
}; };
}; };