source: trunk/src/opengl/mesa/mmx_blend.asm

Last change on this file was 2962, checked in by jeroen, 25 years ago

* empty log message *

File size: 8.0 KB
Line 
1; $Id: mmx_blend.asm,v 1.1 2000-03-01 18:49:33 jeroen Exp $
2;
3; MMX versions of the blending functions
4;
5
6 .586p
7 .MMX
8
9CODE32 SEGMENT PARA USE32 PUBLIC 'CODE'
10CODE32 ENDS
11DATA32 SEGMENT PARA USE32 PUBLIC 'DATA'
12ASSUME DS:FLAT, SS:FLAT, ES:FLAT
13DATA32 ENDS
14
15CODE32 SEGMENT
16ALIGN 16
17PUBLIC _gl_mmx_blend_transparency
18
19_gl_mmx_blend_transparency:
20 push EBP
21 mov EBP, ESP
22 sub ESP, 52
23 push EBX
24 mov dword ptr [EBP + -8], 16711680
25 mov dword ptr [EBP + -4], 16711680
26 mov dword ptr [EBP + -16], 0
27 mov dword ptr [EBP + -12], -1
28 mov dword ptr [EBP + -24], -1
29 mov dword ptr [EBP + -20], 0
30 mov EAX, dword ptr [EBP + 24]
31 add EAX, 4
32 mov EDX, EAX
33 and EDX, dword ptr [EBP + 20]
34 mov EAX, EDX
35 and EAX, 4
36 cmp EAX, 8
37 jne GMBT_2
38 mov EAX, dword ptr [EBP + 20]
39 add EAX, 3
40 xor EDX, EDX
41 mov DL, byte ptr [EAX]
42 mov dword ptr [EBP + -32], EDX
43 mov EAX, 255
44 mov EBX, EAX
45 sub EBX, dword ptr [EBP + -32]
46 mov dword ptr [EBP + -36], EBX
47 mov EAX, dword ptr [EBP + 20]
48 xor EDX, EDX
49 mov DL, byte ptr [EAX]
50 mov EAX, EDX
51 imul EAX, dword ptr [EBP + -32]
52 mov EDX, dword ptr [EBP + 24]
53 xor ECX, ECX
54 mov CL, byte ptr [EDX]
55 mov EDX, ECX
56 imul EDX, dword ptr [EBP + -36]
57 add EAX, EDX
58 mov EBX, EAX
59 sar EBX, 8
60 mov dword ptr [EBP + -40], EBX
61 mov EAX, dword ptr [EBP + 20]
62 inc EAX
63 xor EDX, EDX
64 mov DL, byte ptr [EAX]
65 mov EAX, EDX
66 imul EAX, dword ptr [EBP + -32]
67 mov EDX, dword ptr [EBP + 24]
68 inc EDX
69 xor ECX, ECX
70 mov CL, byte ptr [EDX]
71 mov EDX, ECX
72 imul EDX, dword ptr [EBP + -36]
73 add EAX, EDX
74 mov EBX, EAX
75 sar EBX, 8
76 mov dword ptr [EBP + -44], EBX
77 mov EAX, dword ptr [EBP + 20]
78 add EAX, 2
79 xor EDX, EDX
80 mov DL, byte ptr [EAX]
81 mov EAX, EDX
82 imul EAX, dword ptr [EBP + -32]
83 mov EDX, dword ptr [EBP + 24]
84 add EDX, 2
85 xor ECX, ECX
86 mov CL, byte ptr [EDX]
87 mov EDX, ECX
88 imul EDX, dword ptr [EBP + -36]
89 add EAX, EDX
90 mov EBX, EAX
91 sar EBX, 8
92 mov dword ptr [EBP + -48], EBX
93 mov EAX, dword ptr [EBP + 20]
94 add EAX, 3
95 xor EDX, EDX
96 mov DL, byte ptr [EAX]
97 mov EAX, EDX
98 imul EAX, dword ptr [EBP + -32]
99 mov EDX, dword ptr [EBP + 24]
100 add EDX, 3
101 xor ECX, ECX
102 mov CL, byte ptr [EDX]
103 mov EDX, ECX
104 imul EDX, dword ptr [EBP + -36]
105 add EAX, EDX
106 mov EBX, EAX
107 sar EBX, 8
108 mov dword ptr [EBP + -52], EBX
109 mov EAX, dword ptr [EBP + 20]
110 mov DL, byte ptr [EBP + -40]
111 mov byte ptr [EAX], DL
112 mov EAX, dword ptr [EBP + 20]
113 inc EAX
114 mov DL, byte ptr [EBP + -44]
115 mov byte ptr [EAX], DL
116 mov EAX, dword ptr [EBP + 20]
117 add EAX, 2
118 mov DL, byte ptr [EBP + -48]
119 mov byte ptr [EAX], DL
120 mov EAX, dword ptr [EBP + 20]
121 add EAX, 3
122 mov DL, byte ptr [EBP + -52]
123 mov byte ptr [EAX], DL
124 inc dword ptr [EBP + 16]
125 add dword ptr [EBP + 20], 4
126 add dword ptr [EBP + 24], 4
127 dec dword ptr [EBP + 12]
128GMBT_2:
129
130 cmp dword ptr [EBP + 12], 0
131 je GMBT_3
132 mov dword ptr [EBP + -28], 0
133ALIGN 4
134GMBT_4:
135
136 mov EDX, dword ptr [EBP + 12]
137 mov EAX, EDX
138 shr EAX, 1
139 cmp dword ptr [EBP + -28], EAX
140 jb GMBT_7
141 jmp GMBT_5
142ALIGN 16
143GMBT_7:
144
145 mov EAX, dword ptr [EBP + -28]
146 lea EDX, [EAX * 2 + 0]
147 mov EAX, dword ptr [EBP + 16]
148 cmp byte ptr [EAX + EDX], 0
149 je GMBT_6
150 mov EAX, dword ptr [EBP + -28]
151 mov EDX, EAX
152 lea ECX, [EDX * 8 + 0]
153 mov EAX, ECX
154 add EAX, dword ptr [EBP + 20]
155 mov EDX, dword ptr [EBP + -28]
156 mov ECX, EDX
157 lea EDX, [ECX * 8 + 0]
158 mov ECX, EDX
159 add ECX, dword ptr [EBP + 24]
160
161 movq mm4, [EAX]
162 pxor mm5, mm5
163 movq mm1, mm4
164 movq mm7, [ECX]
165 punpcklbw mm1, mm5
166 movq mm6, mm7
167 movq mm0, mm1
168 punpcklbw mm6, mm5
169 movq mm2, mm1
170 psrlq mm0, 48
171 punpckhbw mm4, mm5
172 packssdw mm0, mm0
173 movq mm3, mm0
174 punpckhbw mm7, mm5
175 psllq mm3, 16
176 por mm0, [EBP + -8]
177 punpcklwd mm1, mm6
178 psubw mm0, mm3
179 punpckhwd mm2, mm6
180 movq mm3, mm4
181 psrlq mm3, 48
182 packssdw mm3, mm3
183 movq mm6, mm3
184 por mm3, [EBP + -8]
185 psllq mm6, 16
186 psubw mm3, mm6
187 movq mm5, mm4
188 punpcklwd mm4, mm7
189 punpckhwd mm5, mm7
190 pmaddwd mm1, mm0
191 pmaddwd mm4, mm3
192 pmaddwd mm2, mm0
193 pmaddwd mm5, mm3
194 psrld mm1, 8
195 psrld mm2, 8
196 psrld mm4, 8
197 packssdw mm1, mm2
198 psrld mm5, 8
199 packuswb mm1, mm1
200 packssdw mm4, mm5
201 pand mm1, [EBP + -24]
202 packuswb mm4, mm4
203 pand mm4, [EBP + -16]
204 por mm4, mm1
205 movq [EAX], mm4
206
207
208GMBT_8:
209
210GMBT_6:
211
212 inc dword ptr [EBP + -28]
213 jmp GMBT_4
214ALIGN 16
215GMBT_5:
216
217
218 emms
219
220GMBT_3:
221
222 mov EAX, dword ptr [EBP + 12]
223 and EAX, 1
224 test EAX, EAX
225 je GMBT_9
226 mov EAX, dword ptr [EBP + 12]
227 lea EDX, [EAX * 4 + 0]
228 mov EAX, EDX
229 add EAX, dword ptr [EBP + 20]
230 lea EDX, [EAX + -1]
231 xor EAX, EAX
232 mov AL, byte ptr [EDX]
233 mov dword ptr [EBP + -52], EAX
234 mov EAX, 255
235 mov EBX, EAX
236 sub EBX, dword ptr [EBP + -52]
237 mov dword ptr [EBP + -48], EBX
238 mov EAX, dword ptr [EBP + 12]
239 lea EDX, [EAX * 4 + 0]
240 mov EAX, EDX
241 add EAX, dword ptr [EBP + 20]
242 lea EDX, [EAX + -4]
243 xor ECX, ECX
244 mov CL, byte ptr [EDX]
245 mov EAX, ECX
246 imul EAX, dword ptr [EBP + -52]
247 mov EDX, dword ptr [EBP + 12]
248 lea ECX, [EDX * 4 + 0]
249 mov EDX, ECX
250 add EDX, dword ptr [EBP + 24]
251 lea ECX, [EDX + -4]
252 xor EDX, EDX
253 mov DL, byte ptr [ECX]
254 mov ECX, EDX
255 imul ECX, dword ptr [EBP + -48]
256 add EAX, ECX
257 mov EBX, EAX
258 sar EBX, 8
259 mov dword ptr [EBP + -44], EBX
260 mov EAX, dword ptr [EBP + 12]
261 lea EDX, [EAX * 4 + 0]
262 mov EAX, EDX
263 add EAX, dword ptr [EBP + 20]
264 lea EDX, [EAX + -3]
265 xor ECX, ECX
266 mov CL, byte ptr [EDX]
267 mov EAX, ECX
268 imul EAX, dword ptr [EBP + -52]
269 mov EDX, dword ptr [EBP + 12]
270 lea ECX, [EDX * 4 + 0]
271 mov EDX, ECX
272 add EDX, dword ptr [EBP + 24]
273 lea ECX, [EDX + -3]
274 xor EDX, EDX
275 mov DL, byte ptr [ECX]
276 mov ECX, EDX
277 imul ECX, dword ptr [EBP + -48]
278 add EAX, ECX
279 mov EBX, EAX
280 sar EBX, 8
281 mov dword ptr [EBP + -40], EBX
282 mov EAX, dword ptr [EBP + 12]
283 lea EDX, [EAX * 4 + 0]
284 mov EAX, EDX
285 add EAX, dword ptr [EBP + 20]
286 lea EDX, [EAX + -2]
287 xor ECX, ECX
288 mov CL, byte ptr [EDX]
289 mov EAX, ECX
290 imul EAX, dword ptr [EBP + -52]
291 mov EDX, dword ptr [EBP + 12]
292 lea ECX, [EDX * 4 + 0]
293 mov EDX, ECX
294 add EDX, dword ptr [EBP + 24]
295 lea ECX, [EDX + -2]
296 xor EDX, EDX
297 mov DL, byte ptr [ECX]
298 mov ECX, EDX
299 imul ECX, dword ptr [EBP + -48]
300 add EAX, ECX
301 mov EBX, EAX
302 sar EBX, 8
303 mov dword ptr [EBP + -36], EBX
304 mov EAX, dword ptr [EBP + 12]
305 lea EDX, [EAX * 4 + 0]
306 mov EAX, EDX
307 add EAX, dword ptr [EBP + 20]
308 lea EDX, [EAX + -1]
309 xor ECX, ECX
310 mov CL, byte ptr [EDX]
311 mov EAX, ECX
312 imul EAX, dword ptr [EBP + -52]
313 mov EDX, dword ptr [EBP + 12]
314 lea ECX, [EDX * 4 + 0]
315 mov EDX, ECX
316 add EDX, dword ptr [EBP + 24]
317 lea ECX, [EDX + -1]
318 xor EDX, EDX
319 mov DL, byte ptr [ECX]
320 mov ECX, EDX
321 imul ECX, dword ptr [EBP + -48]
322 add EAX, ECX
323 mov EBX, EAX
324 sar EBX, 8
325 mov dword ptr [EBP + -32], EBX
326 mov EAX, dword ptr [EBP + 12]
327 lea EDX, [EAX * 4 + 0]
328 mov EAX, EDX
329 add EAX, dword ptr [EBP + 20]
330 lea EDX, [EAX + -4]
331 mov AL, byte ptr [EBP + -44]
332 mov byte ptr [EDX], AL
333 mov EAX, dword ptr [EBP + 12]
334 lea EDX, [EAX * 4 + 0]
335 mov EAX, EDX
336 add EAX, dword ptr [EBP + 20]
337 lea EDX, [EAX + -3]
338 mov AL, byte ptr [EBP + -40]
339 mov byte ptr [EDX], AL
340 mov EAX, dword ptr [EBP + 12]
341 lea EDX, [EAX * 4 + 0]
342 mov EAX, EDX
343 add EAX, dword ptr [EBP + 20]
344 lea EDX, [EAX + -2]
345 mov AL, byte ptr [EBP + -36]
346 mov byte ptr [EDX], AL
347 mov EAX, dword ptr [EBP + 12]
348 lea EDX, [EAX * 4 + 0]
349 mov EAX, EDX
350 add EAX, dword ptr [EBP + 20]
351 lea EDX, [EAX + -1]
352 mov AL, byte ptr [EBP + -32]
353 mov byte ptr [EDX], AL
354GMBT_9:
355
356GMBT_1:
357
358 mov EBX, dword ptr [EBP + -56]
359 mov ESP, EBP
360 pop EBP
361 ret
362
363CODE32 ENDS
364
365end
Note: See TracBrowser for help on using the repository browser.