Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1901 serge 1
 
2
 * Mesa 3-D graphics library
3
 * Version:  3.5
4
 *
5
 * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
6
 *
7
 * Permission is hereby granted, free of charge, to any person obtaining a
8
 * copy of this software and associated documentation files (the "Software"),
9
 * to deal in the Software without restriction, including without limitation
10
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11
 * and/or sell copies of the Software, and to permit persons to whom the
12
 * Software is furnished to do so, subject to the following conditions:
13
 *
14
 * The above copyright notice and this permission notice shall be included
15
 * in all copies or substantial portions of the Software.
16
 *
17
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
 */
24
25
 
26
 * NOTE: Avoid using spaces in between '(' ')' and arguments, especially
27
 * with macros like CONST, LLBL that expand to CONCAT(...).  Putting spaces
28
 * in there will break the build on some platforms.
29
 */
30
31
 
32
#include "matypes.h"
33
#include "xform_args.h"
34
35
 
36
37
 
38
#define FP_ZERO		0
39
40
 
41
#define SRC1		REGOFF(4, ESI)
42
#define SRC2		REGOFF(8, ESI)
43
#define SRC3		REGOFF(12, ESI)
44
#define DST0		REGOFF(0, EDI)
45
#define DST1		REGOFF(4, EDI)
46
#define DST2		REGOFF(8, EDI)
47
#define DST3		REGOFF(12, EDI)
48
#define MAT0		REGOFF(0, EDX)
49
#define MAT1		REGOFF(4, EDX)
50
#define MAT2		REGOFF(8, EDX)
51
#define MAT3		REGOFF(12, EDX)
52
#define MAT4		REGOFF(16, EDX)
53
#define MAT5		REGOFF(20, EDX)
54
#define MAT6		REGOFF(24, EDX)
55
#define MAT7		REGOFF(28, EDX)
56
#define MAT8		REGOFF(32, EDX)
57
#define MAT9		REGOFF(36, EDX)
58
#define MAT10		REGOFF(40, EDX)
59
#define MAT11		REGOFF(44, EDX)
60
#define MAT12		REGOFF(48, EDX)
61
#define MAT13		REGOFF(52, EDX)
62
#define MAT14		REGOFF(56, EDX)
63
#define MAT15		REGOFF(60, EDX)
64
65
 
66
 
67
GLOBL GLNAME( _mesa_x86_transform_points2_general )
68
HIDDEN(_mesa_x86_transform_points2_general)
69
GLNAME( _mesa_x86_transform_points2_general ):
70
71
 
72
	PUSH_L( ESI )
73
	PUSH_L( EDI )
74
75
 
76
	MOV_L( ARG_DEST, EDI )
77
78
 
79
	MOV_L( REGOFF(V4F_COUNT, ESI), ECX )
80
81
 
82
	JZ( LLBL(x86_p2_gr_done) )
83
84
 
85
	OR_L( CONST(VEC_SIZE_4), REGOFF(V4F_FLAGS, EDI) )
86
87
 
88
	MOV_L( CONST(4), REGOFF(V4F_SIZE, EDI) )
89
90
 
91
	MOV_L( REGOFF(V4F_START, ESI), ESI )
92
93
 
94
	ADD_L( EDI, ECX )
95
96
 
97
LLBL(x86_p2_gr_loop):
98
99
 
100
	FMUL_S( MAT0 )
101
	FLD_S( SRC0 )			/* F5 F4 */
102
	FMUL_S( MAT1 )
103
	FLD_S( SRC0 )			/* F6 F5 F4 */
104
	FMUL_S( MAT2 )
105
	FLD_S( SRC0 )			/* F7 F6 F5 F4 */
106
	FMUL_S( MAT3 )
107
108
 
109
	FMUL_S( MAT4 )
110
	FLD_S( SRC1 )			/* F1 F0 F7 F6 F5 F4 */
111
	FMUL_S( MAT5 )
112
	FLD_S( SRC1 )			/* F2 F1 F0 F7 F6 F5 F4 */
113
	FMUL_S( MAT6 )
114
	FLD_S( SRC1 )			/* F3 F2 F1 F0 F7 F6 F5 F4 */
115
	FMUL_S( MAT7 )
116
117
 
118
	FADDP( ST0, ST(7) )		/* F2 F1 F3 F7 F6 F5 F4 */
119
	FXCH( ST(1) )			/* F1 F2 F3 F7 F6 F5 F4 */
120
	FADDP( ST0, ST(5) )		/* F2 F3 F7 F6 F5 F4 */
121
	FADDP( ST0, ST(3) )		/* F3 F7 F6 F5 F4 */
122
	FADDP( ST0, ST(1) )		/* F7 F6 F5 F4 */
123
124
 
125
	FADD_S( MAT12 )
126
	FXCH( ST(2) )			/* F5 F6 F4 F7 */
127
	FADD_S( MAT13 )
128
	FXCH( ST(1) )			/* F6 F5 F4 F7 */
129
	FADD_S( MAT14 )
130
	FXCH( ST(3) )			/* F7 F5 F4 F6 */
131
	FADD_S( MAT15 )
132
133
 
134
	FSTP_S( DST0 )			/* F5 F7 F6 */
135
	FSTP_S( DST1 )			/* F7 F6 */
136
	FXCH( ST(1) )			/* F6 F7 */
137
	FSTP_S( DST2 )			/* F7 */
138
	FSTP_S( DST3 )			/* */
139
140
 
141
142
 
143
	ADD_L( EAX, ESI )
144
	CMP_L( ECX, EDI )
145
	JNE( LLBL(x86_p2_gr_loop) )
146
147
 
148
149
 
150
	POP_L( ESI )
151
	RET
152
#undef FRAME_OFFSET
153
154
 
155
 
156
 
157
 
158
GLOBL GLNAME( _mesa_x86_transform_points2_perspective )
159
HIDDEN(_mesa_x86_transform_points2_perspective)
160
GLNAME( _mesa_x86_transform_points2_perspective ):
161
162
 
163
	PUSH_L( ESI )
164
	PUSH_L( EDI )
165
	PUSH_L( EBX )
166
167
 
168
	MOV_L( ARG_DEST, EDI )
169
170
 
171
	MOV_L( REGOFF(V4F_COUNT, ESI), ECX )
172
173
 
174
	JZ( LLBL(x86_p2_pr_done) )
175
176
 
177
	OR_L( CONST(VEC_SIZE_4), REGOFF(V4F_FLAGS, EDI) )
178
179
 
180
	MOV_L( CONST(4), REGOFF(V4F_SIZE, EDI) )
181
182
 
183
	MOV_L( REGOFF(V4F_START, ESI), ESI )
184
185
 
186
	ADD_L( EDI, ECX )
187
188
 
189
190
 
191
LLBL(x86_p2_pr_loop):
192
193
 
194
	FMUL_S( MAT0 )
195
196
 
197
	FMUL_S( MAT5 )
198
199
 
200
	FSTP_S( DST0   )		/* F1 */
201
	FSTP_S( DST1   )		/* */
202
	MOV_L( EBX, DST2 )
203
	MOV_L( CONST(FP_ZERO), DST3 )
204
205
 
206
207
 
208
	ADD_L( EAX, ESI )
209
	CMP_L( ECX, EDI )
210
	JNE( LLBL(x86_p2_pr_loop) )
211
212
 
213
214
 
215
	POP_L( EDI )
216
	POP_L( ESI )
217
	RET
218
#undef FRAME_OFFSET
219
220
 
221
 
222
 
223
 
224
GLOBL GLNAME( _mesa_x86_transform_points2_3d )
225
HIDDEN(_mesa_x86_transform_points2_3d)
226
GLNAME( _mesa_x86_transform_points2_3d ):
227
228
 
229
	PUSH_L( ESI )
230
	PUSH_L( EDI )
231
232
 
233
	MOV_L( ARG_DEST, EDI )
234
235
 
236
	MOV_L( REGOFF(V4F_COUNT, ESI), ECX )
237
238
 
239
	JZ( LLBL(x86_p2_3dr_done) )
240
241
 
242
	OR_L( CONST(VEC_SIZE_3), REGOFF(V4F_FLAGS, EDI) )
243
244
 
245
	MOV_L( CONST(3), REGOFF(V4F_SIZE, EDI) )
246
247
 
248
	MOV_L( REGOFF(V4F_START, ESI), ESI )
249
250
 
251
	ADD_L( EDI, ECX )
252
253
 
254
LLBL(x86_p2_3dr_loop):
255
256
 
257
	FMUL_S( MAT0 )
258
	FLD_S( SRC0 )			/* F5 F4 */
259
	FMUL_S( MAT1 )
260
	FLD_S( SRC0 )			/* F6 F5 F4 */
261
	FMUL_S( MAT2 )
262
263
 
264
	FMUL_S( MAT4 )
265
	FLD_S( SRC1 )			/* F1 F0 F6 F5 F4 */
266
	FMUL_S( MAT5 )
267
	FLD_S( SRC1 )			/* F2 F1 F0 F6 F5 F4 */
268
	FMUL_S( MAT6 )
269
270
 
271
	FADDP( ST0, ST(5) )		/* F1 F2 F6 F5 F4 */
272
	FADDP( ST0, ST(3) )		/* F2 F6 F5 F4 */
273
	FADDP( ST0, ST(1) )		/* F6 F5 F4 */
274
275
 
276
	FADD_S( MAT12 )
277
	FXCH( ST(1) )			/* F5 F4 F6 */
278
	FADD_S( MAT13 )
279
	FXCH( ST(2) )			/* F6 F4 F5 */
280
	FADD_S( MAT14 )
281
282
 
283
	FSTP_S( DST0 )			/* F6 F5 */
284
	FXCH( ST(1) )			/* F5 F6 */
285
	FSTP_S( DST1 )			/* F6 */
286
	FSTP_S( DST2 )			/* */
287
288
 
289
290
 
291
	ADD_L( EAX, ESI )
292
	CMP_L( ECX, EDI )
293
	JNE( LLBL(x86_p2_3dr_loop) )
294
295
 
296
297
 
298
	POP_L( ESI )
299
	RET
300
#undef FRAME_OFFSET
301
302
 
303
 
304
 
305
 
306
GLOBL GLNAME( _mesa_x86_transform_points2_3d_no_rot )
307
HIDDEN(_mesa_x86_transform_points2_3d_no_rot)
308
GLNAME( _mesa_x86_transform_points2_3d_no_rot ):
309
310
 
311
	PUSH_L( ESI )
312
	PUSH_L( EDI )
313
	PUSH_L( EBX )
314
315
 
316
	MOV_L( ARG_DEST, EDI )
317
318
 
319
	MOV_L( REGOFF(V4F_COUNT, ESI), ECX )
320
321
 
322
	JZ( LLBL(x86_p2_3dnrr_done) )
323
324
 
325
	OR_L( CONST(VEC_SIZE_3), REGOFF(V4F_FLAGS, EDI) )
326
327
 
328
	MOV_L( CONST(3), REGOFF(V4F_SIZE, EDI) )
329
330
 
331
	MOV_L( REGOFF(V4F_START, ESI), ESI )
332
333
 
334
	ADD_L( EDI, ECX )
335
336
 
337
338
 
339
LLBL(x86_p2_3dnrr_loop):
340
341
 
342
	FMUL_S( MAT0 )
343
344
 
345
	FMUL_S( MAT5 )
346
347
 
348
	FADD_S( MAT12 )
349
	FLD_S( MAT13 )		/* F5 F4 F1 */
350
	FXCH( ST(2) )			/* F1 F4 F5 */
351
	FADDP( ST0, ST(2) )		/* F4 F5 */
352
353
 
354
	FSTP_S( DST1 )		/* */
355
	MOV_L( EBX, DST2 )
356
357
 
358
359
 
360
	ADD_L( EAX, ESI )
361
	CMP_L( ECX, EDI )
362
	JNE( LLBL(x86_p2_3dnrr_loop) )
363
364
 
365
366
 
367
	POP_L( EDI )
368
	POP_L( ESI )
369
	RET
370
#undef FRAME_OFFSET
371
372
 
373
 
374
 
375
 
376
GLOBL GLNAME( _mesa_x86_transform_points2_2d )
377
HIDDEN(_mesa_x86_transform_points2_2d)
378
GLNAME( _mesa_x86_transform_points2_2d ):
379
380
 
381
	PUSH_L( ESI )
382
	PUSH_L( EDI )
383
384
 
385
	MOV_L( ARG_DEST, EDI )
386
387
 
388
	MOV_L( REGOFF(V4F_COUNT, ESI), ECX )
389
390
 
391
	JZ( LLBL(x86_p2_2dr_done) )
392
393
 
394
	OR_L( CONST(VEC_SIZE_2), REGOFF(V4F_FLAGS, EDI) )
395
396
 
397
	MOV_L( CONST(2), REGOFF(V4F_SIZE, EDI) )
398
399
 
400
	MOV_L( REGOFF(V4F_START, ESI), ESI )
401
402
 
403
	ADD_L( EDI, ECX )
404
405
 
406
LLBL(x86_p2_2dr_loop):
407
408
 
409
	FMUL_S( MAT0 )
410
	FLD_S( SRC0 )			/* F5 F4 */
411
	FMUL_S( MAT1 )
412
413
 
414
	FMUL_S( MAT4 )
415
	FLD_S( SRC1 )			/* F1 F0 F5 F4 */
416
	FMUL_S( MAT5 )
417
418
 
419
	FADDP( ST0, ST(3) )		/* F1 F5 F4 */
420
	FADDP( ST0, ST(1) )		/* F5 F4 */
421
422
 
423
	FADD_S( MAT12 )
424
	FXCH( ST(1) )			/* F5 F4 */
425
	FADD_S( MAT13 )
426
427
 
428
	FSTP_S( DST0 )		/* F5 */
429
	FSTP_S( DST1 )		/* */
430
431
 
432
433
 
434
	ADD_L( EAX, ESI )
435
	CMP_L( ECX, EDI )
436
	JNE( LLBL(x86_p2_2dr_loop) )
437
438
 
439
440
 
441
	POP_L( ESI )
442
	RET
443
#undef FRAME_OFFSET
444
445
 
446
 
447
 
448
 
449
GLOBL GLNAME( _mesa_x86_transform_points2_2d_no_rot )
450
HIDDEN(_mesa_x86_transform_points2_2d_no_rot)
451
GLNAME( _mesa_x86_transform_points2_2d_no_rot ):
452
453
 
454
	PUSH_L( ESI )
455
	PUSH_L( EDI )
456
457
 
458
	MOV_L( ARG_DEST, EDI )
459
460
 
461
	MOV_L( REGOFF(V4F_COUNT, ESI), ECX )
462
463
 
464
	JZ( LLBL(x86_p2_2dnrr_done) )
465
466
 
467
	OR_L( CONST(VEC_SIZE_2), REGOFF(V4F_FLAGS, EDI) )
468
469
 
470
	MOV_L( CONST(2), REGOFF(V4F_SIZE, EDI) )
471
472
 
473
	MOV_L( REGOFF(V4F_START, ESI), ESI )
474
475
 
476
	ADD_L( EDI, ECX )
477
478
 
479
LLBL(x86_p2_2dnrr_loop):
480
481
 
482
	FMUL_S( MAT0 )
483
484
 
485
	FMUL_S( MAT5 )
486
487
 
488
	FADD_S( MAT12 )
489
	FLD_S( MAT13 )		/* F5 F4 F1 */
490
	FXCH( ST(2) )			/* F1 F4 F5 */
491
	FADDP( ST0, ST(2) )		/* F4 F5 */
492
493
 
494
	FSTP_S( DST1   )		/* */
495
496
 
497
498
 
499
	ADD_L( EAX, ESI )
500
	CMP_L( ECX, EDI )
501
	JNE( LLBL(x86_p2_2dnrr_loop) )
502
503
 
504
505
 
506
	POP_L( ESI )
507
	RET
508
#undef FRAME_OFFSET
509
510
 
511
 
512
 
513
 
514
GLOBL GLNAME( _mesa_x86_transform_points2_identity )
515
HIDDEN(_mesa_x86_transform_points2_identity)
516
GLNAME( _mesa_x86_transform_points2_identity ):
517
518
 
519
	PUSH_L( ESI )
520
	PUSH_L( EDI )
521
	PUSH_L( EBX )
522
523
 
524
	MOV_L( ARG_DEST, EDI )
525
526
 
527
	MOV_L( REGOFF(V4F_COUNT, ESI), ECX )
528
529
 
530
	JZ( LLBL(x86_p2_ir_done) )
531
532
 
533
	OR_L( CONST(VEC_SIZE_2), REGOFF(V4F_FLAGS, EDI) )
534
535
 
536
	MOV_L( CONST(2), REGOFF(V4F_SIZE, EDI) )
537
538
 
539
	MOV_L( REGOFF(V4F_START, ESI), ESI )
540
541
 
542
	ADD_L( EDI, ECX )
543
544
 
545
	JE( LLBL(x86_p2_ir_done) )
546
547
 
548
LLBL(x86_p2_ir_loop):
549
550
 
551
	MOV_L( SRC1, EDX )
552
553
 
554
	MOV_L( EDX, DST1 )
555
556
 
557
558
 
559
	ADD_L( EAX, ESI )
560
	CMP_L( ECX, EDI )
561
	JNE( LLBL(x86_p2_ir_loop) )
562
563
 
564
565
 
566
	POP_L( EDI )
567
	POP_L( ESI )
568
	RET
569
#undef FRAME_OFFSET
570
571
 
572
	.section .note.GNU-stack,"",%progbits
573
#endif
574