static SoftFloat sbr_sum_square_c(int (*x)[2], int n)
{
SoftFloat ret;
- int64_t accu = 0;
- int i, nz, round;
+ uint64_t accu = 0, round;
+ int i, nz;
+ unsigned u;
for (i = 0; i < n; i += 2) {
// Larger values are inavlid and could cause overflows of accu.
accu += (int64_t)x[i + 1][1] * x[i + 1][1];
}
- i = (int)(accu >> 32);
- if (i == 0) {
+ u = accu >> 32;
+ if (u == 0) {
nz = 1;
} else {
- nz = 0;
- while (FFABS(i) < 0x40000000) {
- i <<= 1;
+ nz = -1;
+ while (u < 0x80000000U) {
+ u <<= 1;
nz++;
}
nz = 32 - nz;
}
- round = 1 << (nz-1);
- i = (int)((accu + round) >> nz);
- i >>= 1;
- ret = av_int2sf(i, 15 - nz);
+ round = 1ULL << (nz-1);
+ u = ((accu + round) >> nz);
+ u >>= 1;
+ ret = av_int2sf(u, 15 - nz);
return ret;
}
static av_always_inline SoftFloat autocorr_calc(int64_t accu)
{
- int nz, mant, expo, round;
+ int nz, mant, expo;
+ unsigned round;
int i = (int)(accu >> 32);
if (i == 0) {
nz = 1;
nz = 32-nz;
}
- round = 1 << (nz-1);
+ round = 1U << (nz-1);
mant = (int)((accu + round) >> nz);
mant = (mant + 0x40)>>7;
mant <<= 6;