1 .file "composite_line_yuv_mmx"
10 #if !defined(__MINGW32__) && !defined(__CYGWIN__)
11 .globl composite_line_yuv_mmx
12 .type composite_line_yuv_mmx,@function
13 composite_line_yuv_mmx:
15 .globl _composite_line_yuv_mmx
16 _composite_line_yuv_mmx:
42 movl 8(%ebp), %esi # get dest
47 movl $0xff, %ecx # a = 255
48 cmpl $0, 20(%ebp) # if alpha == NULL
50 movl 20(%ebp), %edi # a = alpha[ j ]
54 movl 24(%ebp), %eax # mix = weight
55 cmpl $0, 28(%ebp) # if luma == NULL
57 movl 28(%ebp), %edi # mix = ...
60 movw (%edi,%ebx), %ax # luma[ j*2 ]
64 addl 32(%ebp), %ebx # + softness
67 /* TODO: linear interpolate between edges eax and ebx */
77 movl %edx, %ebx # edx will be destroyed by mulw
78 mull %ecx # mix = mix * a...
79 movl %ebx, %edx # restore edx
83 /* put alpha and (1-alpha) into mm0 */
84 /* 0 aa 0 1-a 0 aa 0 1-a */
94 movl $0x000000ff, %ecx
105 /* unpack words into double words */
108 /* put src yuv and dest yuv into mm1 */
109 /* 0 UVs 0 UVd 0 Ys 0 Yd */
111 movl 12(%ebp), %edi # get src
118 movb (%esi), %al # get dest
127 /* alpha composite */
134 pextrw $2, %mm0, %eax
140 cmpl %edx, 16(%ebp) # if ( j == width_src )
159 /********************************************/
162 #if !defined(__MINGW32__) && !defined(__CYGWIN__)
163 .globl composite_have_mmx
164 .type composite_have_mmx,@function
167 .globl _composite_have_mmx
173 # Check if bit 21 in flags word is writeable
178 xorl $0x00200000, %eax
193 test $0x00800000, %edx