Skip to content
Snippets Groups Projects
Commit 09b53529 authored by Jean-Marc Valin's avatar Jean-Marc Valin
Browse files

Getting gcc to use cmovs rather than branches in alg_quant()

Speeds up CELT encoding by around 5% on x86
parent 416611cf
No related branches found
No related tags found
No related merge requests found
......@@ -185,12 +185,10 @@ unsigned alg_quant(celt_norm *X, int N, int K, int spread, int B, ec_enc *enc,
/* Get rid of the sign */
sum = 0;
j=0; do {
if (X[j]>0)
signx[j]=1;
else {
signx[j]=-1;
X[j]=-X[j];
}
/* OPT: Make sure the following two lines result in conditional moves
rather than branches. */
signx[j] = X[j]>0 ? 1 : -1;
X[j] = ABS16(X[j]);
iy[j] = 0;
y[j] = 0;
} while (++j<N);
......@@ -306,8 +304,9 @@ unsigned alg_quant(celt_norm *X, int N, int K, int spread, int B, ec_enc *enc,
j=0;
do {
X[j] = MULT16_16(signx[j],X[j]);
if (signx[j] < 0)
iy[j] = -iy[j];
/* OPT: Make sure your compiler uses a conditional move here rather than
a branch. */
iy[j] = signx[j] < 0 ? -iy[j] : iy[j];
} while (++j<N);
encode_pulses(iy, N, K, enc);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment