◎αブレンディング
基本は des=((src-des)*alpha>>alphabit)+des;
;4ピクセルを一度に扱います。
;mm6=0x0AAA0AAA0AAA0AAA AAA=alpha(0-100H)
;mm7=0x001f001f001f001f
!!最適化作業中!!
movq mm0,[ebx] ;U1
;v1
movq mm3,[edi] ;U2
movq mm1,mm0 ;v2
movq mm2,mm0 ;u3
pand mm0,mm7 ;v3 sb
movq mm4,mm3 ;u4
psrlw mm1,5 ;v4
movq mm5,mm3 ;u5
pand mm3,mm7 ;v5 db
psrlw mm2,10 ;u6
psubw mm0,mm3 ;v6 sb-db
pand mm1,mm7 ;u7 sg
pmullw mm0,mm6 ;v7-9 (sb-db)*alpha
pand mm4,mm7 ;u8 dg
psrlw mm4,5 ;v8
psubw mm1,mm4 ;u9
psrlw mm5,10 ;v9
pand mm2,mm7 ;u10 sr
pmullw mm1,mm6 ;v10-12
pand mm5,mm7 ;u11dr
psraw mm0,8 ;v11 (sb-db)*alpha>>8
psubw mm2,mm5 ;u12
paddw mm0,mm3 ;v12
pmullw mm2,mm6 ;u13-15
psraw mm1,8 ;v13
pand mm0,mm7 ;u14
paddw mm1,mm4 ;v14
pand mm1,mm7 ;u15
;v15
psraw mm2,8 ;u16
;v16
psllw mm1,5 ;u17
paddw mm2,mm5 ;v17
por mm0,mm1 ;u18
pand mm2,mm7 ;v18
psllw mm2,10 ;u19
por mm0,mm2 ;u20
movq [ebx],mm0 ;u22<-20
;最適化前のコード
movq mm0,src
movq mm3,des
movq mm1,mm0
movq mm4,mm3
movq mm2,mm0
movq mm5,mm3
psrlw mm1,5
psrlw mm4,5
psrlw mm2,10
psrlw mm5,10
pand mm0,mm7 ;sb
pand mm1,mm7 ;sg
pand mm2,mm7 ;sr
pand mm3,mm7 ;db
pand mm4,mm7 ;dg
pand mm5,mm7 ;dr
psubw mm0,mm3 ;sb-db
psubw mm1,mm4
psubw mm2,mm5
pmullw mm0,mm6 ;(sb-db)*alpha
pmullw mm1,mm6
pmullw mm2,mm6
psraw mm0,8 ;(sb-db)*alpha>>8
psraw mm1,8
psraw mm2,8
paddw mm0,mm3
paddw mm1,mm4
paddw mm2,mm5
pand mm0,mm7
pand mm1,mm7
pand mm2,mm7
psllw mm1,5
psllw mm2,10
por mm0,mm1
por mm0,mm2
movq des,mm0