lavc/vorbisdec: use intermediate variables

The compiler cannot infer that the two float vectors do not alias,
causing unnecessary extra loads and serialisation. This patch caches
the two input values in local variables so that compiler can optimise
individual loop iterations.
This commit is contained in:
Rémi Denis-Courmont 2022-09-19 19:10:44 +03:00 committed by James Almer
parent b52034270a
commit 5c15cb138e

View File

@ -1581,22 +1581,22 @@ static inline int vorbis_residue_decode(vorbis_context *vc, vorbis_residue *vr,
void ff_vorbis_inverse_coupling(float *mag, float *ang, ptrdiff_t blocksize)
{
for (ptrdiff_t i = 0; i < blocksize; i++) {
if (mag[i] > 0.0) {
if (ang[i] > 0.0) {
ang[i] = mag[i] - ang[i];
for (ptrdiff_t i = 0; i < blocksize; i++) {
float angi = ang[i], magi = mag[i];
if (magi > 0.f) {
if (angi > 0.f) {
ang[i] = magi - angi;
} else {
float temp = ang[i];
ang[i] = mag[i];
mag[i] += temp;
ang[i] = magi;
mag[i] = magi + angi;
}
} else {
if (ang[i] > 0.0) {
ang[i] += mag[i];
if (angi > 0.f) {
ang[i] = magi + angi;
} else {
float temp = ang[i];
ang[i] = mag[i];
mag[i] -= temp;
ang[i] = magi;
mag[i] = magi - angi;
}
}
}