1 uint32 bigcount = max / ff->mrratio; 2 3 // Warning, number of coefficients is hardcoded. 4 asm volatile( 5 "femms\n\t" 6 "pushl %%ebp\n\t" 7 "pushl %%edi\n\t" 8 9 "movl %%ecx,%%ebp\n\t" 10 "bigloopnow:\n\t" 11 12 "pxor %%mm4, %%mm4\n\t" 13 14 "movl $128, %%ecx\n\t" 15 16 "frupnow:\n\t" 17 18 "movq (%%edi), %%mm0\n\t" 19 "movq (%%eax), %%mm1\n\t" 20 "pfmul %%mm1, %%mm0\n\t" 21 "movq 8(%%edi), %%mm2\n\t" 22 "movq 8(%%eax), %%mm3\n\t" 23 "pfmul %%mm3, %%mm2\n\t" 24 "addl $16, %%edi\n\t" 25 "addl $16, %%eax\n\t" 26 "pfadd %%mm2, %%mm0\n\t" 27 "pfadd %%mm0, %%mm4\n\t" 28 "decl %%ecx\n\t" 29 "jnz frupnow\n\t" 30 31 "movq %%mm4, %%mm1\n\t" 32 "movq %%mm4, %%mm2\n\t" 33 34 "punpckldq %%mm4, %%mm1\n\t" 35 "punpckhdq %%mm1, %%mm2\n\t" 36 37 "pfadd %%mm2, %%mm4\n\t" 38 39 "movd %%mm4, (%%esi)\n\t" 40 "subl $2048, %%edi\n\t" 41 "subl $2048, %%eax\n\t" 42 43 "addl $4, %%esi\n\t" 44 "addl %%edx, %%edi\n\t" 45 "decl %%ebp\n\t" 46 "jnz bigloopnow\n\t" 47 48 "popl %%edi\n\t" 49 "popl %%ebp\n\t" 50 "femms\n\t" 51 : 52 : "D" (in), "a" (ff->coeffs), "S" (flout), "d" (4*ff->mrratio), "c" (bigcount) 53 ); 54