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