Re-fix for some GCC packed structure bug. Hopefully this version works. It should according to the bug being tracked.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3421 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2010-07-07 20:01:30 +00:00
parent 7243568e5f
commit f9a56afa15
1 changed files with 10 additions and 12 deletions

View File

@ -111,13 +111,14 @@ void SaveStateBase::vuMicroFreeze()
pxAssume( VU1.Mem != NULL ); pxAssume( VU1.Mem != NULL );
Freeze(VU0.ACC); Freeze(VU0.ACC);
#ifdef __LINUX__
// GCC is unable to bind packed fields. // Seemingly silly and pointless use of temp var: GCC is unable to bind packed fields
u32 temp_vu0_code = VU0.code; // (appears to be a bug, tracked here: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36566 ).
// Dereferencing outside the context of the function (via a temp var) seems to circumvent it. --air
u32& temp_vu0_code = VU0.code;
Freeze(temp_vu0_code); Freeze(temp_vu0_code);
#else
Freeze(VU0.code);
#endif
FreezeMem(VU0.Mem, 4*1024); FreezeMem(VU0.Mem, 4*1024);
FreezeMem(VU0.Micro, 4*1024); FreezeMem(VU0.Micro, 4*1024);
@ -125,13 +126,10 @@ void SaveStateBase::vuMicroFreeze()
Freeze(VU0.VI); Freeze(VU0.VI);
Freeze(VU1.ACC); Freeze(VU1.ACC);
#ifdef __LINUX__
// GCC is unable to bind packed fields. u32& temp_vu1_code = VU1.code;
u32 temp_vu1_code = VU1.code;
Freeze(temp_vu1_code); Freeze(temp_vu1_code);
#else
Freeze(VU1.code);
#endif
FreezeMem(VU1.Mem, 16*1024); FreezeMem(VU1.Mem, 16*1024);
FreezeMem(VU1.Micro, 16*1024); FreezeMem(VU1.Micro, 16*1024);