This is an automated email from the git hooks/post-receive script. ecsv-guest pushed a commit to branch master in repository mupen64plus.
commit f183d3721ade9dd85fc095f35d9ab9e776da761f Author: Sven Eckelmann <[email protected]> Date: Mon Apr 26 23:12:18 2010 +0200 Fix wrong high level emulation of rsp on big endian systems --- debian/changelog | 2 + debian/patches/rsp_hle_bigendian.patch | 1128 ++++++++++++++++++++++++++++++++ debian/patches/series | 1 + 3 files changed, 1131 insertions(+) diff --git a/debian/changelog b/debian/changelog index 470f560..e7b107c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,8 @@ mupen64plus (1.5+dfsg1-10) UNRELEASED; urgency=low * debian/patches: - Add rsp_ucode2_reset.patch, Reset status of specific ucode2 hacks after starting again + - Add rsp_hle_bigendian.patch, Fix wrong high level emulation of rsp on big + endian systems -- Sven Eckelmann <[email protected]> Mon, 26 Apr 2010 23:06:55 +0200 diff --git a/debian/patches/rsp_hle_bigendian.patch b/debian/patches/rsp_hle_bigendian.patch new file mode 100644 index 0000000..e4b09f2 --- /dev/null +++ b/debian/patches/rsp_hle_bigendian.patch @@ -0,0 +1,1128 @@ +Description: Fix wrong high level emulation of rsp on big endian systems +Origin: backport: http://bitbucket.org/richard42/mupen64plus-rsp-hle/changeset/c4309d79d3ba +Origin: backport: http://bitbucket.org/richard42/mupen64plus-rsp-hle/changeset/199ec8223923 + +--- +diff --git a/rsp_hle/hle.h b/rsp_hle/hle.h +index 79ece2577c0cbf7b671257cdb5d20fa9241295d1..9ba7585ca38b4a98b5908e9612b895add3a4d7ce 100644 +--- a/rsp_hle/hle.h ++++ b/rsp_hle/hle.h +@@ -26,9 +26,11 @@ + + #ifdef _BIG_ENDIAN + #define S 0 ++#define S16 0 + #define S8 0 + #else + #define S 1 ++#define S16 2 + #define S8 3 + #endif + +diff --git a/rsp_hle/jpeg.c b/rsp_hle/jpeg.c +index 5785bea8e30f1c3b0ced1d31bc275e6ce57250f0..ac87bf265ed4815c4f8d460520714b2e9cb00d7e 100644 +--- a/rsp_hle/jpeg.c ++++ b/rsp_hle/jpeg.c +@@ -404,8 +404,8 @@ void jpg_uncompress(OSTask_t *task) + m[30*8+k] |= m[1*8+6]; + m[29*8+k] |= m[1*8+6]; + +- pic[(i*128+j*32+0+k)^1] = m[30*8+k]; +- pic[(i*128+j*32+8+k)^1] = m[29*8+k]; ++ pic[(i*128+j*32+0+k)^S] = m[30*8+k]; ++ pic[(i*128+j*32+8+k)^S] = m[29*8+k]; + + m[24*8+k] = m[20*8+k] + m[16*8+k]; + m[23*8+k] = m[19*8+k] + m[15*8+k]; +diff --git a/rsp_hle/ucode1.cpp b/rsp_hle/ucode1.cpp +index c81d677b752b5ea0810663d6846577bcfe59b7bb..d8d47702636f4ad508546d23d5a29014ab384ea0 100644 +--- a/rsp_hle/ucode1.cpp ++++ b/rsp_hle/ucode1.cpp +@@ -257,12 +257,12 @@ static void ENVMIXER () { + } + + for (int x = 0; x < 8; x++) { +- i1=(int)inp[ptr^1]; +- o1=(int)out[ptr^1]; +- a1=(int)aux1[ptr^1]; ++ i1=(int)inp[ptr^S]; ++ o1=(int)out[ptr^S]; ++ a1=(int)aux1[ptr^S]; + if (AuxIncRate) { +- a2=(int)aux2[ptr^1]; +- a3=(int)aux3[ptr^1]; ++ a2=(int)aux2[ptr^S]; ++ a3=(int)aux3[ptr^S]; + } + // TODO: here... + //LAcc = LTrg; +@@ -349,8 +349,8 @@ static void ENVMIXER () { + if(a1>32767) a1=32767; + else if(a1<-32768) a1=-32768; + +- out[ptr^1]=o1; +- aux1[ptr^1]=a1; ++ out[ptr^S]=o1; ++ aux1[ptr^S]=a1; + if (AuxIncRate) { + //a2=((s64)(((s64)a2*0xfffe)+((s64)i1*AuxR*2)+0x8000)>>16); + +@@ -364,8 +364,8 @@ static void ENVMIXER () { + if(a3>32767) a3=32767; + else if(a3<-32768) a3=-32768; + +- aux2[ptr^1]=a2; +- aux3[ptr^1]=a3; ++ aux2[ptr^S]=a2; ++ aux3[ptr^S]=a3; + } + ptr++; + } +@@ -411,17 +411,18 @@ static void RESAMPLE () { + if ((Flags & 0x1) == 0) { + //memcpy (src+srcPtr, rsp.RDRAM+addy, 0x8); + for (int x=0; x < 4; x++) +- src[(srcPtr+x)^1] = ((u16 *)rsp.RDRAM)[((addy/2)+x)^1]; ++ src[(srcPtr+x)^S] = ((u16 *)rsp.RDRAM)[((addy/2)+x)^S]; + Accum = *(u16 *)(rsp.RDRAM+addy+10); + } else { + for (int x=0; x < 4; x++) +- src[(srcPtr+x)^1] = 0;//*(u16 *)(rsp.RDRAM+((addy+x)^2)); ++ src[(srcPtr+x)^S] = 0;//*(u16 *)(rsp.RDRAM+((addy+x)^2)); + } + + for(int i=0;i < ((AudioCount+0xf)&0xFFF0)/2;i++) { + //location = (((Accum * 0x40) >> 0x10) * 8); +- location = (Accum >> 0xa) << 0x3; +- lut = (s16 *)(((u8 *)ResampleLUT) + location); ++ // location is the fractional position between two samples ++ location = (Accum >> 0xa) * 4; ++ lut = (s16*)ResampleLUT + location; + + // mov eax, dword ptr [src+srcPtr]; + // movsx edx, word ptr [lut]; +@@ -435,29 +436,29 @@ static void RESAMPLE () { + // and edx, 0f000h + + // imul +- temp = ((s32)*(s16*)(src+((srcPtr+0)^1))*((s32)((s16)lut[0]))); ++ temp = ((s32)*(s16*)(src+((srcPtr+0)^S))*((s32)((s16)lut[0]))); + accum = (s32)(temp >> 15); + +- temp = ((s32)*(s16*)(src+((srcPtr+1)^1))*((s32)((s16)lut[1]))); ++ temp = ((s32)*(s16*)(src+((srcPtr+1)^S))*((s32)((s16)lut[1]))); + accum += (s32)(temp >> 15); + +- temp = ((s32)*(s16*)(src+((srcPtr+2)^1))*((s32)((s16)lut[2]))); ++ temp = ((s32)*(s16*)(src+((srcPtr+2)^S))*((s32)((s16)lut[2]))); + accum += (s32)(temp >> 15); + +- temp = ((s32)*(s16*)(src+((srcPtr+3)^1))*((s32)((s16)lut[3]))); ++ temp = ((s32)*(s16*)(src+((srcPtr+3)^S))*((s32)((s16)lut[3]))); + accum += (s32)(temp >> 15); + + if (accum > 32767) accum = 32767; + if (accum < -32768) accum = -32768; + +- dst[dstPtr^1] = (accum); ++ dst[dstPtr^S] = (accum); + dstPtr++; + Accum += Pitch; + srcPtr += (Accum>>16); + Accum&=0xffff; + } + for (int x=0; x < 4; x++) +- ((u16 *)rsp.RDRAM)[((addy/2)+x)^1] = src[(srcPtr+x)^1]; ++ ((u16 *)rsp.RDRAM)[((addy/2)+x)^S] = src[(srcPtr+x)^S]; + //memcpy (RSWORK, src+srcPtr, 0x8); + *(u16 *)(rsp.RDRAM+addy+10) = Accum; + } +@@ -489,17 +490,17 @@ static void SETVOL () { + //u16 VolRamp_Left; // 0x0012(T8) + if(flags & A_LEFT) { // Set the Ramping values Target, Ramp + //loopval = (((u32)vol << 0x10) | (u32)voltarg); +- VolTrg_Left = *(s16 *)&inst1; // m_LeftVol ++ VolTrg_Left = (s16)inst1; // m_LeftVol + //VolRamp_Left = (s32)inst2; +- VolRamp_Left = *(s32 *)&inst2;//(u16)(inst2) | (s32)(s16)(inst2 << 0x10); ++ VolRamp_Left = (s32)inst2;//(u16)(inst2) | (s32)(s16)(inst2 << 0x10); + //fprintf (dfile, "Ramp Left: %f\n", (float)VolRamp_Left/65536.0); + //fprintf (dfile, "Ramp Left: %08X\n", inst2); + //VolRamp_Left = (s16)voltarg; // m_LeftVolTarget + //VolRate_Left = (s16)volrate; // m_LeftVolRate + } else { // A_RIGHT +- VolTrg_Right = *(s16 *)&inst1; // m_RightVol ++ VolTrg_Right = (s16)inst1; // m_RightVol + //VolRamp_Right = (s32)inst2; +- VolRamp_Right = *(s32 *)&inst2;//(u16)(inst2 >> 0x10) | (s32)(s16)(inst2 << 0x10); ++ VolRamp_Right = (s32)inst2;//(u16)(inst2 >> 0x10) | (s32)(s16)(inst2 << 0x10); + //fprintf (dfile, "Ramp Right: %f\n", (float)VolRamp_Right/65536.0); + //fprintf (dfile, "Ramp Right: %08X\n", inst2); + //VolRamp_Right = (s16)voltarg; // m_RightVolTarget +@@ -546,8 +547,8 @@ static void ADPCM () { // Work in progress! :) + } + } + +- int l1=out[15]; +- int l2=out[14]; ++ int l1=out[14^S]; ++ int l2=out[15^S]; + int inp1[8]; + int inp2[8]; + out+=16; +@@ -558,7 +559,7 @@ static void ADPCM () { // Work in progress! :) + // area of memory in the case of A_LOOP or just + // the values we calculated the last time + +- code=BufferSpace[(AudioInBuffer+inPtr)^3]; ++ code=BufferSpace[(AudioInBuffer+inPtr)^S8]; + index=code&0xf; + index<<=4; // index into the adpcm code table + book1=(short *)&adpcmtable[index]; +@@ -576,7 +577,7 @@ static void ADPCM () { // Work in progress! :) + while(j<8) // loop of 8, for 8 coded nibbles from 4 bytes + // which yields 8 short pcm values + { +- icode=BufferSpace[(AudioInBuffer+inPtr)^3]; ++ icode=BufferSpace[(AudioInBuffer+inPtr)^S8]; + inPtr++; + + inp1[j]=(s16)((icode&0xf0)<<8); // this will in effect be signed +@@ -596,7 +597,7 @@ static void ADPCM () { // Work in progress! :) + j=0; + while(j<8) + { +- icode=BufferSpace[(AudioInBuffer+inPtr)^3]; ++ icode=BufferSpace[(AudioInBuffer+inPtr)^S8]; + inPtr++; + + inp2[j]=(short)((icode&0xf0)<<8); // this will in effect be signed +@@ -676,10 +677,10 @@ static void ADPCM () { // Work in progress! :) + + for(j=0;j<8;j++) + { +- a[j^1]>>=11; +- if(a[j^1]>32767) a[j^1]=32767; +- else if(a[j^1]<-32768) a[j^1]=-32768; +- *(out++)=a[j^1]; ++ a[j^S]>>=11; ++ if(a[j^S]>32767) a[j^S]=32767; ++ else if(a[j^S]<-32768) a[j^S]=-32768; ++ *(out++)=a[j^S]; + } + l1=a[6]; + l2=a[7]; +@@ -746,10 +747,10 @@ static void ADPCM () { // Work in progress! :) + + for(j=0;j<8;j++) + { +- a[j^1]>>=11; +- if(a[j^1]>32767) a[j^1]=32767; +- else if(a[j^1]<-32768) a[j^1]=-32768; +- *(out++)=a[j^1]; ++ a[j^S]>>=11; ++ if(a[j^S]>32767) a[j^S]=32767; ++ else if(a[j^S]<-32768) a[j^S]=-32768; ++ *(out++)=a[j^S]; + } + l1=a[6]; + l2=a[7]; +@@ -805,7 +806,7 @@ static void DMEMMOVE () { // Doesn't sound just right?... will fix when HLE is r + + //memcpy (BufferSpace+v1, BufferSpace+v0, count-1); + for (cnt = 0; cnt < count; cnt++) { +- *(u8 *)(BufferSpace+((cnt+v1)^3)) = *(u8 *)(BufferSpace+((cnt+v0)^3)); ++ *(u8 *)(BufferSpace+((cnt+v1)^S8)) = *(u8 *)(BufferSpace+((cnt+v0)^S8)); + } + } + +@@ -818,17 +819,17 @@ static void LOADADPCM () { // Loads an ADPCM table - Works 100% Now 03-13-01 + //assert ((inst1&0xffff) <= 0x80); + u16 *table = (u16 *)(rsp.RDRAM+v0); + for (u32 x = 0; x < ((inst1&0xffff)>>0x4); x++) { +- adpcmtable[0x1+(x<<3)] = table[0]; +- adpcmtable[0x0+(x<<3)] = table[1]; ++ adpcmtable[0x0+(x<<3)^S] = table[0]; ++ adpcmtable[0x1+(x<<3)^S] = table[1]; + +- adpcmtable[0x3+(x<<3)] = table[2]; +- adpcmtable[0x2+(x<<3)] = table[3]; ++ adpcmtable[0x2+(x<<3)^S] = table[2]; ++ adpcmtable[0x3+(x<<3)^S] = table[3]; + +- adpcmtable[0x5+(x<<3)] = table[4]; +- adpcmtable[0x4+(x<<3)] = table[5]; ++ adpcmtable[0x4+(x<<3)^S] = table[4]; ++ adpcmtable[0x5+(x<<3)^S] = table[5]; + +- adpcmtable[0x7+(x<<3)] = table[6]; +- adpcmtable[0x6+(x<<3)] = table[7]; ++ adpcmtable[0x6+(x<<3)^S] = table[6]; ++ adpcmtable[0x7+(x<<3)^S] = table[7]; + table += 8; + } + } +@@ -839,7 +840,7 @@ static void INTERLEAVE () { // Works... - 3-11-01 + u16 *outbuff = (u16 *)(AudioOutBuffer+BufferSpace); + u16 *inSrcR; + u16 *inSrcL; +- u16 Left, Right; ++ u16 Left, Right, Left2, Right2; + + inL = inst2 & 0xFFFF; + inR = (inst2 >> 16) & 0xFFFF; +@@ -850,11 +851,20 @@ static void INTERLEAVE () { // Works... - 3-11-01 + for (int x = 0; x < (AudioCount/4); x++) { + Left=*(inSrcL++); + Right=*(inSrcR++); ++ Left2=*(inSrcL++); ++ Right2=*(inSrcR++); + +- *(outbuff++)=*(inSrcR++); +- *(outbuff++)=*(inSrcL++); +- *(outbuff++)=(u16)Right; +- *(outbuff++)=(u16)Left; ++#ifdef _BIG_ENDIAN ++ *(outbuff++)=Right; ++ *(outbuff++)=Left; ++ *(outbuff++)=Right2; ++ *(outbuff++)=Left2; ++#else ++ *(outbuff++)=Right2; ++ *(outbuff++)=Left2; ++ *(outbuff++)=Right; ++ *(outbuff++)=Left; ++#endif + } + } + +diff --git a/rsp_hle/ucode2.cpp b/rsp_hle/ucode2.cpp +index aa53d2f298bc32186f8188a752db7825b27a8093..d7b6d7eeeb8fc5e92a74af15c7f0841af5210e90 100644 +--- a/rsp_hle/ucode2.cpp ++++ b/rsp_hle/ucode2.cpp +@@ -64,17 +64,17 @@ static void LOADADPCM2 () { // Loads an ADPCM table - Works 100% Now 03-13-01 + u16 *table = (u16 *)(rsp.RDRAM+v0); // Zelda2 Specific... + + for (u32 x = 0; x < ((inst1&0xffff)>>0x4); x++) { +- adpcmtable[0x1+(x<<3)] = table[0]; +- adpcmtable[0x0+(x<<3)] = table[1]; ++ adpcmtable[0x0+(x<<3)^S] = table[0]; ++ adpcmtable[0x1+(x<<3)^S] = table[1]; + +- adpcmtable[0x3+(x<<3)] = table[2]; +- adpcmtable[0x2+(x<<3)] = table[3]; ++ adpcmtable[0x2+(x<<3)^S] = table[2]; ++ adpcmtable[0x3+(x<<3)^S] = table[3]; + +- adpcmtable[0x5+(x<<3)] = table[4]; +- adpcmtable[0x4+(x<<3)] = table[5]; ++ adpcmtable[0x4+(x<<3)^S] = table[4]; ++ adpcmtable[0x5+(x<<3)^S] = table[5]; + +- adpcmtable[0x7+(x<<3)] = table[6]; +- adpcmtable[0x6+(x<<3)] = table[7]; ++ adpcmtable[0x6+(x<<3)^S] = table[6]; ++ adpcmtable[0x7+(x<<3)^S] = table[7]; + table += 8; + } + } +@@ -148,13 +148,13 @@ static void ADPCM2 () { // Verified to be 100% Accurate... + } + } + +- int l1=out[15]; +- int l2=out[14]; ++ int l1=out[14^S]; ++ int l2=out[15^S]; + int inp1[8]; + int inp2[8]; + out+=16; + while(count>0) { +- code=BufferSpace[(AudioInBuffer+inPtr)^3]; ++ code=BufferSpace[(AudioInBuffer+inPtr)^S8]; + index=code&0xf; + index<<=4; + book1=(short *)&adpcmtable[index]; +@@ -166,7 +166,7 @@ static void ADPCM2 () { // Verified to be 100% Accurate... + j=0; + + while(j<8) { +- icode=BufferSpace[(AudioInBuffer+inPtr)^3]; ++ icode=BufferSpace[(AudioInBuffer+inPtr)^S8]; + inPtr++; + + inp1[j]=(s16)((icode&mask1) << 8); // this will in effect be signed +@@ -196,7 +196,7 @@ static void ADPCM2 () { // Verified to be 100% Accurate... + + j=0; + while(j<8) { +- icode=BufferSpace[(AudioInBuffer+inPtr)^3]; ++ icode=BufferSpace[(AudioInBuffer+inPtr)^S8]; + inPtr++; + + inp2[j]=(s16)((icode&mask1) << 8); +@@ -284,10 +284,10 @@ static void ADPCM2 () { // Verified to be 100% Accurate... + + for(j=0;j<8;j++) + { +- a[j^1]>>=11; +- if(a[j^1]>32767) a[j^1]=32767; +- else if(a[j^1]<-32768) a[j^1]=-32768; +- *(out++)=a[j^1]; ++ a[j^S]>>=11; ++ if(a[j^S]>32767) a[j^S]=32767; ++ else if(a[j^S]<-32768) a[j^S]=-32768; ++ *(out++)=a[j^S]; + } + l1=a[6]; + l2=a[7]; +@@ -354,10 +354,10 @@ static void ADPCM2 () { // Verified to be 100% Accurate... + + for(j=0;j<8;j++) + { +- a[j^1]>>=11; +- if(a[j^1]>32767) a[j^1]=32767; +- else if(a[j^1]<-32768) a[j^1]=-32768; +- *(out++)=a[j^1]; ++ a[j^S]>>=11; ++ if(a[j^S]>32767) a[j^S]=32767; ++ else if(a[j^S]<-32768) a[j^S]=-32768; ++ *(out++)=a[j^S]; + } + l1=a[6]; + l2=a[7]; +@@ -394,12 +394,12 @@ static void MIXER2 () { // Needs accuracy verification... + u16 dmemin = (u16)(inst2 >> 0x10); + u16 dmemout = (u16)(inst2 & 0xFFFF); + u32 count = ((inst1 >> 12) & 0xFF0); +- s32 gain = (s16)(inst1 & 0xFFFF)*2; ++ s32 gain = (s16)(inst1 & 0xFFFF); + s32 temp; + + for (unsigned int x=0; x < count; x+=2) { // I think I can do this a lot easier + +- temp = (*(s16 *)(BufferSpace+dmemin+x) * gain) >> 16; ++ temp = (*(s16 *)(BufferSpace+dmemin+x) * gain) >> 15; + temp += *(s16 *)(BufferSpace+dmemout+x); + + if ((s32)temp > 32767) +@@ -435,11 +435,11 @@ static void RESAMPLE2 () { + + if ((Flags & 0x1) == 0) { + for (int x=0; x < 4; x++) //memcpy (src+srcPtr, rsp.RDRAM+addy, 0x8); +- src[(srcPtr+x)^1] = ((u16 *)rsp.RDRAM)[((addy/2)+x)^1]; ++ src[(srcPtr+x)^S] = ((u16 *)rsp.RDRAM)[((addy/2)+x)^S]; + Accum = *(u16 *)(rsp.RDRAM+addy+10); + } else { + for (int x=0; x < 4; x++) +- src[(srcPtr+x)^1] = 0;//*(u16 *)(rsp.RDRAM+((addy+x)^2)); ++ src[(srcPtr+x)^S] = 0;//*(u16 *)(rsp.RDRAM+((addy+x)^2)); + } + + for(int i=0;i < ((AudioCount+0xf)&0xFFF0)/2;i++) { +@@ -447,29 +447,29 @@ static void RESAMPLE2 () { + //location = (Accum >> 0xa) << 0x3; + lut = (s16 *)(((u8 *)ResampleLUT) + location); + +- temp = ((s32)*(s16*)(src+((srcPtr+0)^1))*((s32)((s16)lut[0]))); ++ temp = ((s32)*(s16*)(src+((srcPtr+0)^S))*((s32)((s16)lut[0]))); + accum = (s32)(temp >> 15); + +- temp = ((s32)*(s16*)(src+((srcPtr+1)^1))*((s32)((s16)lut[1]))); ++ temp = ((s32)*(s16*)(src+((srcPtr+1)^S))*((s32)((s16)lut[1]))); + accum += (s32)(temp >> 15); + +- temp = ((s32)*(s16*)(src+((srcPtr+2)^1))*((s32)((s16)lut[2]))); ++ temp = ((s32)*(s16*)(src+((srcPtr+2)^S))*((s32)((s16)lut[2]))); + accum += (s32)(temp >> 15); + +- temp = ((s32)*(s16*)(src+((srcPtr+3)^1))*((s32)((s16)lut[3]))); ++ temp = ((s32)*(s16*)(src+((srcPtr+3)^S))*((s32)((s16)lut[3]))); + accum += (s32)(temp >> 15); + + if (accum > 32767) accum = 32767; + if (accum < -32768) accum = -32768; + +- dst[dstPtr^1] = (s16)(accum); ++ dst[dstPtr^S] = (s16)(accum); + dstPtr++; + Accum += Pitch; + srcPtr += (Accum>>16); + Accum&=0xffff; + } + for (int x=0; x < 4; x++) +- ((u16 *)rsp.RDRAM)[((addy/2)+x)^1] = src[(srcPtr+x)^1]; ++ ((u16 *)rsp.RDRAM)[((addy/2)+x)^S] = src[(srcPtr+x)^S]; + *(u16 *)(rsp.RDRAM+addy+10) = (u16)Accum; + //memcpy (RSWORK, src+srcPtr, 0x8); + } +@@ -489,7 +489,7 @@ static void DMEMMOVE2 () { // Needs accuracy verification... + + //memcpy (dmem+v1, dmem+v0, count-1); + for (cnt = 0; cnt < count; cnt++) { +- *(u8 *)(BufferSpace+((cnt+v1)^3)) = *(u8 *)(BufferSpace+((cnt+v0)^3)); ++ *(u8 *)(BufferSpace+((cnt+v1)^S8)) = *(u8 *)(BufferSpace+((cnt+v0)^S8)); + } + } + +@@ -564,59 +564,59 @@ static void ENVMIXER2 () { + while (count > 0) { + int temp, x; + for (x=0; x < 0x8; x++) { +- vec9 = (s16)(((s32)buffs3[x^1] * (u32)env[0]) >> 0x10) ^ v2[0]; +- vec10 = (s16)(((s32)buffs3[x^1] * (u32)env[2]) >> 0x10) ^ v2[1]; +- temp = bufft6[x^1] + vec9; ++ vec9 = (s16)(((s32)buffs3[x^S] * (u32)env[0]) >> 0x10) ^ v2[0]; ++ vec10 = (s16)(((s32)buffs3[x^S] * (u32)env[2]) >> 0x10) ^ v2[1]; ++ temp = bufft6[x^S] + vec9; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- bufft6[x^1] = temp; +- temp = bufft7[x^1] + vec10; ++ bufft6[x^S] = temp; ++ temp = bufft7[x^S] + vec10; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- bufft7[x^1] = temp; ++ bufft7[x^S] = temp; + vec9 = (s16)(((s32)vec9 * (u32)env[4]) >> 0x10) ^ v2[2]; + vec10 = (s16)(((s32)vec10 * (u32)env[4]) >> 0x10) ^ v2[3]; + if (inst1 & 0x10) { +- temp = buffs0[x^1] + vec10; ++ temp = buffs0[x^S] + vec10; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- buffs0[x^1] = temp; +- temp = buffs1[x^1] + vec9; ++ buffs0[x^S] = temp; ++ temp = buffs1[x^S] + vec9; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- buffs1[x^1] = temp; ++ buffs1[x^S] = temp; + } else { +- temp = buffs0[x^1] + vec9; ++ temp = buffs0[x^S] + vec9; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- buffs0[x^1] = temp; +- temp = buffs1[x^1] + vec10; ++ buffs0[x^S] = temp; ++ temp = buffs1[x^S] + vec10; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- buffs1[x^1] = temp; ++ buffs1[x^S] = temp; + } + } + + if (!isMKABI) + for (x=0x8; x < 0x10; x++) { +- vec9 = (s16)(((s32)buffs3[x^1] * (u32)env[1]) >> 0x10) ^ v2[0]; +- vec10 = (s16)(((s32)buffs3[x^1] * (u32)env[3]) >> 0x10) ^ v2[1]; +- temp = bufft6[x^1] + vec9; ++ vec9 = (s16)(((s32)buffs3[x^S] * (u32)env[1]) >> 0x10) ^ v2[0]; ++ vec10 = (s16)(((s32)buffs3[x^S] * (u32)env[3]) >> 0x10) ^ v2[1]; ++ temp = bufft6[x^S] + vec9; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- bufft6[x^1] = temp; +- temp = bufft7[x^1] + vec10; ++ bufft6[x^S] = temp; ++ temp = bufft7[x^S] + vec10; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- bufft7[x^1] = temp; ++ bufft7[x^S] = temp; + vec9 = (s16)(((s32)vec9 * (u32)env[5]) >> 0x10) ^ v2[2]; + vec10 = (s16)(((s32)vec10 * (u32)env[5]) >> 0x10) ^ v2[3]; + if (inst1 & 0x10) { +- temp = buffs0[x^1] + vec10; ++ temp = buffs0[x^S] + vec10; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- buffs0[x^1] = temp; +- temp = buffs1[x^1] + vec9; ++ buffs0[x^S] = temp; ++ temp = buffs1[x^S] + vec9; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- buffs1[x^1] = temp; ++ buffs1[x^S] = temp; + } else { +- temp = buffs0[x^1] + vec9; ++ temp = buffs0[x^S] + vec9; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- buffs0[x^1] = temp; +- temp = buffs1[x^1] + vec10; ++ buffs0[x^S] = temp; ++ temp = buffs1[x^S] + vec10; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- buffs1[x^1] = temp; ++ buffs1[x^S] = temp; + } + } + bufft6 += adder; bufft7 += adder; +@@ -684,7 +684,7 @@ static void INTERL2 () { + src=(BYTE *)(BufferSpace);//[In]; + dst=(BYTE *)(BufferSpace);//[Out]; + while(Count) { +- *(short *)(dst+(Out^3)) = *(short *)(src+(In^3)); ++ *(short *)(dst+(Out^S8)) = *(short *)(src+(In^S8)); + Out += 2; + In += 4; + Count--; +@@ -696,7 +696,7 @@ static void INTERLEAVE2 () { // Needs accuracy verification... + u16 *outbuff; + u16 *inSrcR; + u16 *inSrcL; +- u16 Left, Right; ++ u16 Left, Right, Left2, Right2; + u32 count; + count = ((inst1 >> 12) & 0xFF0); + if (count == 0) { +@@ -715,11 +715,20 @@ static void INTERLEAVE2 () { // Needs accuracy verification... + for (u32 x = 0; x < (count/4); x++) { + Left=*(inSrcL++); + Right=*(inSrcR++); ++ Left2=*(inSrcL++); ++ Right2=*(inSrcR++); + +- *(outbuff++)=*(inSrcR++); +- *(outbuff++)=*(inSrcL++); +- *(outbuff++)=(u16)Right; +- *(outbuff++)=(u16)Left; ++#ifdef _BIG_ENDIAN ++ *(outbuff++)=Right; ++ *(outbuff++)=Left; ++ *(outbuff++)=Right2; ++ *(outbuff++)=Left2; ++#else ++ *(outbuff++)=Right2; ++ *(outbuff++)=Left2; ++ *(outbuff++)=Right; ++ *(outbuff++)=Left; ++#endif + } + } + +@@ -735,7 +744,8 @@ static void ADDMIXER () { + for (int cntr = 0; cntr < Count; cntr+=2) { + temp = *outp + *inp; + if (temp > 32767) temp = 32767; if (temp < -32768) temp = -32768; +- outp++; inp++; ++ *(outp++) = temp; ++ inp++; + } + } + +diff --git a/rsp_hle/ucode3.cpp b/rsp_hle/ucode3.cpp +index 679bb365303266fdd2129c3c062bbbdd6d7f6849..4291ac2d674dd7ee565c8f8856eb9fb23f6f7395 100644 +--- a/rsp_hle/ucode3.cpp ++++ b/rsp_hle/ucode3.cpp +@@ -83,17 +83,17 @@ static void SETVOL3 () { + u8 Flags = (u8)(inst1 >> 0x10); + if (Flags & 0x4) { // 288 + if (Flags & 0x2) { // 290 +- Vol_Left = *(s16*)&inst1; // 0x50 +- Env_Dry = (s16)(*(s32*)&inst2 >> 0x10); // 0x4E +- Env_Wet = *(s16*)&inst2; // 0x4C ++ Vol_Left = (s16)inst1; // 0x50 ++ Env_Dry = (s16)(inst2 >> 0x10); // 0x4E ++ Env_Wet = (s16)inst2; // 0x4C + } else { +- VolTrg_Right = *(s16*)&inst1; // 0x46 ++ VolTrg_Right = (s16)inst1; // 0x46 + //VolRamp_Right = (u16)(inst2 >> 0x10) | (s32)(s16)(inst2 << 0x10); +- VolRamp_Right = *(s32*)&inst2; // 0x48/0x4A ++ VolRamp_Right = (s32)inst2; // 0x48/0x4A + } + } else { +- VolTrg_Left = *(s16*)&inst1; // 0x40 +- VolRamp_Left = *(s32*)&inst2; // 0x42/0x44 ++ VolTrg_Left = (s16)inst1; // 0x40 ++ VolRamp_Left = (s32)inst2; // 0x42/0x44 + } + } + +@@ -121,7 +121,7 @@ static void ENVMIXER3 () { + s16 Wet, Dry; + s16 LTrg, RTrg; + +- Vol_Right = (*(s16 *)&inst1); ++ Vol_Right = (s16)inst1; + + if (flags & A_INIT) { + LAdder = VolRamp_Left / 8; +@@ -197,9 +197,9 @@ static void ENVMIXER3 () { + MainL = ((Dry * LVol) + 0x4000) >> 15; + MainR = ((Dry * RVol) + 0x4000) >> 15; + +- o1 = out [y^1]; +- a1 = aux1[y^1]; +- i1 = inp [y^1]; ++ o1 = out [y^S]; ++ a1 = aux1[y^S]; ++ i1 = inp [y^S]; + + o1+=((i1*MainL)+0x4000)>>15; + a1+=((i1*MainR)+0x4000)>>15; +@@ -214,13 +214,13 @@ static void ENVMIXER3 () { + + // **************************************************************** + +- out[y^1]=o1; +- aux1[y^1]=a1; ++ out[y^S]=o1; ++ aux1[y^S]=a1; + + // **************************************************************** + //if (!(flags&A_AUX)) { +- a2 = aux2[y^1]; +- a3 = aux3[y^1]; ++ a2 = aux2[y^S]; ++ a3 = aux3[y^S]; + + AuxL = ((Wet * LVol) + 0x4000) >> 15; + AuxR = ((Wet * RVol) + 0x4000) >> 15; +@@ -234,8 +234,8 @@ static void ENVMIXER3 () { + if(a3>32767) a3=32767; + else if(a3<-32768) a3=-32768; + +- aux2[y^1]=a2; +- aux3[y^1]=a3; ++ aux2[y^S]=a2; ++ aux3[y^S]=a3; + } + //} + +@@ -288,7 +288,7 @@ static void ENVMIXER3o () { + s16 Wet, Dry; + + //fprintf (dfile, "\n----------------------------------------------------\n"); +- Vol_Right = (*(s16 *)&inst1); ++ Vol_Right = inst1; + if (flags & A_INIT) { + LVol = (((s32)(s16)Vol_Left * VolRamp_Left) - ((s32)(s16)Vol_Left << 16)) >> 3; + RVol = (((s32)(s16)Vol_Right * VolRamp_Right) - ((s32)(s16)Vol_Right << 16)) >> 3; +@@ -320,12 +320,12 @@ static void ENVMIXER3o () { + //fprintf (dfile, "LTrg = %08X, LVol = %08X\n", LTrg, LVol); + + for (int x=0; x<(0x170/2); x++) { +- i1=(int)inp[x^1]; +- o1=(int)out[x^1]; +- a1=(int)aux1[x^1]; ++ i1=(int)inp[x^S]; ++ o1=(int)out[x^S]; ++ a1=(int)aux1[x^S]; + if (AuxIncRate) { +- a2=(int)aux2[x^1]; +- a3=(int)aux3[x^1]; ++ a2=(int)aux2[x^S]; ++ a3=(int)aux3[x^S]; + } + // TODO: here... + //LAcc = (LTrg << 16); +@@ -388,8 +388,8 @@ static void ENVMIXER3o () { + if(a1>32767) a1=32767; + else if(a1<-32768) a1=-32768; + +- out[x^1]=o1; +- aux1[x^1]=a1; ++ out[x^S]=o1; ++ aux1[x^S]=a1; + if (AuxIncRate) { + a2+=(/*(a2*0x7fff)+*/(i1*AuxR)+0x4000)>>15; + a3+=(/*(a3*0x7fff)+*/(i1*AuxL)+0x4000)>>15; +@@ -400,8 +400,8 @@ static void ENVMIXER3o () { + if(a3>32767) a3=32767; + else if(a3<-32768) a3=-32768; + +- aux2[x^1]=a2; +- aux3[x^1]=a3; ++ aux2[x^S]=a2; ++ aux3[x^S]=a3; + } + } + +@@ -505,11 +505,11 @@ static void MIXER3 () { // Needs accuracy verification... + u16 dmemin = (u16)(inst2 >> 0x10) + 0x4f0; + u16 dmemout = (u16)(inst2 & 0xFFFF) + 0x4f0; + //u8 flags = (u8)((inst1 >> 16) & 0xff); +- s32 gain = (s16)(inst1 & 0xFFFF)*2; ++ s32 gain = (s16)(inst1 & 0xFFFF); + s32 temp; + +- for (int x=0; x < 0x170; x+=2) { // I think I can do this a lot easier +- temp = (*(s16 *)(BufferSpace+dmemin+x) * gain) >> 16; ++ for (int x=0; x < 0x170; x+=2) { // I think I can do this a lot easier ++ temp = (*(s16 *)(BufferSpace+dmemin+x) * gain) >> 15; + temp += *(s16 *)(BufferSpace+dmemout+x); + + if ((s32)temp > 32767) +@@ -544,17 +544,17 @@ static void LOADADPCM3 () { // Loads an ADPCM table - Works 100% Now 03-13-01 + //assert ((inst1&0xffff) <= 0x80); + u16 *table = (u16 *)(rsp.RDRAM+v0); + for (u32 x = 0; x < ((inst1&0xffff)>>0x4); x++) { +- adpcmtable[0x1+(x<<3)] = table[0]; +- adpcmtable[0x0+(x<<3)] = table[1]; ++ adpcmtable[0x0+(x<<3)^S] = table[0]; ++ adpcmtable[0x1+(x<<3)^S] = table[1]; + +- adpcmtable[0x3+(x<<3)] = table[2]; +- adpcmtable[0x2+(x<<3)] = table[3]; ++ adpcmtable[0x2+(x<<3)^S] = table[2]; ++ adpcmtable[0x3+(x<<3)^S] = table[3]; + +- adpcmtable[0x5+(x<<3)] = table[4]; +- adpcmtable[0x4+(x<<3)] = table[5]; ++ adpcmtable[0x4+(x<<3)^S] = table[4]; ++ adpcmtable[0x5+(x<<3)^S] = table[5]; + +- adpcmtable[0x7+(x<<3)] = table[6]; +- adpcmtable[0x6+(x<<3)] = table[7]; ++ adpcmtable[0x6+(x<<3)^S] = table[6]; ++ adpcmtable[0x7+(x<<3)^S] = table[7]; + table += 8; + } + } +@@ -568,7 +568,7 @@ static void DMEMMOVE3 () { // Needs accuracy verification... + + //memcpy (dmem+v1, dmem+v0, count-1); + for (cnt = 0; cnt < count; cnt++) { +- *(u8 *)(BufferSpace+((cnt+v1)^3)) = *(u8 *)(BufferSpace+((cnt+v0)^3)); ++ *(u8 *)(BufferSpace+((cnt+v1)^S8)) = *(u8 *)(BufferSpace+((cnt+v0)^S8)); + } + } + +@@ -615,8 +615,8 @@ static void ADPCM3 () { // Verified to be 100% Accurate... + } + } + +- int l1=out[15]; +- int l2=out[14]; ++ int l1=out[14^S]; ++ int l2=out[15^S]; + int inp1[8]; + int inp2[8]; + out+=16; +@@ -627,7 +627,7 @@ static void ADPCM3 () { // Verified to be 100% Accurate... + // area of memory in the case of A_LOOP or just + // the values we calculated the last time + +- code=BufferSpace[(0x4f0+inPtr)^3]; ++ code=BufferSpace[(0x4f0+inPtr)^S8]; + index=code&0xf; + index<<=4; // index into the adpcm code table + book1=(short *)&adpcmtable[index]; +@@ -645,7 +645,7 @@ static void ADPCM3 () { // Verified to be 100% Accurate... + while(j<8) // loop of 8, for 8 coded nibbles from 4 bytes + // which yields 8 short pcm values + { +- icode=BufferSpace[(0x4f0+inPtr)^3]; ++ icode=BufferSpace[(0x4f0+inPtr)^S8]; + inPtr++; + + inp1[j]=(s16)((icode&0xf0)<<8); // this will in effect be signed +@@ -665,7 +665,7 @@ static void ADPCM3 () { // Verified to be 100% Accurate... + j=0; + while(j<8) + { +- icode=BufferSpace[(0x4f0+inPtr)^3]; ++ icode=BufferSpace[(0x4f0+inPtr)^S8]; + inPtr++; + + inp2[j]=(short)((icode&0xf0)<<8); // this will in effect be signed +@@ -745,11 +745,11 @@ static void ADPCM3 () { // Verified to be 100% Accurate... + + for(j=0;j<8;j++) + { +- a[j^1]>>=11; +- if(a[j^1]>32767) a[j^1]=32767; +- else if(a[j^1]<-32768) a[j^1]=-32768; +- *(out++)=a[j^1]; +- //*(out+j)=a[j^1]; ++ a[j^S]>>=11; ++ if(a[j^S]>32767) a[j^S]=32767; ++ else if(a[j^S]<-32768) a[j^S]=-32768; ++ *(out++)=a[j^S]; ++ //*(out+j)=a[j^S]; + } + //out += 0x10; + l1=a[6]; +@@ -817,11 +817,11 @@ static void ADPCM3 () { // Verified to be 100% Accurate... + + for(j=0;j<8;j++) + { +- a[j^1]>>=11; +- if(a[j^1]>32767) a[j^1]=32767; +- else if(a[j^1]<-32768) a[j^1]=-32768; +- *(out++)=a[j^1]; +- //*(out+j+0x1f8)=a[j^1]; ++ a[j^S]>>=11; ++ if(a[j^S]>32767) a[j^S]=32767; ++ else if(a[j^S]<-32768) a[j^S]=-32768; ++ *(out++)=a[j^S]; ++ //*(out+j+0x1f8)=a[j^S]; + } + l1=a[6]; + l2=a[7]; +@@ -861,11 +861,11 @@ static void RESAMPLE3 () { + + if ((Flags & 0x1) == 0) { + for (int x=0; x < 4; x++) //memcpy (src+srcPtr, rsp.RDRAM+addy, 0x8); +- src[(srcPtr+x)^1] = ((u16 *)rsp.RDRAM)[((addy/2)+x)^1]; ++ src[(srcPtr+x)^S] = ((u16 *)rsp.RDRAM)[((addy/2)+x)^S]; + Accum = *(u16 *)(rsp.RDRAM+addy+10); + } else { + for (int x=0; x < 4; x++) +- src[(srcPtr+x)^1] = 0;//*(u16 *)(rsp.RDRAM+((addy+x)^2)); ++ src[(srcPtr+x)^S] = 0;//*(u16 *)(rsp.RDRAM+((addy+x)^2)); + } + + for(int i=0;i < 0x170/2;i++) { +@@ -873,18 +873,18 @@ static void RESAMPLE3 () { + //location = (Accum >> 0xa) << 0x3; + lut = (s16 *)(((u8 *)ResampleLUT) + location); + +- temp = ((s32)*(s16*)(src+((srcPtr+0)^1))*((s32)((s16)lut[0]))); ++ temp = ((s32)*(s16*)(src+((srcPtr+0)^S))*((s32)((s16)lut[0]))); + accum = (s32)(temp >> 15); + +- temp = ((s32)*(s16*)(src+((srcPtr+1)^1))*((s32)((s16)lut[1]))); ++ temp = ((s32)*(s16*)(src+((srcPtr+1)^S))*((s32)((s16)lut[1]))); + accum += (s32)(temp >> 15); + +- temp = ((s32)*(s16*)(src+((srcPtr+2)^1))*((s32)((s16)lut[2]))); ++ temp = ((s32)*(s16*)(src+((srcPtr+2)^S))*((s32)((s16)lut[2]))); + accum += (s32)(temp >> 15); + +- temp = ((s32)*(s16*)(src+((srcPtr+3)^1))*((s32)((s16)lut[3]))); ++ temp = ((s32)*(s16*)(src+((srcPtr+3)^S))*((s32)((s16)lut[3]))); + accum += (s32)(temp >> 15); +-/* temp = ((s64)*(s16*)(src+((srcPtr+0)^1))*((s64)((s16)lut[0]<<1))); ++/* temp = ((s64)*(s16*)(src+((srcPtr+0)^S))*((s64)((s16)lut[0]<<1))); + if (temp & 0x8000) temp = (temp^0x8000) + 0x10000; + else temp = (temp^0x8000); + temp = (s32)(temp >> 16); +@@ -892,7 +892,7 @@ static void RESAMPLE3 () { + if ((s32)temp < -32768) temp = -32768; + accum = (s32)(s16)temp; + +- temp = ((s64)*(s16*)(src+((srcPtr+1)^1))*((s64)((s16)lut[1]<<1))); ++ temp = ((s64)*(s16*)(src+((srcPtr+1)^S))*((s64)((s16)lut[1]<<1))); + if (temp & 0x8000) temp = (temp^0x8000) + 0x10000; + else temp = (temp^0x8000); + temp = (s32)(temp >> 16); +@@ -900,7 +900,7 @@ static void RESAMPLE3 () { + if ((s32)temp < -32768) temp = -32768; + accum += (s32)(s16)temp; + +- temp = ((s64)*(s16*)(src+((srcPtr+2)^1))*((s64)((s16)lut[2]<<1))); ++ temp = ((s64)*(s16*)(src+((srcPtr+2)^S))*((s64)((s16)lut[2]<<1))); + if (temp & 0x8000) temp = (temp^0x8000) + 0x10000; + else temp = (temp^0x8000); + temp = (s32)(temp >> 16); +@@ -908,7 +908,7 @@ static void RESAMPLE3 () { + if ((s32)temp < -32768) temp = -32768; + accum += (s32)(s16)temp; + +- temp = ((s64)*(s16*)(src+((srcPtr+3)^1))*((s64)((s16)lut[3]<<1))); ++ temp = ((s64)*(s16*)(src+((srcPtr+3)^S))*((s64)((s16)lut[3]<<1))); + if (temp & 0x8000) temp = (temp^0x8000) + 0x10000; + else temp = (temp^0x8000); + temp = (s32)(temp >> 16); +@@ -919,14 +919,14 @@ static void RESAMPLE3 () { + if (accum > 32767) accum = 32767; + if (accum < -32768) accum = -32768; + +- dst[dstPtr^1] = (accum); ++ dst[dstPtr^S] = (accum); + dstPtr++; + Accum += Pitch; + srcPtr += (Accum>>16); + Accum&=0xffff; + } + for (int x=0; x < 4; x++) +- ((u16 *)rsp.RDRAM)[((addy/2)+x)^1] = src[(srcPtr+x)^1]; ++ ((u16 *)rsp.RDRAM)[((addy/2)+x)^S] = src[(srcPtr+x)^S]; + *(u16 *)(rsp.RDRAM+addy+10) = Accum; + } + +@@ -935,7 +935,7 @@ static void INTERLEAVE3 () { // Needs accuracy verification... + u16 *outbuff = (u16 *)(BufferSpace + 0x4f0);//(u16 *)(AudioOutBuffer+dmem); + u16 *inSrcR; + u16 *inSrcL; +- u16 Left, Right; ++ u16 Left, Right, Left2, Right2; + + //inR = inst2 & 0xFFFF; + //inL = (inst2 >> 16) & 0xFFFF; +@@ -946,11 +946,20 @@ static void INTERLEAVE3 () { // Needs accuracy verification... + for (int x = 0; x < (0x170/4); x++) { + Left=*(inSrcL++); + Right=*(inSrcR++); ++ Left2=*(inSrcL++); ++ Right2=*(inSrcR++); + +- *(outbuff++)=*(inSrcR++); +- *(outbuff++)=*(inSrcL++); +- *(outbuff++)=(u16)Right; +- *(outbuff++)=(u16)Left; ++#ifdef _BIG_ENDIAN ++ *(outbuff++)=Right; ++ *(outbuff++)=Left; ++ *(outbuff++)=Right2; ++ *(outbuff++)=Left2; ++#else ++ *(outbuff++)=Right2; ++ *(outbuff++)=Left2; ++ *(outbuff++)=Right; ++ *(outbuff++)=Left; ++#endif + /* + Left=*(inSrcL++); + Right=*(inSrcR++); +diff --git a/rsp_hle/ucode3mp3.cpp b/rsp_hle/ucode3mp3.cpp +index c5a45a220b79d60ccb9e60b12a90f45ffe39a4b5..015839616096681e2ba4f0728d73f349b8571ee3 100644 +--- a/rsp_hle/ucode3mp3.cpp ++++ b/rsp_hle/ucode3mp3.cpp +@@ -259,25 +259,25 @@ static void InnerLoop () { + // Part 1: 100% Accurate + + int i; +- v[0] = *(s16 *)(mp3data+inPtr+(0x00^2)); v[31] = *(s16 *)(mp3data+inPtr+(0x3E^2)); v[0] += v[31]; +- v[1] = *(s16 *)(mp3data+inPtr+(0x02^2)); v[30] = *(s16 *)(mp3data+inPtr+(0x3C^2)); v[1] += v[30]; +- v[2] = *(s16 *)(mp3data+inPtr+(0x06^2)); v[28] = *(s16 *)(mp3data+inPtr+(0x38^2)); v[2] += v[28]; +- v[3] = *(s16 *)(mp3data+inPtr+(0x04^2)); v[29] = *(s16 *)(mp3data+inPtr+(0x3A^2)); v[3] += v[29]; ++ v[0] = *(s16 *)(mp3data+inPtr+(0x00^S16)); v[31] = *(s16 *)(mp3data+inPtr+(0x3E^S16)); v[0] += v[31]; ++ v[1] = *(s16 *)(mp3data+inPtr+(0x02^S16)); v[30] = *(s16 *)(mp3data+inPtr+(0x3C^S16)); v[1] += v[30]; ++ v[2] = *(s16 *)(mp3data+inPtr+(0x06^S16)); v[28] = *(s16 *)(mp3data+inPtr+(0x38^S16)); v[2] += v[28]; ++ v[3] = *(s16 *)(mp3data+inPtr+(0x04^S16)); v[29] = *(s16 *)(mp3data+inPtr+(0x3A^S16)); v[3] += v[29]; + +- v[4] = *(s16 *)(mp3data+inPtr+(0x0E^2)); v[24] = *(s16 *)(mp3data+inPtr+(0x30^2)); v[4] += v[24]; +- v[5] = *(s16 *)(mp3data+inPtr+(0x0C^2)); v[25] = *(s16 *)(mp3data+inPtr+(0x32^2)); v[5] += v[25]; +- v[6] = *(s16 *)(mp3data+inPtr+(0x08^2)); v[27] = *(s16 *)(mp3data+inPtr+(0x36^2)); v[6] += v[27]; +- v[7] = *(s16 *)(mp3data+inPtr+(0x0A^2)); v[26] = *(s16 *)(mp3data+inPtr+(0x34^2)); v[7] += v[26]; ++ v[4] = *(s16 *)(mp3data+inPtr+(0x0E^S16)); v[24] = *(s16 *)(mp3data+inPtr+(0x30^S16)); v[4] += v[24]; ++ v[5] = *(s16 *)(mp3data+inPtr+(0x0C^S16)); v[25] = *(s16 *)(mp3data+inPtr+(0x32^S16)); v[5] += v[25]; ++ v[6] = *(s16 *)(mp3data+inPtr+(0x08^S16)); v[27] = *(s16 *)(mp3data+inPtr+(0x36^S16)); v[6] += v[27]; ++ v[7] = *(s16 *)(mp3data+inPtr+(0x0A^S16)); v[26] = *(s16 *)(mp3data+inPtr+(0x34^S16)); v[7] += v[26]; + +- v[8] = *(s16 *)(mp3data+inPtr+(0x1E^2)); v[16] = *(s16 *)(mp3data+inPtr+(0x20^2)); v[8] += v[16]; +- v[9] = *(s16 *)(mp3data+inPtr+(0x1C^2)); v[17] = *(s16 *)(mp3data+inPtr+(0x22^2)); v[9] += v[17]; +- v[10]= *(s16 *)(mp3data+inPtr+(0x18^2)); v[19] = *(s16 *)(mp3data+inPtr+(0x26^2)); v[10]+= v[19]; +- v[11]= *(s16 *)(mp3data+inPtr+(0x1A^2)); v[18] = *(s16 *)(mp3data+inPtr+(0x24^2)); v[11]+= v[18]; ++ v[8] = *(s16 *)(mp3data+inPtr+(0x1E^S16)); v[16] = *(s16 *)(mp3data+inPtr+(0x20^S16)); v[8] += v[16]; ++ v[9] = *(s16 *)(mp3data+inPtr+(0x1C^S16)); v[17] = *(s16 *)(mp3data+inPtr+(0x22^S16)); v[9] += v[17]; ++ v[10]= *(s16 *)(mp3data+inPtr+(0x18^S16)); v[19] = *(s16 *)(mp3data+inPtr+(0x26^S16)); v[10]+= v[19]; ++ v[11]= *(s16 *)(mp3data+inPtr+(0x1A^S16)); v[18] = *(s16 *)(mp3data+inPtr+(0x24^S16)); v[11]+= v[18]; + +- v[12]= *(s16 *)(mp3data+inPtr+(0x10^2)); v[23] = *(s16 *)(mp3data+inPtr+(0x2E^2)); v[12]+= v[23]; +- v[13]= *(s16 *)(mp3data+inPtr+(0x12^2)); v[22] = *(s16 *)(mp3data+inPtr+(0x2C^2)); v[13]+= v[22]; +- v[14]= *(s16 *)(mp3data+inPtr+(0x16^2)); v[20] = *(s16 *)(mp3data+inPtr+(0x28^2)); v[14]+= v[20]; +- v[15]= *(s16 *)(mp3data+inPtr+(0x14^2)); v[21] = *(s16 *)(mp3data+inPtr+(0x2A^2)); v[15]+= v[21]; ++ v[12]= *(s16 *)(mp3data+inPtr+(0x10^S16)); v[23] = *(s16 *)(mp3data+inPtr+(0x2E^S16)); v[12]+= v[23]; ++ v[13]= *(s16 *)(mp3data+inPtr+(0x12^S16)); v[22] = *(s16 *)(mp3data+inPtr+(0x2C^S16)); v[13]+= v[22]; ++ v[14]= *(s16 *)(mp3data+inPtr+(0x16^S16)); v[20] = *(s16 *)(mp3data+inPtr+(0x28^S16)); v[14]+= v[20]; ++ v[15]= *(s16 *)(mp3data+inPtr+(0x14^S16)); v[21] = *(s16 *)(mp3data+inPtr+(0x2A^S16)); v[15]+= v[21]; + + // Part 2-4 + +@@ -380,25 +380,25 @@ static void InnerLoop () { + + // Part 6 - 100% Accurate + +- v[0] = *(s16 *)(mp3data+inPtr+(0x00^2)); v[31] = *(s16 *)(mp3data+inPtr+(0x3E^2)); v[0] -= v[31]; +- v[1] = *(s16 *)(mp3data+inPtr+(0x02^2)); v[30] = *(s16 *)(mp3data+inPtr+(0x3C^2)); v[1] -= v[30]; +- v[2] = *(s16 *)(mp3data+inPtr+(0x06^2)); v[28] = *(s16 *)(mp3data+inPtr+(0x38^2)); v[2] -= v[28]; +- v[3] = *(s16 *)(mp3data+inPtr+(0x04^2)); v[29] = *(s16 *)(mp3data+inPtr+(0x3A^2)); v[3] -= v[29]; ++ v[0] = *(s16 *)(mp3data+inPtr+(0x00^S16)); v[31] = *(s16 *)(mp3data+inPtr+(0x3E^S16)); v[0] -= v[31]; ++ v[1] = *(s16 *)(mp3data+inPtr+(0x02^S16)); v[30] = *(s16 *)(mp3data+inPtr+(0x3C^S16)); v[1] -= v[30]; ++ v[2] = *(s16 *)(mp3data+inPtr+(0x06^S16)); v[28] = *(s16 *)(mp3data+inPtr+(0x38^S16)); v[2] -= v[28]; ++ v[3] = *(s16 *)(mp3data+inPtr+(0x04^S16)); v[29] = *(s16 *)(mp3data+inPtr+(0x3A^S16)); v[3] -= v[29]; + +- v[4] = *(s16 *)(mp3data+inPtr+(0x0E^2)); v[24] = *(s16 *)(mp3data+inPtr+(0x30^2)); v[4] -= v[24]; +- v[5] = *(s16 *)(mp3data+inPtr+(0x0C^2)); v[25] = *(s16 *)(mp3data+inPtr+(0x32^2)); v[5] -= v[25]; +- v[6] = *(s16 *)(mp3data+inPtr+(0x08^2)); v[27] = *(s16 *)(mp3data+inPtr+(0x36^2)); v[6] -= v[27]; +- v[7] = *(s16 *)(mp3data+inPtr+(0x0A^2)); v[26] = *(s16 *)(mp3data+inPtr+(0x34^2)); v[7] -= v[26]; ++ v[4] = *(s16 *)(mp3data+inPtr+(0x0E^S16)); v[24] = *(s16 *)(mp3data+inPtr+(0x30^S16)); v[4] -= v[24]; ++ v[5] = *(s16 *)(mp3data+inPtr+(0x0C^S16)); v[25] = *(s16 *)(mp3data+inPtr+(0x32^S16)); v[5] -= v[25]; ++ v[6] = *(s16 *)(mp3data+inPtr+(0x08^S16)); v[27] = *(s16 *)(mp3data+inPtr+(0x36^S16)); v[6] -= v[27]; ++ v[7] = *(s16 *)(mp3data+inPtr+(0x0A^S16)); v[26] = *(s16 *)(mp3data+inPtr+(0x34^S16)); v[7] -= v[26]; + +- v[8] = *(s16 *)(mp3data+inPtr+(0x1E^2)); v[16] = *(s16 *)(mp3data+inPtr+(0x20^2)); v[8] -= v[16]; +- v[9] = *(s16 *)(mp3data+inPtr+(0x1C^2)); v[17] = *(s16 *)(mp3data+inPtr+(0x22^2)); v[9] -= v[17]; +- v[10]= *(s16 *)(mp3data+inPtr+(0x18^2)); v[19] = *(s16 *)(mp3data+inPtr+(0x26^2)); v[10]-= v[19]; +- v[11]= *(s16 *)(mp3data+inPtr+(0x1A^2)); v[18] = *(s16 *)(mp3data+inPtr+(0x24^2)); v[11]-= v[18]; ++ v[8] = *(s16 *)(mp3data+inPtr+(0x1E^S16)); v[16] = *(s16 *)(mp3data+inPtr+(0x20^S16)); v[8] -= v[16]; ++ v[9] = *(s16 *)(mp3data+inPtr+(0x1C^S16)); v[17] = *(s16 *)(mp3data+inPtr+(0x22^S16)); v[9] -= v[17]; ++ v[10]= *(s16 *)(mp3data+inPtr+(0x18^S16)); v[19] = *(s16 *)(mp3data+inPtr+(0x26^S16)); v[10]-= v[19]; ++ v[11]= *(s16 *)(mp3data+inPtr+(0x1A^S16)); v[18] = *(s16 *)(mp3data+inPtr+(0x24^S16)); v[11]-= v[18]; + +- v[12]= *(s16 *)(mp3data+inPtr+(0x10^2)); v[23] = *(s16 *)(mp3data+inPtr+(0x2E^2)); v[12]-= v[23]; +- v[13]= *(s16 *)(mp3data+inPtr+(0x12^2)); v[22] = *(s16 *)(mp3data+inPtr+(0x2C^2)); v[13]-= v[22]; +- v[14]= *(s16 *)(mp3data+inPtr+(0x16^2)); v[20] = *(s16 *)(mp3data+inPtr+(0x28^2)); v[14]-= v[20]; +- v[15]= *(s16 *)(mp3data+inPtr+(0x14^2)); v[21] = *(s16 *)(mp3data+inPtr+(0x2A^2)); v[15]-= v[21]; ++ v[12]= *(s16 *)(mp3data+inPtr+(0x10^S16)); v[23] = *(s16 *)(mp3data+inPtr+(0x2E^S16)); v[12]-= v[23]; ++ v[13]= *(s16 *)(mp3data+inPtr+(0x12^S16)); v[22] = *(s16 *)(mp3data+inPtr+(0x2C^S16)); v[13]-= v[22]; ++ v[14]= *(s16 *)(mp3data+inPtr+(0x16^S16)); v[20] = *(s16 *)(mp3data+inPtr+(0x28^S16)); v[14]-= v[20]; ++ v[15]= *(s16 *)(mp3data+inPtr+(0x14^S16)); v[21] = *(s16 *)(mp3data+inPtr+(0x2A^S16)); v[15]-= v[21]; + + //0, 1, 3, 2, 7, 6, 4, 5, 7, 6, 4, 5, 0, 1, 3, 2 + const u16 LUT6[16] = { 0xFFB2, 0xFD3A, 0xF10A, 0xF854, +@@ -519,8 +519,8 @@ static void InnerLoop () { + //Clamp(v0); + //Clamp(v18); + // clamp??? +- *(s16 *)(mp3data+(outPtr^2)) = v0; +- *(s16 *)(mp3data+((outPtr+2)^2)) = v18; ++ *(s16 *)(mp3data+(outPtr^S16)) = v0; ++ *(s16 *)(mp3data+((outPtr+2)^S16)) = v18; + outPtr+=4; + addptr += 0x30; + offset += 0x38; +@@ -540,10 +540,10 @@ static void InnerLoop () { + s32 mult4 = *(s32 *)(mp3data+0xCEC); + if (t4 & 0x2) { + v2 = (v2 * *(u32 *)(mp3data+0xCE8)) >> 0x10; +- *(s16 *)(mp3data+(outPtr^2)) = v2; ++ *(s16 *)(mp3data+(outPtr^S16)) = v2; + } else { + v4 = (v4 * *(u32 *)(mp3data+0xCE8)) >> 0x10; +- *(s16 *)(mp3data+(outPtr^2)) = v4; ++ *(s16 *)(mp3data+(outPtr^S16)) = v4; + mult4 = *(u32 *)(mp3data+0xCE8); + } + addptr -= 0x50; +@@ -569,8 +569,8 @@ static void InnerLoop () { + //Clamp(v0); + //Clamp(v18); + // clamp??? +- *(s16 *)(mp3data+((outPtr+2)^2)) = v0; +- *(s16 *)(mp3data+((outPtr+4)^2)) = v18; ++ *(s16 *)(mp3data+((outPtr+2)^S16)) = v0; ++ *(s16 *)(mp3data+((outPtr+4)^S16)) = v18; + outPtr+=4; + addptr -= 0x50; + } +@@ -584,21 +584,21 @@ static void InnerLoop () { + hi1 = (int)hi1 >> 0x10; + for (i = 0; i < 8; i++) { + // v0 +- v = (*(s16 *)(mp3data+((tmp-0x40)^2)) * hi0); ++ v = (*(s16 *)(mp3data+((tmp-0x40)^S16)) * hi0); + if (v > 32767) v = 32767; else if (v < -32767) v = -32767; +- *(s16 *)((u8 *)mp3data+((tmp-0x40)^2)) = (s16)v; ++ *(s16 *)((u8 *)mp3data+((tmp-0x40)^S16)) = (s16)v; + // v17 +- v = (*(s16 *)(mp3data+((tmp-0x30)^2)) * hi0); ++ v = (*(s16 *)(mp3data+((tmp-0x30)^S16)) * hi0); + if (v > 32767) v = 32767; else if (v < -32767) v = -32767; +- *(s16 *)((u8 *)mp3data+((tmp-0x30)^2)) = v; ++ *(s16 *)((u8 *)mp3data+((tmp-0x30)^S16)) = v; + // v2 +- v = (*(s16 *)(mp3data+((tmp-0x1E)^2)) * hi1); ++ v = (*(s16 *)(mp3data+((tmp-0x1E)^S16)) * hi1); + if (v > 32767) v = 32767; else if (v < -32767) v = -32767; +- *(s16 *)((u8 *)mp3data+((tmp-0x1E)^2)) = v; ++ *(s16 *)((u8 *)mp3data+((tmp-0x1E)^S16)) = v; + // v4 +- v = (*(s16 *)(mp3data+((tmp-0xE)^2)) * hi1); ++ v = (*(s16 *)(mp3data+((tmp-0xE)^S16)) * hi1); + if (v > 32767) v = 32767; else if (v < -32767) v = -32767; +- *(s16 *)((u8 *)mp3data+((tmp-0xE)^2)) = v; ++ *(s16 *)((u8 *)mp3data+((tmp-0xE)^S16)) = v; + tmp += 2; + } + } diff --git a/debian/patches/series b/debian/patches/series index 74f863c..687f8d1 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -38,3 +38,4 @@ rice_fog.patch ftbfs-gvariant-type-conflicts.path dont-install-unneeded.patch rsp_ucode2_reset.patch +rsp_hle_bigendian.patch -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/mupen64plus.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

