notaz.gp2x.de
/
pcsx_rearmed.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
spu: avoid relying on signed overflow undefined behavior
[pcsx_rearmed.git]
/
plugins
/
dfsound
/
adsr.c
diff --git
a/plugins/dfsound/adsr.c
b/plugins/dfsound/adsr.c
index
9e32862
..
cb366dc
100644
(file)
--- a/
plugins/dfsound/adsr.c
+++ b/
plugins/dfsound/adsr.c
@@
-65,7
+65,7
@@
INLINE void StartADSR(int ch) // MIX ADSR
\r
static int MixADSR(ADSRInfoEx *adsr, int ns_to)
\r
{
\r
\r
static int MixADSR(ADSRInfoEx *adsr, int ns_to)
\r
{
\r
- int EnvelopeVol = adsr->EnvelopeVol;
\r
+
unsigned
int EnvelopeVol = adsr->EnvelopeVol;
\r
int ns = 0, val, rto, level;
\r
\r
if (adsr->State == ADSR_RELEASE)
\r
int ns = 0, val, rto, level;
\r
\r
if (adsr->State == ADSR_RELEASE)
\r
@@
-77,10
+77,10
@@
static int MixADSR(ADSRInfoEx *adsr, int ns_to)
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
- if (EnvelopeVol <= 0)
\r
+ if (
(signed int)
EnvelopeVol <= 0)
\r
break;
\r
\r
break;
\r
\r
- ChanBuf[ns] *= EnvelopeVol >> 21;
\r
+ ChanBuf[ns] *=
(signed int)
EnvelopeVol >> 21;
\r
ChanBuf[ns] >>= 10;
\r
}
\r
}
\r
ChanBuf[ns] >>= 10;
\r
}
\r
}
\r
@@
-89,10
+89,10
@@
static int MixADSR(ADSRInfoEx *adsr, int ns_to)
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += val;
\r
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += val;
\r
- if (EnvelopeVol <= 0)
\r
+ if (
(signed int)
EnvelopeVol <= 0)
\r
break;
\r
\r
break;
\r
\r
- ChanBuf[ns] *= EnvelopeVol >> 21;
\r
+ ChanBuf[ns] *=
(signed int)
EnvelopeVol >> 21;
\r
ChanBuf[ns] >>= 10;
\r
}
\r
}
\r
ChanBuf[ns] >>= 10;
\r
}
\r
}
\r
@@
-111,14
+111,14
@@
static int MixADSR(ADSRInfoEx *adsr, int ns_to)
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += val;
\r
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += val;
\r
- if (
EnvelopeVol < 0)
\r
+ if (
(signed int)EnvelopeVol < 0) // overflow
\r
break;
\r
\r
break;
\r
\r
- ChanBuf[ns] *= EnvelopeVol >> 21;
\r
+ ChanBuf[ns] *=
(signed int)
EnvelopeVol >> 21;
\r
ChanBuf[ns] >>= 10;
\r
}
\r
\r
ChanBuf[ns] >>= 10;
\r
}
\r
\r
- if (EnvelopeVol < 0) // overflow
\r
+ if (
(signed int)
EnvelopeVol < 0) // overflow
\r
{
\r
EnvelopeVol = 0x7fffffff;
\r
adsr->State = ADSR_DECAY;
\r
{
\r
EnvelopeVol = 0x7fffffff;
\r
adsr->State = ADSR_DECAY;
\r
@@
-136,7
+136,7
@@
static int MixADSR(ADSRInfoEx *adsr, int ns_to)
for (; ns < ns_to; )
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
for (; ns < ns_to; )
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
- if (EnvelopeVol < 0)
\r
+ if (
(signed int)
EnvelopeVol < 0)
\r
EnvelopeVol = 0;
\r
\r
ChanBuf[ns] *= EnvelopeVol >> 21;
\r
EnvelopeVol = 0;
\r
\r
ChanBuf[ns] *= EnvelopeVol >> 21;
\r
@@
-170,14
+170,14
@@
static int MixADSR(ADSRInfoEx *adsr, int ns_to)
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += val;
\r
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += val;
\r
- if (
(unsigned int)
EnvelopeVol >= 0x7fe00000)
\r
+ if (EnvelopeVol >= 0x7fe00000)
\r
{
\r
EnvelopeVol = 0x7fffffff;
\r
ns = ns_to;
\r
break;
\r
}
\r
\r
{
\r
EnvelopeVol = 0x7fffffff;
\r
ns = ns_to;
\r
break;
\r
}
\r
\r
- ChanBuf[ns] *= EnvelopeVol >> 21;
\r
+ ChanBuf[ns] *=
(signed int)
EnvelopeVol >> 21;
\r
ChanBuf[ns] >>= 10;
\r
}
\r
}
\r
ChanBuf[ns] >>= 10;
\r
}
\r
}
\r
@@
-189,10
+189,10
@@
static int MixADSR(ADSRInfoEx *adsr, int ns_to)
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
- if (
EnvelopeVol < 0)
\r
+ if (
(signed int)EnvelopeVol < 0)
\r
break;
\r
\r
break;
\r
\r
- ChanBuf[ns] *= EnvelopeVol >> 21;
\r
+ ChanBuf[ns] *=
(signed int)
EnvelopeVol >> 21;
\r
ChanBuf[ns] >>= 10;
\r
}
\r
}
\r
ChanBuf[ns] >>= 10;
\r
}
\r
}
\r
@@
-201,10
+201,10
@@
static int MixADSR(ADSRInfoEx *adsr, int ns_to)
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += val;
\r
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += val;
\r
- if (
EnvelopeVol < 0)
\r
+ if (
(signed int)EnvelopeVol < 0)
\r
break;
\r
\r
break;
\r
\r
- ChanBuf[ns] *= EnvelopeVol >> 21;
\r
+ ChanBuf[ns] *=
(signed int)
EnvelopeVol >> 21;
\r
ChanBuf[ns] >>= 10;
\r
}
\r
}
\r
ChanBuf[ns] >>= 10;
\r
}
\r
}
\r
@@
-219,7
+219,7
@@
done:
\r
static int SkipADSR(ADSRInfoEx *adsr, int ns_to)
\r
{
\r
\r
static int SkipADSR(ADSRInfoEx *adsr, int ns_to)
\r
{
\r
- int EnvelopeVol = adsr->EnvelopeVol;
\r
+
unsigned
int EnvelopeVol = adsr->EnvelopeVol;
\r
int ns = 0, val, rto, level;
\r
int64_t v64;
\r
\r
int ns = 0, val, rto, level;
\r
int64_t v64;
\r
\r
@@
-231,7
+231,7
@@
static int SkipADSR(ADSRInfoEx *adsr, int ns_to)
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
- if (EnvelopeVol <= 0)
\r
+ if (
(signed int)
EnvelopeVol <= 0)
\r
break;
\r
}
\r
}
\r
break;
\r
}
\r
}
\r
@@
-257,10
+257,10
@@
static int SkipADSR(ADSRInfoEx *adsr, int ns_to)
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += val;
\r
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += val;
\r
- if (EnvelopeVol < 0)
\r
+ if (
(signed int)
EnvelopeVol < 0)
\r
break;
\r
}
\r
break;
\r
}
\r
- if (EnvelopeVol < 0) // overflow
\r
+ if (
(signed int)
EnvelopeVol < 0) // overflow
\r
{
\r
EnvelopeVol = 0x7fffffff;
\r
adsr->State = ADSR_DECAY;
\r
{
\r
EnvelopeVol = 0x7fffffff;
\r
adsr->State = ADSR_DECAY;
\r
@@
-278,7
+278,7
@@
static int SkipADSR(ADSRInfoEx *adsr, int ns_to)
for (; ns < ns_to; )
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
for (; ns < ns_to; )
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
- if (EnvelopeVol < 0)
\r
+ if (
(signed int)
EnvelopeVol < 0)
\r
EnvelopeVol = 0;
\r
\r
ns++;
\r
EnvelopeVol = 0;
\r
\r
ns++;
\r
@@
-320,7
+320,7
@@
static int SkipADSR(ADSRInfoEx *adsr, int ns_to)
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
- if (EnvelopeVol < 0)
\r
+ if (
(signed int)
EnvelopeVol < 0)
\r
break;
\r
}
\r
}
\r
break;
\r
}
\r
}
\r
@@
-330,10
+330,7
@@
static int SkipADSR(ADSRInfoEx *adsr, int ns_to)
v64 += (int64_t)val * (ns_to - ns);
\r
EnvelopeVol = (int)v64;
\r
if (v64 > 0)
\r
v64 += (int64_t)val * (ns_to - ns);
\r
EnvelopeVol = (int)v64;
\r
if (v64 > 0)
\r
- {
\r
ns = ns_to;
\r
ns = ns_to;
\r
- break;
\r
- }
\r
}
\r
}
\r
break;
\r
}
\r
}
\r
break;
\r