sound/scspdsp.cpp: Use util::sext for sign extension and use lowercase hexadecimal literals. (#12597)

This commit is contained in:
cam900 2024-07-21 04:35:15 +09:00 committed by GitHub
parent f8a806b0ba
commit 3adb271db0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -92,21 +92,21 @@ void SCSPDSP::Step()
//if (!IPtr[0] && !IPtr[1] && !IPtr[2] && !IPtr[3]) //if (!IPtr[0] && !IPtr[1] && !IPtr[2] && !IPtr[3])
//break; //break;
u32 const TRA = (IPtr[0] >> 8) & 0x7F; u32 const TRA = (IPtr[0] >> 8) & 0x7f;
u32 const TWT = (IPtr[0] >> 7) & 0x01; u32 const TWT = (IPtr[0] >> 7) & 0x01;
u32 const TWA = (IPtr[0] >> 0) & 0x7F; u32 const TWA = (IPtr[0] >> 0) & 0x7f;
u32 const XSEL = (IPtr[1] >> 15) & 0x01; u32 const XSEL = (IPtr[1] >> 15) & 0x01;
u32 const YSEL = (IPtr[1] >> 13) & 0x03; u32 const YSEL = (IPtr[1] >> 13) & 0x03;
u32 const IRA = (IPtr[1] >> 6) & 0x3F; u32 const IRA = (IPtr[1] >> 6) & 0x3f;
u32 const IWT = (IPtr[1] >> 5) & 0x01; u32 const IWT = (IPtr[1] >> 5) & 0x01;
u32 const IWA = (IPtr[1] >> 0) & 0x1F; u32 const IWA = (IPtr[1] >> 0) & 0x1f;
u32 const TABLE = (IPtr[2] >> 15) & 0x01; u32 const TABLE = (IPtr[2] >> 15) & 0x01;
u32 const MWT = (IPtr[2] >> 14) & 0x01; u32 const MWT = (IPtr[2] >> 14) & 0x01;
u32 const MRD = (IPtr[2] >> 13) & 0x01; u32 const MRD = (IPtr[2] >> 13) & 0x01;
u32 const EWT = (IPtr[2] >> 12) & 0x01; u32 const EWT = (IPtr[2] >> 12) & 0x01;
u32 const EWA = (IPtr[2] >> 8) & 0x0F; u32 const EWA = (IPtr[2] >> 8) & 0x0f;
u32 const ADRL = (IPtr[2] >> 7) & 0x01; u32 const ADRL = (IPtr[2] >> 7) & 0x01;
u32 const FRCL = (IPtr[2] >> 6) & 0x01; u32 const FRCL = (IPtr[2] >> 6) & 0x01;
u32 const SHIFT = (IPtr[2] >> 4) & 0x03; u32 const SHIFT = (IPtr[2] >> 4) & 0x03;
@ -164,10 +164,7 @@ void SCSPDSP::Step()
else else
return; return;
INPUTS <<= 8; INPUTS = util::sext(INPUTS, 24);
INPUTS >>= 8;
//if(INPUTS & 0x00800000)
//INPUTS |= 0xFF000000;
if (IWT) if (IWT)
{ {
@ -183,13 +180,7 @@ void SCSPDSP::Step()
if (BSEL) if (BSEL)
B = ACC; B = ACC;
else else
{ B = util::sext(TEMP[(TRA + DEC) & 0x7f], 24);
B = TEMP[(TRA + DEC) & 0x7F];
B <<= 8;
B >>= 8;
//if (B & 0x00800000)
//B |= 0xFF000000; //Sign extend
}
if (NEGB) if (NEGB)
B = 0 - B; B = 0 - B;
} }
@ -200,13 +191,7 @@ void SCSPDSP::Step()
if (XSEL) if (XSEL)
X = INPUTS; X = INPUTS;
else else
{ X = util::sext(TEMP[(TRA + DEC) & 0x7f], 24);
X = TEMP[(TRA + DEC) & 0x7F];
X <<= 8;
X >>= 8;
//if (X & 0x00800000)
//X |= 0xFF000000;
}
s32 Y = 0; //13 bit s32 Y = 0; //13 bit
if (YSEL == 0) if (YSEL == 0)
@ -214,9 +199,9 @@ void SCSPDSP::Step()
else if (YSEL == 1) else if (YSEL == 1)
Y = this->COEF[COEF] >> 3; //COEF is 16 bits Y = this->COEF[COEF] >> 3; //COEF is 16 bits
else if (YSEL == 2) else if (YSEL == 2)
Y = (Y_REG >> 11) & 0x1FFF; Y = (Y_REG >> 11) & 0x1fff;
else if (YSEL == 3) else if (YSEL == 3)
Y = (Y_REG >> 4) & 0x0FFF; Y = (Y_REG >> 4) & 0x0fff;
if (YRL) if (YRL)
Y_REG = INPUTS; Y_REG = INPUTS;
@ -224,46 +209,29 @@ void SCSPDSP::Step()
//Shifter //Shifter
s32 SHIFTED = 0; //24 bit s32 SHIFTED = 0; //24 bit
if (SHIFT == 0) if (SHIFT == 0)
SHIFTED = std::clamp<s32>(ACC, -0x00800000, 0x007FFFFF); SHIFTED = std::clamp<s32>(ACC, -0x00800000, 0x007fffff);
else if (SHIFT == 1) else if (SHIFT == 1)
SHIFTED = std::clamp<s32>(ACC * 2, -0x00800000, 0x007FFFFF); SHIFTED = std::clamp<s32>(ACC * 2, -0x00800000, 0x007fffff);
else if (SHIFT == 2) else if (SHIFT == 2)
{ SHIFTED = util::sext(ACC * 2, 24);
SHIFTED = ACC * 2;
SHIFTED <<= 8;
SHIFTED >>= 8;
//SHIFTED &= 0x00FFFFFF;
//if (SHIFTED & 0x00800000)
//SHIFTED |= 0xFF000000;
}
else if (SHIFT == 3) else if (SHIFT == 3)
{ SHIFTED = util::sext(ACC, 24);
SHIFTED = ACC;
SHIFTED <<= 8;
SHIFTED >>= 8;
//SHIFTED &= 0x00FFFFFF;
//if (SHIFTED & 0x00800000)
//SHIFTED |= 0xFF000000;
}
//ACCUM //ACCUM
Y <<= 19; Y = util::sext(Y, 13);
Y >>= 19;
//if (Y & 0x1000)
//Y |= 0xFFFFF000;
int64_t const v = (int64_t(X) * int64_t(Y)) >> 12; s64 const v = (s64(X) * s64(Y)) >> 12;
ACC = int(v + B); ACC = int(v + B);
if (TWT) if (TWT)
TEMP[(TWA + DEC) & 0x7F] = SHIFTED; TEMP[(TWA + DEC) & 0x7f] = SHIFTED;
if (FRCL) if (FRCL)
{ {
if (SHIFT == 3) if (SHIFT == 3)
FRC_REG = SHIFTED & 0x0FFF; FRC_REG = SHIFTED & 0x0fff;
else else
FRC_REG = (SHIFTED >> 11) & 0x1FFF; FRC_REG = (SHIFTED >> 11) & 0x1fff;
} }
if (MRD || MWT) if (MRD || MWT)
@ -279,7 +247,7 @@ void SCSPDSP::Step()
if (!TABLE) if (!TABLE)
ADDR &= RBL - 1; ADDR &= RBL - 1;
else else
ADDR &= 0xFFFF; ADDR &= 0xffff;
ADDR += RBP << 12; ADDR += RBP << 12;
ADDR <<= 1; ADDR <<= 1;
if (MRD && (step & 1)) //memory only allowed on odd? DoA inserts NOPs on even if (MRD && (step & 1)) //memory only allowed on odd? DoA inserts NOPs on even
@ -301,7 +269,7 @@ void SCSPDSP::Step()
if (ADRL) if (ADRL)
{ {
if (SHIFT == 3) if (SHIFT == 3)
ADRS_REG = (SHIFTED >> 12) & 0xFFF; ADRS_REG = (SHIFTED >> 12) & 0xfff;
else else
ADRS_REG = INPUTS >> 16; ADRS_REG = INPUTS >> 16;
} }