1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| "movq (%0) , %%xmm0 \n" // tu charges 8 bytes de pfilter dans xmm0
"pxor %%xmm7 , %%xmm7 \n" // tu nettoie xmm7 à 0
"punpcklbw %%xmm7 , %%xmm0 \n" // tu convertis tes 8 bytes en 8 words
"movdqu (%1) , %%xmm1 \n" // tu charges 8 words de Src dans xmm1
"pmulhuw %%xmm1 , %%xmm0 \n" // multiplication termes à termes de xmm1 et xmm0 => résultat dans xmm0
// xmm0[0] = Src[x-1]*pfilter[4*x16 + 0]
// xmm0[1] = Src[x+0]*pfilter[4*x16 + 1]
// xmm0[2] = Src[x+1]*pfilter[4*x16 + 2]
// xmm0[3] = Src[x+2]*pfilter[4*x16 + 3]
// ... le reste on s'en fout
"phaddsw %%xmm7 , %%xmm0 \n" // xmm0[0] = xmm0[0] + xmm0[1] = Src[x-1]*pfilter[4*x16 + 0] + Src[x+0]*pfilter[4*x16 + 1];
// xmm0[1] = xmm0[2] + xmm0[3] = Src[x+1]*pfilter[4*x16 + 2] + Src[x+2]*pfilter[4*x16 + 3];
// ... le reste on s'en fout
"phaddsw %%xmm7 , %%xmm0 \n" // xmm0[0] = xmm0[0] + xmm0[1] = Src[x-1]*pfilter[4*x16 + 0] + Src[x+0]*pfilter[4*x16 + 1]
// + Src[x+1]*pfilter[4*x16 + 2] + Src[x+2]*pfilter[4*x16 + 3];
// ... le reste on s'en fout |
Partager