Commit f469094c authored by Loren Merritt's avatar Loren Merritt

tweak ff_imdct_calc_3dn2

Originally committed as revision 6312 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent ebbafcb4
...@@ -177,15 +177,13 @@ void ff_imdct_calc_3dn2(MDCTContext *s, FFTSample *output, ...@@ -177,15 +177,13 @@ void ff_imdct_calc_3dn2(MDCTContext *s, FFTSample *output,
); );
} }
z += n8; k = n-8;
asm volatile("movd %0, %%mm7" ::"r"(1<<31)); asm volatile("movd %0, %%mm7" ::"r"(1<<31));
for(k = 0; k < n8; k++) { asm volatile(
asm volatile( "1: \n\t"
"movq %0, %%mm0 \n\t" "movq (%4,%0), %%mm0 \n\t" // z[n8+k]
"pswapd %1, %%mm1 \n\t" "neg %0 \n\t"
::"m"(z[k]), "m"(z[-1-k]) "pswapd -8(%4,%0), %%mm1 \n\t" // z[n8-1-k]
);
asm volatile(
"movq %%mm0, %%mm2 \n\t" "movq %%mm0, %%mm2 \n\t"
"pxor %%mm7, %%mm2 \n\t" "pxor %%mm7, %%mm2 \n\t"
"punpckldq %%mm1, %%mm2 \n\t" "punpckldq %%mm1, %%mm2 \n\t"
...@@ -194,15 +192,17 @@ void ff_imdct_calc_3dn2(MDCTContext *s, FFTSample *output, ...@@ -194,15 +192,17 @@ void ff_imdct_calc_3dn2(MDCTContext *s, FFTSample *output,
"pswapd %%mm0, %%mm4 \n\t" "pswapd %%mm0, %%mm4 \n\t"
"pxor %%mm7, %%mm0 \n\t" "pxor %%mm7, %%mm0 \n\t"
"pxor %%mm7, %%mm4 \n\t" "pxor %%mm7, %%mm4 \n\t"
"movq %%mm0, %0 \n\t" // { -z[n8+k].im, z[n8-1-k].re } "movq %%mm3, -8(%3,%0) \n\t" // output[n-2-2*k] = { z[n8-1-k].im, -z[n8+k].re }
"movq %%mm4, %1 \n\t" // { -z[n8-1-k].re, z[n8+k].im } "movq %%mm4, -8(%2,%0) \n\t" // output[n2-2-2*k]= { -z[n8-1-k].re, z[n8+k].im }
"movq %%mm2, %2 \n\t" // { -z[n8+k].re, z[n8-1-k].im } "neg %0 \n\t"
"movq %%mm3, %3 \n\t" // { z[n8-1-k].im, -z[n8+k].re } "movq %%mm0, (%1,%0) \n\t" // output[2*k] = { -z[n8+k].im, z[n8-1-k].re }
:"=m"(output[2*k]), "=m"(output[n2-2-2*k]), "movq %%mm2, (%2,%0) \n\t" // output[n2+2*k] = { -z[n8+k].re, z[n8-1-k].im }
"=m"(output[n2+2*k]), "=m"(output[n-2-2*k]) "sub $8, %0 \n\t"
::"memory" "jge 1b \n\t"
); :"+r"(k)
} :"r"(output), "r"(output+n2), "r"(output+n), "r"(z+n8)
:"memory"
);
asm volatile("femms"); asm volatile("femms");
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment