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