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
make: don't enable neon for all ARMs
[pcsx_rearmed.git]
/
plugins
/
dfsound
/
adsr.c
diff --git
a/plugins/dfsound/adsr.c
b/plugins/dfsound/adsr.c
index
69e55bd
..
23ff3df
100644
(file)
--- a/
plugins/dfsound/adsr.c
+++ b/
plugins/dfsound/adsr.c
@@
-63,9
+63,9
@@
INLINE void StartADSR(int ch) // MIX ADSR
\r
////////////////////////////////////////////////////////////////////////
\r
\r
\r
////////////////////////////////////////////////////////////////////////
\r
\r
-static int MixADSR(ADSRInfoEx *adsr, int ns_to)
\r
+static int MixADSR(
int *samples,
ADSRInfoEx *adsr, int ns_to)
\r
{
\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,11
+77,11
@@
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] >>= 10;
\r
+
samples[ns] *= (signed int)
EnvelopeVol >> 21;
\r
+
samples
[ns] >>= 10;
\r
}
\r
}
\r
else
\r
}
\r
}
\r
else
\r
@@
-89,11
+89,11
@@
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] >>= 10;
\r
+
samples[ns] *= (signed int)
EnvelopeVol >> 21;
\r
+
samples
[ns] >>= 10;
\r
}
\r
}
\r
\r
}
\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] >>= 10;
\r
+
samples[ns] *= (signed int)
EnvelopeVol >> 21;
\r
+
samples
[ns] >>= 10;
\r
}
\r
\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,11
+136,11
@@
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
EnvelopeVol = 0;
\r
\r
-
ChanBuf
[ns] *= EnvelopeVol >> 21;
\r
-
ChanBuf
[ns] >>= 10;
\r
+
samples
[ns] *= EnvelopeVol >> 21;
\r
+
samples
[ns] >>= 10;
\r
ns++;
\r
\r
if (((EnvelopeVol >> 27) & 0xf) <= level)
\r
ns++;
\r
\r
if (((EnvelopeVol >> 27) & 0xf) <= level)
\r
@@
-170,15
+170,15
@@
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] >>= 10;
\r
+
samples[ns] *= (signed int)
EnvelopeVol >> 21;
\r
+
samples
[ns] >>= 10;
\r
}
\r
}
\r
else
\r
}
\r
}
\r
else
\r
@@
-189,11
+189,11
@@
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] >>= 10;
\r
+
samples[ns] *= (signed int)
EnvelopeVol >> 21;
\r
+
samples
[ns] >>= 10;
\r
}
\r
}
\r
else
\r
}
\r
}
\r
else
\r
@@
-201,11
+201,11
@@
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] >>= 10;
\r
+
samples[ns] *= (signed int)
EnvelopeVol >> 21;
\r
+
samples
[ns] >>= 10;
\r
}
\r
}
\r
}
\r
}
\r
}
\r
}
\r
@@
-219,8
+219,9
@@
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
int ns = 0, val, rto, level;
\r
+ int64_t v64;
\r
\r
if (adsr->State == ADSR_RELEASE)
\r
{
\r
\r
if (adsr->State == ADSR_RELEASE)
\r
{
\r
@@
-230,14
+231,16
@@
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
else
\r
{
\r
break;
\r
}
\r
}
\r
else
\r
{
\r
- EnvelopeVol += val * ns_to;
\r
- if (EnvelopeVol > 0)
\r
+ v64 = EnvelopeVol;
\r
+ v64 += (int64_t)val * ns_to;
\r
+ EnvelopeVol = (int)v64;
\r
+ if (v64 > 0)
\r
ns = ns_to;
\r
}
\r
goto done;
\r
ns = ns_to;
\r
}
\r
goto done;
\r
@@
-254,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
@@
-275,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
@@
-293,24
+296,21
@@
static int SkipADSR(ADSRInfoEx *adsr, int ns_to)
case ADSR_SUSTAIN: // -> sustain
\r
if (adsr->SustainIncrease)
\r
{
\r
case ADSR_SUSTAIN: // -> sustain
\r
if (adsr->SustainIncrease)
\r
{
\r
+ ns = ns_to;
\r
+
\r
if (EnvelopeVol >= 0x7fff0000)
\r
if (EnvelopeVol >= 0x7fff0000)
\r
- {
\r
- ns = ns_to;
\r
break;
\r
break;
\r
- }
\r
\r
rto = 0;
\r
if (adsr->SustainModeExp && EnvelopeVol >= 0x60000000)
\r
rto = 8;
\r
val = RateTableAdd[adsr->SustainRate + rto];
\r
\r
\r
rto = 0;
\r
if (adsr->SustainModeExp && EnvelopeVol >= 0x60000000)
\r
rto = 8;
\r
val = RateTableAdd[adsr->SustainRate + rto];
\r
\r
- EnvelopeVol += val * (ns_to - ns);
\r
- if ((unsigned int)EnvelopeVol >= 0x7fe00000)
\r
- {
\r
+ v64 = EnvelopeVol;
\r
+ v64 += (int64_t)val * (ns_to - ns);
\r
+ EnvelopeVol = (int)v64;
\r
+ if (v64 >= 0x7fe00000ll)
\r
EnvelopeVol = 0x7fffffff;
\r
EnvelopeVol = 0x7fffffff;
\r
- ns = ns_to;
\r
- break;
\r
- }
\r
}
\r
else
\r
{
\r
}
\r
else
\r
{
\r
@@
-320,18
+320,17
@@
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
else
\r
{
\r
break;
\r
}
\r
}
\r
else
\r
{
\r
- EnvelopeVol += val * (ns_to - ns);
\r
- if (EnvelopeVol > 0)
\r
- {
\r
+ v64 = EnvelopeVol;
\r
+ v64 += (int64_t)val * (ns_to - ns);
\r
+ EnvelopeVol = (int)v64;
\r
+ if (v64 > 0)
\r
ns = ns_to;
\r
ns = ns_to;
\r
- break;
\r
- }
\r
}
\r
}
\r
break;
\r
}
\r
}
\r
break;
\r