1 f(short *samples, int *volumes, unsigned channels,
5 asm volatile(" xor %3, %3\n"
11 " movq (%1, %3, 4), %%mm0\n"
13 " pxor %%mm4, %%mm4\n"
14 " punpcklwd %%mm4, %%mm1\n"
15 " pcmpgtw %%mm0, %%mm4\n"
16 " pand %%mm1, %%mm4\n"
17 " movq %%mm1, %%mm5\n"
18 " pmulhw %%mm0, %%mm1\n"
19 " paddw %%mm4, %%mm1\n"
21 " pmaddwd %%mm5, %%mm0\n"
22 " paddd %%mm1, %%mm0\n"
23 " packssdw %%mm0, %%mm0\n"
35 " movq (%1, %3, 4), %%mm0\n"
36 " movq 8(%1, %3, 4), %%mm2\n"
38 " movd 4(%0), %%mm3\n"
39 " pxor %%mm4, %%mm4\n"
40 " punpcklwd %%mm4, %%mm1\n"
41 " pcmpgtw %%mm0, %%mm4\n"
42 " pand %%mm1, %%mm4\n"
43 " movq %%mm1, %%mm5\n"
44 " pmulhw %%mm0, %%mm1\n"
45 " paddw %%mm4, %%mm1\n"
47 " pmaddwd %%mm5, %%mm0\n"
48 " paddd %%mm1, %%mm0\n"
49 " packssdw %%mm0, %%mm0\n"
50 " pxor %%mm4, %%mm4\n"
51 " punpcklwd %%mm4, %%mm3\n"
52 " pcmpgtw %%mm2, %%mm4\n"
53 " pand %%mm3, %%mm4\n"
54 " movq %%mm3, %%mm5\n"
55 " pmulhw %%mm2, %%mm3\n"
56 " paddw %%mm4, %%mm3\n"
58 " pmaddwd %%mm5, %%mm2\n"
59 " paddd %%mm3, %%mm2\n"
60 " packssdw %%mm2, %%mm2\n"
62 " movd %%mm2, 4(%0)\n"
72 (samples), "+r"(volumes), "+r"(length),
74 "=&r"(temp):"X"((long) channels):"cc");