Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- mov eax, -1
- movd mm7, eax
- punpckldq mm7, mm7 //распаковка младших упакованных данных (двойные слова в учетверное слово)
- packuswb mm7, mm7 //преобразовывает знаковые слова в байты без знака
- movq mm0, a //mm0 = a
- movq mm1, mm0 //mm0 = mm1 = a
- movq mm2, mm7
- pcmpgtb mm2, mm0
- pxor mm2, mm7
- punpcklbw mm0, mm2 //mm0 = a[1..4] // распаковать младшие упакованные данные, преобразовывать байты в слова
- punpckhbw mm1, mm2 //mm1 = a[5..8] // распаковать старшие упакованные данные
- movq mm2, b //mm2 = b
- movq mm3, mm2 //mm3 = mm2 = b
- movq mm4, mm7
- pcmpgtb mm4, mm2
- pxor mm4, mm7
- punpcklbw mm2, mm4 //mm2 = b[1..4]
- punpckhbw mm3, mm4 //mm3 = b[5..8]
- psubsw mm0, mm2 //mm0 = a-b[1..4]
- psubsw mm1, mm3 //mm1 = a-b[5..8]
- movq mm2, c //mm2 = c
- movq mm3, mm2 //mm3 = mm2 = c
- movq mm4, mm7
- pcmpgtb mm4, mm2
- pxor mm4, mm7
- punpcklbw mm2, mm4 //mm2 = c[1..4]
- punpckhbw mm3, mm4 //mm3 = c[5..8]
- pmullw mm2, d[TYPE d * 0] //mm2 = (c*d)[1..4] (младшие)
- pmulhw mm5, d[TYPE d * 0] //mm5 = (c*d)[1..4] (старшие)
- pmullw mm3, d[TYPE d * 4] //mm3 = (c*d)[5..8] (младшие)
- pmulhw mm6, d[TYPE d * 4] //mm6 = (c*d)[5..8] (старшие)
- paddsw mm0, mm2 //mm0 = a-b+c*d[1..4]
- paddsw mm1, mm3 //mm1 = a-b+c*d[5..8]
- movq mm2, mm0 //mm0 = mm2
- punpcklwd mm0, mm4 //mm0 = a-b+c*d[1,2]
- punpckhbw mm2, mm5 //mm2 = a-b+c*d[3,4]
- movq mm3, mm1 //mm1 = mm3
- punpcklwd mm1, mm5 //mm1 = a-b+c*d[5,6]
- punpckhbw mm3, mm6 //mm3 = a-b+c*d[7,8]
- movq f[TYPE f * 0], mm0 //load f[1,2]
- movq f[TYPE f * 2], mm2 //load f[3,4]
- movq f[TYPE f * 4], mm1 //load f[5,6]
- movq f[TYPE f * 6], mm3 //load f[7,8]
- emms
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement