more clean-ups
[mesa.git] / src / mesa / x86 / mmx_blend.S
1 #include "assyntax.h"
2
3
4 SEG_TEXT
5
6
7 ALIGNTEXT16
8 GLOBL GLNAME(_mesa_mmx_blend_transparency)
9
10 GLNAME( _mesa_mmx_blend_transparency ):
11 PUSH_L ( EBP )
12 MOV_L ( ESP, EBP )
13 SUB_L ( CONST(52), ESP )
14 PUSH_L ( EBX )
15 MOV_L ( CONST(16711680), REGOFF(-8, EBP) )
16 MOV_L ( CONST(16711680), REGOFF(-4, EBP) )
17 MOV_L ( CONST(0), REGOFF(-16, EBP) )
18 MOV_L ( CONST(-1), REGOFF(-12, EBP) )
19 MOV_L ( CONST(-1), REGOFF(-24, EBP) )
20 MOV_L ( CONST(0), REGOFF(-20, EBP) )
21 MOV_L ( REGOFF(24, EBP), EAX )
22 ADD_L ( CONST(4), EAX )
23 MOV_L ( EAX, EDX )
24 AND_L ( REGOFF(20, EBP), EDX )
25 MOV_L ( EDX, EAX )
26 AND_L ( CONST(4), EAX )
27 CMP_L ( CONST(8), EAX )
28 JNE ( LLBL(GMBT_2) )
29 MOV_L ( REGOFF(20, EBP), EAX )
30 ADD_L ( CONST(3), EAX )
31 XOR_L ( EDX, EDX )
32 MOV_B ( REGIND(EAX), DL )
33 MOV_L ( EDX, REGOFF(-32, EBP) )
34 MOV_L ( CONST(255), EAX )
35 MOV_L ( EAX, EBX )
36 SUB_L ( REGOFF(-32, EBP), EBX )
37 MOV_L ( EBX, REGOFF(-36, EBP) )
38 MOV_L ( REGOFF(20, EBP), EAX )
39 XOR_L ( EDX, EDX )
40 MOV_B ( REGIND(EAX), DL )
41 MOV_L ( EDX, EAX )
42 IMUL_L ( REGOFF(-32, EBP), EAX )
43 MOV_L ( REGOFF(24, EBP), EDX )
44 XOR_L ( ECX, ECX )
45 MOV_B ( REGIND(EDX), CL )
46 MOV_L ( ECX, EDX )
47 IMUL_L ( REGOFF(-36, EBP), EDX )
48 ADD_L ( EDX, EAX )
49 MOV_L ( EAX, EBX )
50 SAR_L ( CONST(8), EBX )
51 MOV_L ( EBX, REGOFF(-40, EBP) )
52 MOV_L ( REGOFF(20, EBP), EAX )
53 INC_L ( EAX )
54 XOR_L ( EDX, EDX )
55 MOV_B ( REGIND(EAX), DL )
56 MOV_L ( EDX, EAX )
57 IMUL_L ( REGOFF(-32, EBP), EAX )
58 MOV_L ( REGOFF(24, EBP), EDX )
59 INC_L ( EDX )
60 XOR_L ( ECX, ECX )
61 MOV_B ( REGIND(EDX), CL )
62 MOV_L ( ECX, EDX )
63 IMUL_L ( REGOFF(-36, EBP), EDX )
64 ADD_L ( EDX, EAX )
65 MOV_L ( EAX, EBX )
66 SAR_L ( CONST(8), EBX )
67 MOV_L ( EBX, REGOFF(-44, EBP) )
68 MOV_L ( REGOFF(20, EBP), EAX )
69 ADD_L ( CONST(2), EAX )
70 XOR_L ( EDX, EDX )
71 MOV_B ( REGIND(EAX), DL )
72 MOV_L ( EDX, EAX )
73 IMUL_L ( REGOFF(-32, EBP), EAX )
74 MOV_L ( REGOFF(24, EBP), EDX )
75 ADD_L ( CONST(2), EDX )
76 XOR_L ( ECX, ECX )
77 MOV_B ( REGIND(EDX), CL )
78 MOV_L ( ECX, EDX )
79 IMUL_L ( REGOFF(-36, EBP), EDX )
80 ADD_L ( EDX, EAX )
81 MOV_L ( EAX, EBX )
82 SAR_L ( CONST(8), EBX )
83 MOV_L ( EBX, REGOFF(-48, EBP) )
84 MOV_L ( REGOFF(20, EBP), EAX )
85 ADD_L ( CONST(3), EAX )
86 XOR_L ( EDX, EDX )
87 MOV_B ( REGIND(EAX), DL )
88 MOV_L ( EDX, EAX )
89 IMUL_L ( REGOFF(-32, EBP), EAX )
90 MOV_L ( REGOFF(24, EBP), EDX )
91 ADD_L ( CONST(3), EDX )
92 XOR_L ( ECX, ECX )
93 MOV_B ( REGIND(EDX), CL )
94 MOV_L ( ECX, EDX )
95 IMUL_L ( REGOFF(-36, EBP), EDX )
96 ADD_L ( EDX, EAX )
97 MOV_L ( EAX, EBX )
98 SAR_L ( CONST(8), EBX )
99 MOV_L ( EBX, REGOFF(-52, EBP) )
100 MOV_L ( REGOFF(20, EBP), EAX )
101 MOV_B ( REGOFF(-40, EBP), DL )
102 MOV_B ( DL, REGIND(EAX) )
103 MOV_L ( REGOFF(20, EBP), EAX )
104 INC_L ( EAX )
105 MOV_B ( REGOFF(-44, EBP), DL )
106 MOV_B ( DL, REGIND(EAX) )
107 MOV_L ( REGOFF(20, EBP), EAX )
108 ADD_L ( CONST(2), EAX )
109 MOV_B ( REGOFF(-48, EBP), DL )
110 MOV_B ( DL, REGIND(EAX) )
111 MOV_L ( REGOFF(20, EBP), EAX )
112 ADD_L ( CONST(3), EAX )
113 MOV_B ( REGOFF(-52, EBP), DL )
114 MOV_B ( DL, REGIND(EAX) )
115 INC_L ( REGOFF(16, EBP) )
116 ADD_L ( CONST(4), REGOFF(20, EBP) )
117 ADD_L ( CONST(4), REGOFF(24, EBP) )
118 DEC_L ( REGOFF(12, EBP) )
119 LLBL(GMBT_2):
120
121 CMP_L ( CONST(0), REGOFF(12, EBP) )
122 JE ( LLBL(GMBT_3) )
123 MOV_L ( CONST(0), REGOFF(-28, EBP) )
124 ALIGNTEXT4
125 LLBL(GMBT_4):
126
127 MOV_L ( REGOFF(12, EBP), EDX )
128 MOV_L ( EDX, EAX )
129 SHR_L ( CONST(1), EAX )
130 CMP_L ( EAX, REGOFF(-28, EBP) )
131 JB ( LLBL(GMBT_7) )
132 JMP ( LLBL(GMBT_5) )
133 ALIGNTEXT16
134 LLBL(GMBT_7):
135
136 MOV_L ( REGOFF(-28, EBP), EAX )
137 LEA_L ( REGDIS(0,EAX,2), EDX )
138 MOV_L ( REGOFF(16, EBP), EAX )
139 CMP_B ( CONST(0), REGBI(EAX,EDX) )
140 JE ( LLBL(GMBT_6) )
141 MOV_L ( REGOFF(-28, EBP), EAX )
142 MOV_L ( EAX, EDX )
143 LEA_L ( REGDIS(0,EDX,8), ECX )
144 MOV_L ( ECX, EAX )
145 ADD_L ( REGOFF(20, EBP), EAX )
146 MOV_L ( REGOFF(-28, EBP), EDX )
147 MOV_L ( EDX, ECX )
148 LEA_L ( REGDIS(0,ECX,8), EDX )
149 MOV_L ( EDX, ECX )
150 ADD_L ( REGOFF(24, EBP), ECX )
151
152 MOVQ ( REGIND(EAX), MM4 )
153 PXOR ( MM5, MM5 )
154 MOVQ ( MM4, MM1 )
155 MOVQ ( REGIND(ECX), MM7 )
156 PUNPCKLBW ( MM5, MM1 )
157 MOVQ ( MM7, MM6 )
158 MOVQ ( MM1, MM0 )
159 PUNPCKLBW ( MM5, MM6 )
160 MOVQ ( MM1, MM2 )
161 PSRLQ ( CONST(48), MM0 )
162 PUNPCKHBW ( MM5, MM4 )
163 PACKSSDW ( MM0, MM0 )
164 MOVQ ( MM0, MM3 )
165 PUNPCKHBW ( MM5, MM7 )
166 PSLLQ ( CONST(16), MM3 )
167 POR ( REGOFF(-8, EBP), MM0 )
168 PUNPCKLWD ( MM6, MM1 )
169 PSUBW ( MM3, MM0 )
170 PUNPCKHWD ( MM6, MM2 )
171 MOVQ ( MM4, MM3 )
172 PSRLQ ( CONST(48), MM3 )
173 PACKSSDW ( MM3, MM3 )
174 MOVQ ( MM3, MM6 )
175 POR ( REGOFF(-8, EBP), MM3 )
176 PSLLQ ( CONST(16), MM6 )
177 PSUBW ( MM6, MM3 )
178 MOVQ ( MM4, MM5 )
179 PUNPCKLWD ( MM7, MM4 )
180 PUNPCKHWD ( MM7, MM5 )
181 PMADDWD ( MM0, MM1 )
182 PMADDWD ( MM3, MM4 )
183 PMADDWD ( MM0, MM2 )
184 PMADDWD ( MM3, MM5 )
185 PSRLD ( CONST(8), MM1 )
186 PSRLD ( CONST(8), MM2 )
187 PSRLD ( CONST(8), MM4 )
188 PACKSSDW ( MM2, MM1 )
189 PSRLD ( CONST(8), MM5 )
190 PACKUSWB ( MM1, MM1 )
191 PACKSSDW ( MM5, MM4 )
192 PAND ( REGOFF(-24, EBP), MM1 )
193 PACKUSWB ( MM4, MM4 )
194 PAND ( REGOFF(-16, EBP), MM4 )
195 POR ( MM1, MM4 )
196 MOVQ ( MM4, REGIND(EAX) )
197
198
199 LLBL(GMBT_8):
200
201 LLBL(GMBT_6):
202
203 INC_L ( REGOFF(-28, EBP) )
204 JMP ( LLBL(GMBT_4) )
205 ALIGNTEXT16
206 LLBL(GMBT_5):
207
208
209 EMMS
210
211 LLBL(GMBT_3):
212
213 MOV_L ( REGOFF(12, EBP), EAX )
214 AND_L ( CONST(1), EAX )
215 TEST_L ( EAX, EAX )
216 JE ( LLBL(GMBT_9) )
217 MOV_L ( REGOFF(12, EBP), EAX )
218 LEA_L ( REGDIS(0,EAX,4), EDX )
219 MOV_L ( EDX, EAX )
220 ADD_L ( REGOFF(20, EBP), EAX )
221 LEA_L ( REGOFF(-1, EAX), EDX )
222 XOR_L ( EAX, EAX )
223 MOV_B ( REGIND(EDX), AL )
224 MOV_L ( EAX, REGOFF(-52, EBP) )
225 MOV_L ( CONST(255), EAX )
226 MOV_L ( EAX, EBX )
227 SUB_L ( REGOFF(-52, EBP), EBX )
228 MOV_L ( EBX, REGOFF(-48, EBP) )
229 MOV_L ( REGOFF(12, EBP), EAX )
230 LEA_L ( REGDIS(0,EAX,4), EDX )
231 MOV_L ( EDX, EAX )
232 ADD_L ( REGOFF(20, EBP), EAX )
233 LEA_L ( REGOFF(-4, EAX), EDX )
234 XOR_L ( ECX, ECX )
235 MOV_B ( REGIND(EDX), CL )
236 MOV_L ( ECX, EAX )
237 IMUL_L ( REGOFF(-52, EBP), EAX )
238 MOV_L ( REGOFF(12, EBP), EDX )
239 LEA_L ( REGDIS(0,EDX,4), ECX )
240 MOV_L ( ECX, EDX )
241 ADD_L ( REGOFF(24, EBP), EDX )
242 LEA_L ( REGOFF(-4, EDX), ECX )
243 XOR_L ( EDX, EDX )
244 MOV_B ( REGIND(ECX), DL )
245 MOV_L ( EDX, ECX )
246 IMUL_L ( REGOFF(-48, EBP), ECX )
247 ADD_L ( ECX, EAX )
248 MOV_L ( EAX, EBX )
249 SAR_L ( CONST(8), EBX )
250 MOV_L ( EBX, REGOFF(-44, EBP) )
251 MOV_L ( REGOFF(12, EBP), EAX )
252 LEA_L ( REGDIS(0,EAX,4), EDX )
253 MOV_L ( EDX, EAX )
254 ADD_L ( REGOFF(20, EBP), EAX )
255 LEA_L ( REGOFF(-3, EAX), EDX )
256 XOR_L ( ECX, ECX )
257 MOV_B ( REGIND(EDX), CL )
258 MOV_L ( ECX, EAX )
259 IMUL_L ( REGOFF(-52, EBP), EAX )
260 MOV_L ( REGOFF(12, EBP), EDX )
261 LEA_L ( REGDIS(0,EDX,4), ECX )
262 MOV_L ( ECX, EDX )
263 ADD_L ( REGOFF(24, EBP), EDX )
264 LEA_L ( REGOFF(-3, EDX), ECX )
265 XOR_L ( EDX, EDX )
266 MOV_B ( REGIND(ECX), DL )
267 MOV_L ( EDX, ECX )
268 IMUL_L ( REGOFF(-48, EBP), ECX )
269 ADD_L ( ECX, EAX )
270 MOV_L ( EAX, EBX )
271 SAR_L ( CONST(8), EBX )
272 MOV_L ( EBX, REGOFF(-40, EBP) )
273 MOV_L ( REGOFF(12, EBP), EAX )
274 LEA_L ( REGDIS(0,EAX,4), EDX )
275 MOV_L ( EDX, EAX )
276 ADD_L ( REGOFF(20, EBP), EAX )
277 LEA_L ( REGOFF(-2, EAX), EDX )
278 XOR_L ( ECX, ECX )
279 MOV_B ( REGIND(EDX), CL )
280 MOV_L ( ECX, EAX )
281 IMUL_L ( REGOFF(-52, EBP), EAX )
282 MOV_L ( REGOFF(12, EBP), EDX )
283 LEA_L ( REGDIS(0,EDX,4), ECX )
284 MOV_L ( ECX, EDX )
285 ADD_L ( REGOFF(24, EBP), EDX )
286 LEA_L ( REGOFF(-2, EDX), ECX )
287 XOR_L ( EDX, EDX )
288 MOV_B ( REGIND(ECX), DL )
289 MOV_L ( EDX, ECX )
290 IMUL_L ( REGOFF(-48, EBP), ECX )
291 ADD_L ( ECX, EAX )
292 MOV_L ( EAX, EBX )
293 SAR_L ( CONST(8), EBX )
294 MOV_L ( EBX, REGOFF(-36, EBP) )
295 MOV_L ( REGOFF(12, EBP), EAX )
296 LEA_L ( REGDIS(0,EAX,4), EDX )
297 MOV_L ( EDX, EAX )
298 ADD_L ( REGOFF(20, EBP), EAX )
299 LEA_L ( REGOFF(-1, EAX), EDX )
300 XOR_L ( ECX, ECX )
301 MOV_B ( REGIND(EDX), CL )
302 MOV_L ( ECX, EAX )
303 IMUL_L ( REGOFF(-52, EBP), EAX )
304 MOV_L ( REGOFF(12, EBP), EDX )
305 LEA_L ( REGDIS(0,EDX,4), ECX )
306 MOV_L ( ECX, EDX )
307 ADD_L ( REGOFF(24, EBP), EDX )
308 LEA_L ( REGOFF(-1, EDX), ECX )
309 XOR_L ( EDX, EDX )
310 MOV_B ( REGIND(ECX), DL )
311 MOV_L ( EDX, ECX )
312 IMUL_L ( REGOFF(-48, EBP), ECX )
313 ADD_L ( ECX, EAX )
314 MOV_L ( EAX, EBX )
315 SAR_L ( CONST(8), EBX )
316 MOV_L ( EBX, REGOFF(-32, EBP) )
317 MOV_L ( REGOFF(12, EBP), EAX )
318 LEA_L ( REGDIS(0,EAX,4), EDX )
319 MOV_L ( EDX, EAX )
320 ADD_L ( REGOFF(20, EBP), EAX )
321 LEA_L ( REGOFF(-4, EAX), EDX )
322 MOV_B ( REGOFF(-44, EBP), AL )
323 MOV_B ( AL, REGIND(EDX) )
324 MOV_L ( REGOFF(12, EBP), EAX )
325 LEA_L ( REGDIS(0,EAX,4), EDX )
326 MOV_L ( EDX, EAX )
327 ADD_L ( REGOFF(20, EBP), EAX )
328 LEA_L ( REGOFF(-3, EAX), EDX )
329 MOV_B ( REGOFF(-40, EBP), AL )
330 MOV_B ( AL, REGIND(EDX) )
331 MOV_L ( REGOFF(12, EBP), EAX )
332 LEA_L ( REGDIS(0,EAX,4), EDX )
333 MOV_L ( EDX, EAX )
334 ADD_L ( REGOFF(20, EBP), EAX )
335 LEA_L ( REGOFF(-2, EAX), EDX )
336 MOV_B ( REGOFF(-36, EBP), AL )
337 MOV_B ( AL, REGIND(EDX) )
338 MOV_L ( REGOFF(12, EBP), EAX )
339 LEA_L ( REGDIS(0,EAX,4), EDX )
340 MOV_L ( EDX, EAX )
341 ADD_L ( REGOFF(20, EBP), EAX )
342 LEA_L ( REGOFF(-1, EAX), EDX )
343 MOV_B ( REGOFF(-32, EBP), AL )
344 MOV_B ( AL, REGIND(EDX) )
345 LLBL(GMBT_9):
346
347 LLBL(GMBT_1):
348
349 MOV_L ( REGOFF(-56, EBP), EBX )
350 MOV_L ( EBP, ESP )
351 POP_L ( EBP )
352 RET