1 uint32 bigcount = max / ff->mrratio; 2 3 // Warning, number of coefficients is hardcoded. 4 asm volatile( 5 "pushl %%ebp\n\t" 6 "pushl %%edi\n\t" 7 8 "movl %%ecx,%%ebp\n\t" 9 #ifdef TMP_FSSE3 10 "bigloop2:\n\t" 11 #else 12 "bigloop:\n\t" 13 #endif 14 "xorps %%xmm1,%%xmm1\n\t" 15 "movl $64, %%ecx\n\t" 16 17 #ifdef TMP_FSSE3 18 "frup2:\n\t" 19 #else 20 "frup:\n\t" 21 #endif 22 "movaps (%%edi), %%xmm0\n\t" 23 "mulps (%%esi), %%xmm0\n\t" 24 "movaps 16(%%edi), %%xmm2\n\t" 25 "mulps 16(%%esi), %%xmm2\n\t" 26 "addl $32, %%edi\n\t" 27 "addl $32, %%esi\n\t" 28 "addps %%xmm0,%%xmm1\n\t" 29 "addps %%xmm2,%%xmm1\n\t" 30 "decl %%ecx\n\t" 31 #ifdef TMP_FSSE3 32 "jnz frup2\n\t" 33 #else 34 "jnz frup\n\t" 35 #endif 36 37 #ifdef TMP_FSSE3 38 "haddps %%xmm1, %%xmm1\n\t" 39 "haddps %%xmm1, %%xmm1\n\t" 40 #else 41 "movaps %%xmm1, %%xmm2\n\t" 42 "shufps $0xb1, %%xmm2, %%xmm1\n\t" 43 "addps %%xmm2, %%xmm1\n\t" 44 "movaps %%xmm1, %%xmm2\n\t" 45 "shufps $0x0a, %%xmm1, %%xmm1\n\t" 46 "addps %%xmm2, %%xmm1\n\t" 47 #endif 48 "movss %%xmm1, (%%eax)\n\t" 49 "subl $2048, %%edi\n\t" 50 "subl $2048, %%esi\n\t" 51 52 "addl $4, %%eax\n\t" 53 "addl %%edx, %%edi\n\t" 54 "decl %%ebp\n\t" 55 #ifdef TMP_FSSE3 56 "jnz bigloop2\n\t" 57 #else 58 "jnz bigloop\n\t" 59 #endif 60 61 "popl %%edi\n\t" 62 "popl %%ebp\n\t" 63 : 64 : "D" (in), "S" (ff->coeffs), "a" (flout), "d" (4*ff->mrratio), "c" (bigcount) 65 ); 66