1 .file "nr-compose.c"
3 # Ensure Inkscape is execshield protected
4 .section .note.GNU-stack
5 .previous
7 .text
8 .align 2
9 .globl nr_mmx_R8G8B8A8_P_EMPTY_A8_RGBAP
10 .type nr_mmx_R8G8B8A8_P_EMPTY_A8_RGBAP,@function
12 /*
13 * This code is in public domain
14 *
15 * c 32(%ebp)
16 * srs 28(%ebp)
17 * spx 24(%ebp)
18 * rs 20(%ebp)
19 * h 16(%ebp)
20 * w 12(%ebp)
21 * px 8(%ebp)
22 * r -8(%ebp)
23 * g -12(%ebp)
24 * b -16(%ebp)
25 * a -20(%ebp)
26 * s -24(%ebp) -> %esi
27 * d -28(%ebp) -> %edi
28 * x -32(%ebp) -> %ebx
29 * y -36(%ebp)
30 * ca -40(%ebp)
31 *
32 * mm0 Fg
33 * mm1 FgA
34 * mm2 FgPre
35 * mm3
36 * mm4
37 * mm5
38 * mm6 128
39 * mm7 0
40 *
41 */
43 nr_mmx_R8G8B8A8_P_EMPTY_A8_RGBAP:
44 pushl %ebp
45 movl %esp, %ebp
46 pushl %ebx
47 subl $36, %esp
48 pushl %edi
49 pushl %esi
51 /* Load %mm7 with [0 0 0 0] */
52 movl $0, %eax
53 movd %eax, %mm7
55 /* Load %mm6 with [128 128 128 128] */
56 movl $0x80808080, %eax
57 movd %eax, %mm6
58 punpcklbw %mm7, %mm6
60 /* FgC -> %mm0 */
61 movl 32(%ebp), %eax
62 movd (%eax), %mm0
63 punpcklbw %mm7, %mm0
65 /* for (y = ...) */
66 movl 16(%ebp), %ecx
67 .fory:
69 /* d = px */
70 /* s = spx */
71 movl 8(%ebp), %edi
72 movl 24(%ebp), %esi
74 /* for (x = ...) */
75 movl 12(%ebp), %ebx
76 .forx:
78 /* [m m m m] -> %mm1 */
79 movzbl (%esi), %eax
80 testb $0xff, %al
81 jz .clip
82 movd %eax, %mm1
83 punpcklwd %mm1, %mm1
84 punpckldq %mm1, %mm1
86 /* Fg -> mm2 */
87 movq %mm0, %mm2
88 pmullw %mm1, %mm2
89 paddw %mm6, %mm2
90 movq %mm2, %mm3
91 psrlw $8, %mm3
92 paddw %mm3, %mm2
93 psrlw $8, %mm2
95 /* Store pixel */
96 packuswb %mm2, %mm2
97 movd %mm2, (%edi)
99 .clip:
100 addl $4, %edi
101 incl %esi
103 decl %ebx
104 jnz .forx
106 movl 20(%ebp), %eax
107 addl %eax, 8(%ebp)
108 movl 28(%ebp), %eax
109 addl %eax, 24(%ebp)
111 decl %ecx
112 jnz .fory
114 .exit:
115 emms
116 popl %esi
117 popl %edi
118 addl $36, %esp
119 popl %ebx
120 popl %ebp
121 ret
123 .Lfe1:
124 .size nr_mmx_R8G8B8A8_P_EMPTY_A8_RGBAP,.Lfe1-nr_mmx_R8G8B8A8_P_EMPTY_A8_RGBAP
125 .ident "GCC: (GNU) 3.2"