Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5564 serge 1
 
2
	 *
3
	 * 1) It would be nice if load/store double could be used
4
	 *    at least for the matrix parts.  I think for the matrices
5
	 *    it is safe, but for the vertices it probably is not due to
6
	 *    things like glInterleavedArrays etc.
7
	 *
8
	 *    UPDATE: Trying this now in sparc_matrix.h -DaveM_990624
9
	 *
10
	 * 2) One extremely slick trick would be if we could enclose
11
	 *    groups of xform calls on the same vertices such that
12
	 *    we just load the matrix into f16-->f31 before the calls
13
	 *    and then we would not have to do them here.  This may be
14
	 *    tricky and not much of a gain though.
15
	 */
16
17
 
18
19
 
20
	/* Solaris requires this for 64-bit. */
21
        .register %g2, #scratch
22
        .register %g3, #scratch
23
#endif
24
25
 
26
	.align	64
27
28
 
29
	ld	[%o0 + V4F_FLAGS], %g2
30
	mov	1, %g1
31
	st	%g1, [%o0 + V4F_SIZE]
32
	or	%g2, VEC_SIZE_1, %g2
33
	retl
34
	 st	%g2, [%o0 + V4F_FLAGS]
35
__set_v4f_2:
36
	ld	[%o0 + V4F_FLAGS], %g2
37
	mov	2, %g1
38
	st	%g1, [%o0 + V4F_SIZE]
39
	or	%g2, VEC_SIZE_2, %g2
40
	retl
41
	 st	%g2, [%o0 + V4F_FLAGS]
42
__set_v4f_3:
43
	ld	[%o0 + V4F_FLAGS], %g2
44
	mov	3, %g1
45
	st	%g1, [%o0 + V4F_SIZE]
46
	or	%g2, VEC_SIZE_3, %g2
47
	retl
48
	 st	%g2, [%o0 + V4F_FLAGS]
49
__set_v4f_4:
50
	ld	[%o0 + V4F_FLAGS], %g2
51
	mov	4, %g1
52
	st	%g1, [%o0 + V4F_SIZE]
53
	or	%g2, VEC_SIZE_4, %g2
54
	retl
55
	 st	%g2, [%o0 + V4F_FLAGS]
56
57
 
58
59
 
60
_mesa_sparc_transform_points1_general:
61
	ld	[%o2 + V4F_STRIDE], %o5
62
	LDPTR	[%o2 + V4F_START], %g1
63
	LDPTR	[%o0 + V4F_START], %g2
64
	ld	[%o2 + V4F_COUNT], %g3
65
66
 
67
68
 
69
	st	%g3, [%o0 + V4F_COUNT]
70
	bl	3f
71
	 clr	%o1
72
73
 
74
	 andn	%g3, 1, %o2
75
76
 
77
	add	%g1, %o5, %g1		! IEU0
78
	ld	[%g1 + 0x00], %f8	! LSU	Group
79
	add	%o1, 2, %o1		! IEU0
80
	add	%g1, %o5, %g1		! IEU1
81
	fmuls	%f0, M0, %f1		! FGM	Group	1-cycle stall on %f0
82
	fmuls	%f0, M1, %f2		! FGM	Group
83
	fmuls	%f0, M2, %f3		! FGM	Group
84
	fmuls	%f0, M3, %f4		! FGM	Group
85
	fmuls	%f8, M0, %f9		! FGM	Group	f1 available
86
	fadds	%f1, M12, %f1		! FGA
87
	st	%f1, [%g2 + 0x00]	! LSU
88
	fmuls	%f8, M1, %f10		! FGM	Group	f2 available
89
	fadds	%f2, M13, %f2		! FGA
90
	st	%f2, [%g2 + 0x04]	! LSU
91
	fmuls	%f8, M2, %f11		! FGM	Group	f3 available
92
	fadds	%f3, M14, %f3		! FGA
93
	st	%f3, [%g2 + 0x08]	! LSU
94
	fmuls	%f8, M3, %f12		! FGM	Group	f4 available
95
	fadds	%f4, M15, %f4		! FGA
96
	st	%f4, [%g2 + 0x0c]	! LSU
97
	fadds	%f9, M12, %f9		! FGA	Group	f9 available
98
	st	%f9, [%g2 + 0x10]	! LSU
99
	fadds	%f10, M13, %f10		! FGA	Group	f10 available
100
	st	%f10, [%g2 + 0x14]	! LSU
101
	fadds	%f11, M14, %f11		! FGA	Group	f11 available
102
	st	%f11, [%g2 + 0x18]	! LSU
103
	fadds	%f12, M15, %f12		! FGA	Group	f12 available
104
	st	%f12, [%g2 + 0x1c]	! LSU
105
	cmp	%o1, %o2		! IEU1
106
	bne	1b			! CTI
107
	 add	%g2, 0x20, %g2		! IEU0	Group
108
109
 
110
	be	3f
111
	 nop
112
113
 
114
	fmuls	%f0, M0, %f1		! FGM	Group	1-cycle stall on %f0
115
	fmuls	%f0, M1, %f2		! FGM	Group
116
	fmuls	%f0, M2, %f3		! FGM	Group
117
	fmuls	%f0, M3, %f4		! FGM	Group
118
	fadds	%f1, M12, %f1		! FGA	Group
119
	st	%f1, [%g2 + 0x00]	! LSU
120
	fadds	%f2, M13, %f2		! FGA	Group
121
	st	%f2, [%g2 + 0x04]	! LSU
122
	fadds	%f3, M14, %f3		! FGA	Group
123
	st	%f3, [%g2 + 0x08]	! LSU
124
	fadds	%f4, M15, %f4		! FGA	Group
125
	st	%f4, [%g2 + 0x0c]	! LSU
126
127
 
128
	ba	__set_v4f_4
129
	 nop
130
131
 
132
_mesa_sparc_transform_points1_identity:
133
	cmp	%o0, %o2
134
	be	4f
135
	 ld	[%o2 + V4F_STRIDE], %o5
136
	LDPTR	[%o2 + V4F_START], %g1
137
	LDPTR	[%o0 + V4F_START], %g2
138
	ld	[%o2 + V4F_COUNT], %g3
139
140
 
141
	st	%g3, [%o0 + V4F_COUNT]
142
	bl	3f
143
	 clr	%o1
144
145
 
146
	 andn	%g3, 1, %o2
147
148
 
149
	add	%g1, %o5, %g1		! IEU0
150
	ld	[%g1 + 0x00], %f1	! LSU	Group
151
	add	%o1, 2, %o1		! IEU0
152
	add	%g1, %o5, %g1		! IEU1
153
	st	%f0, [%g2 + 0x00]	! LSU	Group
154
	cmp	%o1, %o2		! IEU1
155
	st	%f1, [%g2 + 0x10]	! LSU	Group
156
	bne	1b			! CTI
157
	 add	%g2, 0x20, %g2		! IEU0
158
159
 
160
	be	3f
161
	 nop
162
163
 
164
	addx	%g0, %g0, %g0
165
	st	%f0, [%g2 + 0x00]
166
167
 
168
	ba	__set_v4f_1
169
	 nop
170
171
 
172
	 nop
173
174
 
175
_mesa_sparc_transform_points1_2d:
176
	ld	[%o2 + V4F_STRIDE], %o5
177
	LDPTR	[%o2 + V4F_START], %g1
178
	LDPTR	[%o0 + V4F_START], %g2
179
	ld	[%o2 + V4F_COUNT], %g3
180
181
 
182
183
 
184
	st	%g3, [%o0 + V4F_COUNT]
185
	bl	3f
186
	 clr	%o1
187
188
 
189
	 andn	%g3, 1, %o2
190
191
 
192
	add	%g1, %o5, %g1		! IEU0
193
	ld	[%g1 + 0x00], %f8	! LSU	Group
194
	add	%o1, 2, %o1		! IEU0
195
	add	%g1, %o5, %g1		! IEU1
196
	fmuls	%f0, M0, %f1		! FGM	Group
197
	fmuls	%f0, M1, %f2		! FGM	Group
198
	fmuls	%f8, M0, %f9		! FGM	Group
199
	fmuls	%f8, M1, %f10		! FGM	Group
200
	fadds	%f1, M12, %f3		! FGA	Group	f1 available
201
	st	%f3, [%g2 + 0x00]	! LSU
202
	fadds	%f2, M13, %f4		! FGA	Group	f2 available
203
	st	%f4, [%g2 + 0x04]	! LSU
204
	fadds	%f9, M12, %f11		! FGA	Group	f9 available
205
	st	%f11, [%g2 + 0x10]	! LSU
206
	fadds	%f10, M13, %f12		! FGA	Group	f10 available
207
	st	%f12, [%g2 + 0x14]	! LSU
208
	cmp	%o1, %o2		! IEU1
209
	bne	1b			! CTI
210
	 add	%g2, 0x20, %g2		! IEU0	Group
211
212
 
213
	be	3f
214
	 nop
215
216
 
217
	fmuls	%f0, M0, %f1
218
	fmuls	%f0, M1, %f2
219
	fadds	%f1, M12, %f3
220
	st	%f3, [%g2 + 0x00]
221
	fadds	%f2, M13, %f4
222
	st	%f4, [%g2 + 0x04]
223
224
 
225
	ba	__set_v4f_2
226
	 nop
227
228
 
229
_mesa_sparc_transform_points1_2d_no_rot:
230
	ld	[%o2 + V4F_STRIDE], %o5
231
	LDPTR	[%o2 + V4F_START], %g1
232
	LDPTR	[%o0 + V4F_START], %g2
233
	ld	[%o2 + V4F_COUNT], %g3
234
235
 
236
237
 
238
	st	%g3, [%o0 + V4F_COUNT]
239
	bl	3f
240
	 clr	%o1
241
242
 
243
	 andn	%g3, 1, %o2
244
245
 
246
	add	%g1, %o5, %g1		! IEU0
247
	ld	[%g1 + 0x00], %f4	! LSU	Group
248
	add	%o1, 2, %o1		! IEU0
249
	add	%g1, %o5, %g1		! IEU1
250
	fmuls	%f0, M0, %f1		! FGM	Group
251
	fmuls	%f4, M0, %f5		! FGM	Group
252
	fadds	%f1, M12, %f3		! FGA	Group, 2 cycle stall, f1 available
253
	st	%f3, [%g2 + 0x00]	! LSU
254
	st	M13, [%g2 + 0x04]	! LSU	Group, f5 available
255
	fadds	%f5, M12, %f6		! FGA
256
	st	%f6, [%g2 + 0x10]	! LSU	Group
257
	st	M13, [%g2 + 0x14]	! LSU	Group
258
	cmp	%o1, %o2		! IEU1
259
	bne	1b			! CTI
260
	 add	%g2, 0x20, %g2		! IEU0	Group
261
262
 
263
	be	3f
264
	 nop
265
266
 
267
	fmuls	%f0, M0, %f1
268
	fadds	%f1, M12, %f3
269
	st	%f3, [%g2 + 0x00]
270
	st	M13, [%g2 + 0x04]
271
272
 
273
	ba	__set_v4f_2
274
	 nop
275
276
 
277
_mesa_sparc_transform_points1_3d:
278
	ld	[%o2 + V4F_STRIDE], %o5
279
	LDPTR	[%o2 + V4F_START], %g1
280
	LDPTR	[%o0 + V4F_START], %g2
281
	ld	[%o2 + V4F_COUNT], %g3
282
283
 
284
285
 
286
	st	%g3, [%o0 + V4F_COUNT]
287
	bl	3f
288
	 clr	%o1
289
290
 
291
	 andn	%g3, 1, %o2
292
293
 
294
	add	%g1, %o5, %g1		! IEU0
295
	ld	[%g1 + 0x00], %f4	! LSU	Group
296
	add	%o1, 2, %o1		! IEU0
297
	add	%g1, %o5, %g1		! IEU1
298
	fmuls	%f0, M0, %f1		! FGM	Group
299
	fmuls	%f0, M1, %f2		! FGM	Group
300
	fmuls	%f0, M2, %f3		! FGM	Group
301
	fmuls	%f4, M0, %f5		! FGM	Group
302
	fadds	%f1, M12, %f1		! FGA	Group, f1 available
303
	st	%f1, [%g2 + 0x00]	! LSU
304
	fmuls	%f4, M1, %f6		! FGM
305
	fadds	%f2, M13, %f2		! FGA	Group, f2 available
306
	st	%f2, [%g2 + 0x04]	! LSU
307
	fmuls	%f4, M2, %f7		! FGM
308
	fadds	%f3, M14, %f3		! FGA	Group, f3 available
309
	st	%f3, [%g2 + 0x08]	! LSU
310
	fadds	%f5, M12, %f5		! FGA	Group, f5 available
311
	st	%f5, [%g2 + 0x10]	! LSU
312
	fadds	%f6, M13, %f6		! FGA	Group, f6 available
313
	st	%f6, [%g2 + 0x14]	! LSU
314
	fadds	%f7, M14, %f7		! FGA	Group, f7 available
315
	st	%f7, [%g2 + 0x18]	! LSU
316
	cmp	%o1, %o2		! IEU1
317
	bne	1b			! CTI
318
	 add	%g2, 0x20, %g2		! IEU0	Group
319
320
 
321
	be	3f
322
	 nop
323
324
 
325
	fmuls	%f0, M0, %f1
326
	fmuls	%f0, M1, %f2
327
	fmuls	%f0, M2, %f3
328
	fadds	%f1, M12, %f1
329
	st	%f1, [%g2 + 0x00]
330
	fadds	%f2, M13, %f2
331
	st	%f2, [%g2 + 0x04]
332
	fadds	%f3, M14, %f3
333
	st	%f3, [%g2 + 0x08]
334
335
 
336
	ba	__set_v4f_3
337
	 nop
338
339
 
340
_mesa_sparc_transform_points1_3d_no_rot:
341
	ld	[%o2 + V4F_STRIDE], %o5
342
	LDPTR	[%o2 + V4F_START], %g1
343
	LDPTR	[%o0 + V4F_START], %g2
344
	ld	[%o2 + V4F_COUNT], %g3
345
346
 
347
348
 
349
	st	%g3, [%o0 + V4F_COUNT]
350
	bl	3f
351
	 clr	%o1
352
353
 
354
	 andn	%g3, 1, %o2
355
356
 
357
	add	%g1, %o5, %g1		! IEU0
358
	ld	[%g1 + 0x00], %f2	! LSU	Group
359
	add	%o1, 2, %o1		! IEU0
360
	add	%g1, %o5, %g1		! IEU1
361
	fmuls	%f0, M0, %f1		! FGM	Group
362
	fmuls	%f2, M0, %f3		! FGM	Group
363
	fadds	%f1, M12, %f1		! FGA	Group, 2 cycle stall, f1 available
364
	st	%f1, [%g2 + 0x00]	! LSU
365
	fadds	%f3, M12, %f3		! FGA	Group, f3 available
366
	st	M13, [%g2 + 0x04]	! LSU
367
	st	M14, [%g2 + 0x08]	! LSU	Group
368
	st	%f3, [%g2 + 0x10]	! LSU	Group
369
	st	M13, [%g2 + 0x14]	! LSU	Group
370
	st	M14, [%g2 + 0x18]	! LSU	Group
371
	cmp	%o1, %o2		! IEU1
372
	bne	1b			! CTI
373
	 add	%g2, 0x20, %g2		! IEU0	Group
374
375
 
376
	be	3f
377
	 nop
378
379
 
380
	fmuls	%f0, M0, %f1
381
	fadds	%f1, M12, %f1
382
	st	%f1, [%g2 + 0x00]
383
	st	M13, [%g2 + 0x04]
384
	st	M14, [%g2 + 0x08]
385
386
 
387
	ba	__set_v4f_3
388
	 nop
389
390
 
391
_mesa_sparc_transform_points1_perspective:
392
	ld	[%o2 + V4F_STRIDE], %o5
393
	LDPTR	[%o2 + V4F_START], %g1
394
	LDPTR	[%o0 + V4F_START], %g2
395
	ld	[%o2 + V4F_COUNT], %g3
396
397
 
398
399
 
400
	st	%g3, [%o0 + V4F_COUNT]
401
	bl	3f
402
	 clr	%o1
403
404
 
405
	 andn	%g3, 1, %o2
406
407
 
408
	add	%g1, %o5, %g1		! IEU0
409
	ld	[%g1 + 0x00], %f2	! LSU	Group
410
	add	%o1, 2, %o1		! IEU0
411
	add	%g1, %o5, %g1		! IEU1
412
	fmuls	%f0, M0, %f1		! FGM	Group
413
	st	%f1, [%g2 + 0x00]	! LSU
414
	fmuls	%f2, M0, %f3		! FGM	Group
415
	st	%g0, [%g2 + 0x04]	! LSU
416
	st	M14, [%g2 + 0x08]	! LSU	Group
417
	st	%g0, [%g2 + 0x0c]	! LSU	Group
418
	st	%f3, [%g2 + 0x10]	! LSU	Group
419
	st	%g0, [%g2 + 0x14]	! LSU	Group
420
	st	M14, [%g2 + 0x18]	! LSU	Group
421
	st	%g0, [%g2 + 0x1c]	! LSU	Group
422
	cmp	%o1, %o2		! IEU1
423
	bne	1b			! CTI
424
	 add	%g2, 0x20, %g2		! IEU0	Group
425
426
 
427
	be	3f
428
	 nop
429
430
 
431
	fmuls	%f0, M0, %f1
432
	st	%f1, [%g2 + 0x00]
433
	st	%g0, [%g2 + 0x04]
434
	st	M14, [%g2 + 0x08]
435
	st	%g0, [%g2 + 0x0c]
436
437
 
438
	ba	__set_v4f_4
439
	 nop
440
441
 
442
_mesa_sparc_transform_points2_general:
443
	ld	[%o2 + V4F_STRIDE], %o5
444
	LDPTR	[%o2 + V4F_START], %g1
445
	LDPTR	[%o0 + V4F_START], %g2
446
	ld	[%o2 + V4F_COUNT], %g3
447
448
 
449
450
 
451
	st	%g3, [%o0 + V4F_COUNT]
452
	be	2f
453
	 clr	%o1
454
455
 
456
	ld	[%g1 + 0x04], %f1	! LSU	Group
457
	add	%o1, 1, %o1		! IEU0
458
	add	%g1, %o5, %g1		! IEU1
459
	fmuls	%f0, M0, %f2		! FGM	Group
460
	fmuls	%f0, M1, %f3		! FGM	Group
461
	fmuls	%f0, M2, %f4		! FGM	Group
462
	fmuls	%f0, M3, %f5		! FGM	Group
463
	fadds	%f2, M12, %f2		! FGA	Group	f2 available
464
	fmuls	%f1, M4, %f6		! FGM
465
	fadds	%f3, M13, %f3		! FGA	Group	f3 available
466
	fmuls	%f1, M5, %f7		! FGM
467
	fadds	%f4, M14, %f4		! FGA	Group	f4 available
468
	fmuls	%f1, M6, %f8		! FGM
469
	fadds	%f5, M15, %f5		! FGA	Group	f5 available
470
	fmuls	%f1, M7, %f9		! FGM
471
	fadds	%f2, %f6, %f2		! FGA	Group	f6 available
472
	st	%f2, [%g2 + 0x00]	! LSU
473
	fadds	%f3, %f7, %f3		! FGA	Group	f7 available
474
	st	%f3, [%g2 + 0x04]	! LSU
475
	fadds	%f4, %f8, %f4		! FGA	Group	f8 available
476
	st	%f4, [%g2 + 0x08]	! LSU
477
	fadds	%f5, %f9, %f5		! FGA	Group	f9 available
478
	st	%f5, [%g2 + 0x0c]	! LSU
479
	cmp	%o1, %g3		! IEU1
480
	bne	1b			! CTI
481
	 add	%g2, 0x10, %g2		! IEU0	Group
482
2:
483
	ba	__set_v4f_4
484
	 nop
485
486
 
487
_mesa_sparc_transform_points2_identity:
488
	cmp	%o2, %o0
489
	be	3f
490
	 ld	[%o2 + V4F_STRIDE], %o5
491
	LDPTR	[%o2 + V4F_START], %g1
492
	LDPTR	[%o0 + V4F_START], %g2
493
	ld	[%o2 + V4F_COUNT], %g3
494
495
 
496
	st	%g3, [%o0 + V4F_COUNT]
497
	be	2f
498
	 clr	%o1
499
500
 
501
	add	%o1, 1, %o1		! IEU0
502
	ld	[%g1 + 0x04], %f1	! LSU	Group
503
	add	%g1, %o5, %g1		! IEU0
504
	cmp	%o1, %g3		! IEU1
505
	st	%f0, [%g2 + 0x00]	! LSU	Group
506
	st	%f1, [%g2 + 0x04]	! LSU	Group
507
	bne	1b			! CTI
508
	 add	%g2, 0x10, %g2		! IEU0
509
2:
510
	ba	__set_v4f_2
511
	 nop
512
513
 
514
	 nop
515
516
 
517
_mesa_sparc_transform_points2_2d:
518
	ld	[%o2 + V4F_STRIDE], %o5
519
	LDPTR	[%o2 + V4F_START], %g1
520
	LDPTR	[%o0 + V4F_START], %g2
521
	ld	[%o2 + V4F_COUNT], %g3
522
523
 
524
525
 
526
	st	%g3, [%o0 + V4F_COUNT]
527
	bl	3f
528
	 clr	%o1
529
530
 
531
	 andn	%g3, 1, %o2
532
533
 
534
	ld	[%g1 + 0x04], %f1	! LSU	Group
535
	add	%o1, 2, %o1		! IEU0
536
	add	%g1, %o5, %g1		! IEU1
537
	fmuls	%f0, M0, %f2		! FGM
538
	ld	[%g1 + 0x00], %f8	! LSU	Group
539
	fmuls	%f0, M1, %f3		! FGM
540
	ld	[%g1 + 0x04], %f9	! LSU	Group
541
	fmuls	%f1, M4, %f6		! FGM
542
	fmuls	%f1, M5, %f7		! FGM	Group
543
	add	%g1, %o5, %g1		! IEU0
544
	fmuls	%f8, M0, %f10		! FGM	Group	f2 available
545
	fadds	%f2, M12, %f2		! FGA
546
	fmuls	%f8, M1, %f11		! FGM	Group	f3 available
547
	fadds	%f3, M13, %f3		! FGA
548
	fmuls	%f9, M4, %f12		! FGM	Group
549
	fmuls	%f9, M5, %f13		! FGM	Group
550
	fadds	%f10, M12, %f10		! FGA	Group	f2, f10 available
551
	fadds	%f2, %f6, %f2		! FGA	Group	f3, f11 available
552
	st	%f2, [%g2 + 0x00]	! LSU
553
	fadds	%f11, M13, %f11		! FGA	Group	f12 available
554
	fadds	%f3, %f7, %f3		! FGA	Group	f13 available
555
	st	%f3, [%g2 + 0x04]	! LSU
556
	fadds	%f10, %f12, %f10	! FGA	Group	f10 available
557
	st	%f10, [%g2 + 0x10]	! LSU
558
	fadds	%f11, %f13, %f11	! FGA	Group	f11 available
559
	st	%f11, [%g2 + 0x14]	! LSU
560
	cmp	%o1, %o2		! IEU1
561
	bne	1b			! CTI
562
	 add	%g2, 0x20, %g2		! IEU0	Group
563
564
 
565
	be	3f
566
	 nop
567
568
 
569
	ld	[%g1 + 0x04], %f1	! LSU	Group
570
	fmuls	%f0, M0, %f2		! FGM	Group
571
	fmuls	%f0, M1, %f3		! FGM	Group
572
	fmuls	%f1, M4, %f6		! FGM	Group
573
	fmuls	%f1, M5, %f7		! FGM	Group
574
	fadds	%f2, M12, %f2		! FGA	Group	f2 available
575
	fadds	%f3, M13, %f3		! FGA	Group	f3 available
576
	fadds	%f2, %f6, %f2		! FGA	Group	2 cycle stall, f2 available
577
	st	%f2, [%g2 + 0x00]	! LSU
578
	fadds	%f3, %f7, %f3		! FGA	Group	f3 available
579
	st	%f3, [%g2 + 0x04]	! LSU
580
581
 
582
	ba	__set_v4f_2
583
	 nop
584
585
 
586
_mesa_sparc_transform_points2_2d_no_rot:
587
	ld	[%o2 + V4F_STRIDE], %o5
588
	LDPTR	[%o2 + V4F_START], %g1
589
	LDPTR	[%o0 + V4F_START], %g2
590
	ld	[%o2 + V4F_COUNT], %g3
591
592
 
593
594
 
595
	st	%g3, [%o0 + V4F_COUNT]
596
	bl	3f
597
	 clr	%o1
598
599
 
600
	 andn	%g3, 1, %o2
601
602
 
603
	ld	[%g1 + 0x04], %f1	! LSU	Group
604
	add	%o1, 2, %o1		! IEU0
605
	add	%g1, %o5, %g1		! IEU1
606
	ld	[%g1 + 0x00], %f4	! LSU	Group
607
	fmuls	%f0, M0, %f2		! FGM
608
	ld	[%g1 + 0x04], %f5	! LSU	Group
609
	fmuls	%f1, M5, %f3		! FGM
610
	fmuls	%f4, M0, %f6		! FGM	Group
611
	add	%g1, %o5, %g1		! IEU0
612
	fmuls	%f5, M5, %f7		! FGM	Group
613
	fadds	%f2, M12, %f2		! FGA	Group	f2 available
614
	st	%f2, [%g2 + 0x00]	! LSU
615
	fadds	%f3, M13, %f3		! FGA	Group	f3 available
616
	st	%f3, [%g2 + 0x04]	! LSU
617
	fadds	%f6, M12, %f6		! FGA	Group	f6 available
618
	st	%f6, [%g2 + 0x10]	! LSU
619
	fadds	%f7, M13, %f7		! FGA	Group	f7 available
620
	st	%f7, [%g2 + 0x14]	! LSU
621
	cmp	%o1, %o2		! IEU1
622
	bne	1b			! CTI
623
	 add	%g2, 0x20, %g2		! IEU0	Group
624
625
 
626
	be	3f
627
	 nop
628
629
 
630
	ld	[%g1 + 0x04], %f1	! LSU	Group
631
	fmuls	%f0, M0, %f2		! FGM	Group
632
	fmuls	%f1, M5, %f3		! FGM	Group
633
	fadds	%f2, M12, %f2		! FGA	Group, 2 cycle stall, f2 available
634
	st	%f2, [%g2 + 0x00]	! LSU
635
	fadds	%f3, M13, %f3		! FGA	Group	f3 available
636
	st	%f3, [%g2 + 0x04]	! LSU
637
638
 
639
	ba	__set_v4f_2
640
	 nop
641
642
 
643
	.globl	_mesa_sparc_transform_points2_3d
644
_mesa_sparc_transform_points2_3d:
645
	ld	[%o2 + V4F_STRIDE], %o5
646
	ld	[%o2 + V4F_START], %g1
647
	ld	[%o0 + V4F_START], %g2
648
	ld	[%o2 + V4F_COUNT], %g3
649
650
 
651
652
 
653
	st	%g3, [%o0 + V4F_COUNT]
654
	bl	3f
655
	 clr	%o1
656
657
 
658
	 andn	%g3, 1, %o2
659
660
 
661
	ld	[%g1 + 0x04], %f1	! LSU	Group
662
	add	%o1, 2, %o1		! IEU0
663
	add	%g1, %o5, %g1		! IEU1
664
	ld	[%g1 + 0x00], %f9	! LSU	Group
665
	fmuls	%f0, M0, %f2		! FGM
666
	ld	[%g1 + 0x04], %f10	! LSU	Group
667
	fmuls	%f0, M1, %f3		! FGM
668
	fmuls	%f0, M2, %f4		! FGM	Group
669
	add	%g1, %o5, %g1		! IEU0
670
	fmuls	%f1, M4, %f6		! FGM	Group
671
	fmuls	%f1, M5, %f7		! FGM	Group	f2 available
672
	fadds	%f2, M12, %f2		! FGA
673
	fmuls	%f1, M6, %f8		! FGM	Group	f3 available
674
	fadds	%f3, M13, %f3		! FGA
675
	fmuls	%f9, M0, %f11		! FGM	Group	f4 available
676
	fadds	%f4, M14, %f4		! FGA
677
	fmuls	%f9, M1, %f12		! FGM	Group	f6 available
678
	fmuls	%f9, M2, %f13		! FGM	Group	f2, f7 available
679
	fadds	%f2, %f6, %f2		! FGA
680
	st	%f2, [%g2 + 0x00]	! LSU
681
	fmuls	%f10, M4, %f14		! FGM	Group	f3, f8 available
682
	fadds	%f3, %f7, %f3		! FGA
683
	st	%f3, [%g2 + 0x04]	! LSU
684
	fmuls	%f10, M5, %f15		! FGM	Group	f4, f11 available
685
	fadds	%f11, M12, %f11		! FGA
686
	fmuls	%f10, M6, %f0		! FGM	Group	f12 available
687
	fadds	%f12, M13, %f12		! FGA
688
	fadds	%f13, M14, %f13		! FGA	Group	f13 available
689
	fadds	%f4, %f8, %f4		! FGA	Group	f14 available
690
	st	%f4, [%g2 + 0x08]	! LSU
691
	fadds	%f11, %f14, %f11	! FGA	Group	f15, f11 available
692
	st	%f11, [%g2 + 0x10]	! LSU
693
	fadds	%f12, %f15, %f12	! FGA	Group	f0, f12 available
694
	st	%f12, [%g2 + 0x14]	! LSU
695
	fadds	%f13, %f0, %f13		! FGA	Group	f13 available
696
	st	%f13, [%g2 + 0x18]	! LSU
697
698
 
699
	bne	1b			! CTI
700
	 add	%g2, 0x20, %g2		! IEU0	Group
701
702
 
703
	be	3f
704
	 nop
705
706
 
707
	ld	[%g1 + 0x04], %f1	! LSU	Group
708
	fmuls	%f0, M0, %f2		! FGM	Group
709
	fmuls	%f0, M1, %f3		! FGM	Group
710
	fmuls	%f0, M2, %f4		! FGM	Group
711
	fmuls	%f1, M4, %f6		! FGM	Group
712
	fmuls	%f1, M5, %f7		! FGM	Group	f2 available
713
	fadds	%f2, M12, %f2		! FGA
714
	fmuls	%f1, M6, %f8		! FGM	Group	f3 available
715
	fadds	%f3, M13, %f3		! FGA
716
	fadds	%f4, M14, %f4		! FGA	Group	f4 available
717
	fadds	%f2, %f6, %f2		! FGA	Group	stall, f2, f6, f7 available
718
	st	%f2, [%g2 + 0x00]	! LSU
719
	fadds	%f3, %f7, %f3		! FGA	Group	f3, f8 available
720
	st	%f3, [%g2 + 0x04]	! LSU
721
	fadds	%f4, %f8, %f4		! FGA	Group	f4 available
722
	st	%f4, [%g2 + 0x08]	! LSU
723
724
 
725
	ba	__set_v4f_3
726
	 nop
727
728
 
729
_mesa_sparc_transform_points2_3d_no_rot:
730
	ld	[%o2 + V4F_STRIDE], %o5
731
	LDPTR	[%o2 + V4F_START], %g1
732
	LDPTR	[%o0 + V4F_START], %g2
733
	ld	[%o2 + V4F_COUNT], %g3
734
735
 
736
737
 
738
	st	%g3, [%o0 + V4F_COUNT]
739
	bl	3f
740
	 clr	%o3
741
742
 
743
	 andn	%g3, 1, %o2
744
745
 
746
	ld	[%g1 + 0x04], %f1	! LSU	Group
747
	add	%o3, 2, %o3		! IEU0
748
	add	%g1, %o5, %g1		! IEU1
749
	ld	[%g1 + 0x00], %f4	! LSU	Group
750
	fmuls	%f0, M0, %f2		! FGM
751
	ld	[%g1 + 0x04], %f5	! LSU	Group
752
	fmuls	%f1, M5, %f3		! FGM
753
	fmuls	%f4, M0, %f6		! FGM	Group
754
	add	%g1, %o5, %g1		! IEU0
755
	fmuls	%f5, M5, %f7		! FGM	Group
756
	fadds	%f2, M12, %f2		! FGA	Group	f2 available
757
	st	%f2, [%g2 + 0x00]	! LSU
758
	fadds	%f3, M13, %f3		! FGA	Group	f3 available
759
	st	%f3, [%g2 + 0x04]	! LSU
760
	fadds	%f6, M12, %f6		! FGA	Group	f6 available
761
	st	M14, [%g2 + 0x08]	! LSU
762
	fadds	%f7, M13, %f7		! FGA	Group	f7 available
763
	st	%f6, [%g2 + 0x10]	! LSU
764
	st	%f7, [%g2 + 0x14]	! LSU	Group
765
	st	M14, [%g2 + 0x18]	! LSU	Group
766
	cmp	%o3, %o2		! IEU1
767
	bne	1b			! CTI
768
	 add	%g2, 0x20, %g2		! IEU0	Group
769
770
 
771
	be	3f
772
	 nop
773
774
 
775
	ld	[%g1 + 0x04], %f1	! LSU	Group
776
	fmuls	%f0, M0, %f2		! FGM	Group
777
	fmuls	%f1, M5, %f3		! FGM	Group
778
	fadds	%f2, M12, %f2		! FGA	Group, 2 cycle stall, f2 available
779
	st	%f2, [%g2 + 0x00]	! LSU
780
	fadds	%f3, M13, %f3		! FGA	Group	f3 available
781
	st	%f3, [%g2 + 0x04]	! LSU
782
	st	M14, [%g2 + 0x08]	! LSU	Group
783
784
 
785
	cmp	%g3, 0
786
	bne	__set_v4f_3
787
	 nop
788
	ba	__set_v4f_2
789
	 nop
790
791
 
792
_mesa_sparc_transform_points2_perspective:
793
	ld	[%o2 + V4F_STRIDE], %o5
794
	LDPTR	[%o2 + V4F_START], %g1
795
	LDPTR	[%o0 + V4F_START], %g2
796
	ld	[%o2 + V4F_COUNT], %g3
797
798
 
799
800
 
801
	st	%g3, [%o0 + V4F_COUNT]
802
	be	2f
803
	 clr	%o1
804
805
 
806
	ld	[%g1 + 0x04], %f1
807
	add	%o1, 1, %o1
808
	add	%g1, %o5, %g1
809
	fmuls	%f0, M0, %f2
810
	st	%f2, [%g2 + 0x00]
811
	fmuls	%f1, M5, %f3
812
	st	%f3, [%g2 + 0x04]
813
	st	M14, [%g2 + 0x08]
814
	st	%g0, [%g2 + 0x0c]
815
	cmp	%o1, %g3
816
	bne	1b
817
	 add	%g2, 0x10, %g2
818
2:
819
	ba	__set_v4f_4
820
	 nop
821
822
 
823
_mesa_sparc_transform_points3_general:
824
	ld	[%o2 + V4F_STRIDE], %o5
825
	LDPTR	[%o2 + V4F_START], %g1
826
	LDPTR	[%o0 + V4F_START], %g2
827
	ld	[%o2 + V4F_COUNT], %g3
828
829
 
830
831
 
832
	st	%g3, [%o0 + V4F_COUNT]
833
	be	2f
834
	 clr	%o1
835
836
 
837
	ld	[%g1 + 0x04], %f1	! LSU	Group
838
	ld	[%g1 + 0x08], %f2	! LSU	Group
839
	add	%o1, 1, %o1		! IEU0
840
	add	%g1, %o5, %g1		! IEU1
841
	fmuls	%f0, M0, %f3		! FGM
842
	fmuls	%f1, M4, %f7		! FGM	Group
843
	fmuls	%f0, M1, %f4		! FGM	Group
844
	fmuls	%f1, M5, %f8		! FGM	Group
845
	fmuls	%f0, M2, %f5		! FGM	Group	f3 available
846
	fmuls	%f1, M6, %f9		! FGM	Group	f7 available
847
	fadds	%f3, %f7, %f3		! FGA
848
	fmuls	%f0, M3, %f6		! FGM	Group	f4 available
849
	fmuls	%f1, M7, %f10		! FGM	Group	f8 available
850
	fadds	%f4, %f8, %f4		! FGA
851
	fmuls	%f2, M8, %f7		! FGM	Group	f5 available
852
	fmuls	%f2, M9, %f8		! FGM	Group	f9,f3 available
853
	fadds	%f5, %f9, %f5		! FGA
854
	fmuls	%f2, M10, %f9		! FGM	Group	f6 available
855
	fadds	%f6, %f10, %f6		! FGA	Group	f10,f4 available
856
	fmuls	%f2, M11, %f10		! FGM
857
	fadds	%f3, M12, %f3		! FGA	Group	f7 available
858
	fadds	%f4, M13, %f4		! FGA	Group	f8,f5 available
859
	fadds	%f5, M14, %f5		! FGA	Group	f9 available
860
	fadds	%f6, M15, %f6		! FGA	Group	f10,f6 available
861
	fadds	%f3, %f7, %f3		! FGA	Group	f3 available
862
	st	%f3, [%g2 + 0x00]	! LSU
863
	fadds	%f4, %f8, %f4		! FGA	Group	f4 available
864
	st	%f4, [%g2 + 0x04]	! LSU
865
	fadds	%f5, %f9, %f5		! FGA	Group	f5 available
866
	st	%f5, [%g2 + 0x08]	! LSU
867
	fadds	%f6, %f10, %f6		! FGA	Group	f6 available
868
	st	%f6, [%g2 + 0x0c]	! LSU
869
	cmp	%o1, %g3		! IEU1
870
	bne	1b			! CTI
871
	 add	%g2, 0x10, %g2		! IEU0	Group
872
2:
873
	ba	__set_v4f_4
874
	 nop
875
876
 
877
_mesa_sparc_transform_points3_identity:
878
	ld	[%o2 + V4F_STRIDE], %o5
879
	LDPTR	[%o2 + V4F_START], %g1
880
	LDPTR	[%o0 + V4F_START], %g2
881
	ld	[%o2 + V4F_COUNT], %g3
882
883
 
884
	st	%g3, [%o0 + V4F_COUNT]
885
	be	2f
886
	 clr	%o1
887
888
 
889
	ld	[%g1 + 0x04], %f1
890
	ld	[%g1 + 0x08], %f2
891
	add	%o1, 1, %o1
892
	add	%g1, %o5, %g1
893
	cmp	%o1, %g3
894
	st	%f0, [%g2 + 0x00]
895
	st	%f1, [%g2 + 0x04]
896
	st	%f2, [%g2 + 0x08]
897
	bne	1b
898
	 add	%g2, 0x10, %g2
899
2:
900
	ba	__set_v4f_3
901
	 nop
902
903
 
904
_mesa_sparc_transform_points3_2d:
905
	ld	[%o2 + V4F_STRIDE], %o5
906
	LDPTR	[%o2 + V4F_START], %g1
907
	LDPTR	[%o0 + V4F_START], %g2
908
	ld	[%o2 + V4F_COUNT], %g3
909
910
 
911
912
 
913
	st	%g3, [%o0 + V4F_COUNT]
914
	be	2f
915
	 clr	%o1
916
917
 
918
	ld	[%g1 + 0x04], %f1	! LSU	Group
919
	ld	[%g1 + 0x08], %f2	! LSU	Group
920
	add	%o1, 1, %o1		! IEU0
921
	add	%g1, %o5, %g1		! IEU1
922
	fmuls	%f0, M0, %f3		! FGM
923
	fmuls	%f0, M1, %f4		! FGM	Group
924
	fmuls	%f1, M4, %f6		! FGM	Group
925
	fmuls	%f1, M5, %f7		! FGM	Group
926
	fadds	%f3, M12, %f3		! FGA	Group	f3 available
927
	fadds	%f4, M13, %f4		! FGA	Group	f4 available
928
	fadds	%f3, %f6, %f3		! FGA	Group	f6 available
929
	st	%f3, [%g2 + 0x00]	! LSU
930
	fadds	%f4, %f7, %f4		! FGA	Group	f7 available
931
	st	%f4, [%g2 + 0x04]	! LSU
932
	st	%f2, [%g2 + 0x08]	! LSU	Group
933
	cmp	%o1, %g3		! IEU1
934
	bne	1b			! CTI
935
	 add	%g2, 0x10, %g2		! IEU0	Group
936
2:
937
	ba	__set_v4f_3
938
	 nop
939
940
 
941
_mesa_sparc_transform_points3_2d_no_rot:
942
	ld	[%o2 + V4F_STRIDE], %o5
943
	LDPTR	[%o2 + V4F_START], %g1
944
	LDPTR	[%o0 + V4F_START], %g2
945
	ld	[%o2 + V4F_COUNT], %g3
946
947
 
948
949
 
950
	st	%g3, [%o0 + V4F_COUNT]
951
	be	2f
952
	 clr	%o1
953
954
 
955
	ld	[%g1 + 0x04], %f1	! LSU	Group
956
	ld	[%g1 + 0x08], %f2	! LSU	Group
957
	add	%o1, 1, %o1		! IEU0
958
	add	%g1, %o5, %g1		! IEU1
959
	fmuls	%f0, M0, %f3		! FGM
960
	fmuls	%f1, M5, %f4		! FGM	Group
961
	st	%f2, [%g2 + 0x08]	! LSU
962
	fadds	%f3, M12, %f3		! FGA	Group
963
	st	%f3, [%g2 + 0x00]	! LSU
964
	fadds	%f4, M13, %f4		! FGA	Group
965
	st	%f4, [%g2 + 0x04]	! LSU
966
	cmp	%o1, %g3		! IEU1
967
	bne	1b			! CTI
968
	 add	%g2, 0x10, %g2		! IEU0	Group
969
2:
970
	ba	__set_v4f_3
971
	 nop
972
973
 
974
_mesa_sparc_transform_points3_3d:
975
	ld	[%o2 + V4F_STRIDE], %o5
976
	LDPTR	[%o2 + V4F_START], %g1
977
	LDPTR	[%o0 + V4F_START], %g2
978
	ld	[%o2 + V4F_COUNT], %g3
979
980
 
981
982
 
983
	st	%g3, [%o0 + V4F_COUNT]
984
	be	2f
985
	 clr	%o1
986
987
 
988
	ld	[%g1 + 0x04], %f1	! LSU	Group
989
	ld	[%g1 + 0x08], %f2	! LSU	Group
990
	add	%o1, 1, %o1		! IEU0
991
	add	%g1, %o5, %g1		! IEU1
992
	fmuls	%f0, M0, %f3		! FGM
993
	fmuls	%f1, M4, %f6		! FGM	Group
994
	fmuls	%f0, M1, %f4		! FGM	Group
995
	fmuls	%f1, M5, %f7		! FGM	Group
996
	fmuls	%f0, M2, %f5		! FGM	Group	f3 available
997
	fmuls	%f1, M6, %f8		! FGM	Group	f6 available
998
	fadds	%f3, %f6, %f3		! FGA
999
	fmuls	%f2, M8, %f9		! FGM	Group	f4 available
1000
	fmuls	%f2, M9, %f10		! FGM	Group	f7 available
1001
	fadds	%f4, %f7, %f4		! FGA
1002
	fmuls	%f2, M10, %f11		! FGM	Group	f5 available
1003
	fadds	%f5, %f8, %f5		! FGA	Group	f8, f3 available
1004
	fadds	%f3, %f9, %f3		! FGA	Group	f9 available
1005
	fadds	%f4, %f10, %f4		! FGA	Group	f10, f4 available
1006
	fadds	%f5, %f11, %f5		! FGA	Group	stall, f11, f5 available
1007
	fadds	%f3, M12, %f3		! FGA	Group	f3 available
1008
	st	%f3, [%g2 + 0x00]	! LSU
1009
	fadds	%f4, M13, %f4		! FGA	Group	f4 available
1010
	st	%f4, [%g2 + 0x04]	! LSU
1011
	fadds	%f5, M14, %f5		! FGA	Group	f5 available
1012
	st	%f5, [%g2 + 0x08]	! LSU
1013
	cmp	%o1, %g3		! IEU1
1014
	bne	1b			! CTI
1015
	 add	%g2, 0x10, %g2		! IEU0	Group
1016
2:
1017
	ba	__set_v4f_3
1018
	 nop
1019
1020
 
1021
_mesa_sparc_transform_points3_3d_no_rot:
1022
	ld	[%o2 + V4F_STRIDE], %o5
1023
	LDPTR	[%o2 + V4F_START], %g1
1024
	LDPTR	[%o0 + V4F_START], %g2
1025
	ld	[%o2 + V4F_COUNT], %g3
1026
1027
 
1028
1029
 
1030
	st	%g3, [%o0 + V4F_COUNT]
1031
	be	2f
1032
	 clr	%o1
1033
1034
 
1035
	ld	[%g1 + 0x04], %f1	! LSU	Group
1036
	ld	[%g1 + 0x08], %f2	! LSU	Group
1037
	add	%o1, 1, %o1		! IEU0
1038
	add	%g1, %o5, %g1		! IEU1
1039
	cmp	%o1, %g3		! IEU1	Group
1040
	fmuls	%f0, M0, %f3		! FGM
1041
	fmuls	%f1, M5, %f4		! FGM	Group
1042
	fmuls	%f2, M10, %f5		! FGM	Group
1043
	fadds	%f3, M12, %f3		! FGA	Group, stall, f3 available
1044
	st	%f3, [%g2 + 0x00]	! LSU
1045
	fadds	%f4, M13, %f4		! FGA	Group, f4 available
1046
	st	%f4, [%g2 + 0x04]	! LSU
1047
	fadds	%f5, M14, %f5		! FGA	Group, f5 available
1048
	st	%f5, [%g2 + 0x08]	! LEU
1049
	bne	1b			! CTI
1050
	 add	%g2, 0x10, %g2		! IEU0	Group
1051
2:
1052
	ba	__set_v4f_3
1053
	 nop
1054
1055
 
1056
_mesa_sparc_transform_points3_perspective:
1057
	ld	[%o2 + V4F_STRIDE], %o5
1058
	LDPTR	[%o2 + V4F_START], %g1
1059
	LDPTR	[%o0 + V4F_START], %g2
1060
	ld	[%o2 + V4F_COUNT], %g3
1061
1062
 
1063
1064
 
1065
	st	%g3, [%o0 + V4F_COUNT]
1066
	be	2f
1067
	 clr	%o1
1068
1069
 
1070
	ld	[%g1 + 0x04], %f1	! LSU	Group
1071
	ld	[%g1 + 0x08], %f2	! LSU	Group
1072
	add	%o1, 1, %o1		! IEU0
1073
	add	%g1, %o5, %g1		! IEU1
1074
	fmuls	%f0, M0, %f3		! FGM
1075
	fmuls	%f2, M8, %f6		! FGM	Group
1076
	fmuls	%f1, M5, %f4		! FGM	Group
1077
	fmuls	%f2, M9, %f7		! FGM	Group
1078
	fmuls	%f2, M10, %f5		! FGM	Group	f3 available
1079
	fadds	%f3, %f6, %f3		! FGA	Group	f6 available
1080
	st	%f3, [%g2 + 0x00]	! LSU
1081
	fadds	%f4, %f7, %f4		! FGA	Group	stall, f4, f7 available
1082
	st	%f4, [%g2 + 0x04]	! LSU
1083
	fadds	%f5, M14, %f5		! FGA	Group
1084
	st	%f5, [%g2 + 0x08]	! LSU
1085
	fnegs	%f2, %f6		! FGA	Group
1086
	st	%f6, [%g2 + 0x0c]	! LSU
1087
	cmp	%o1, %g3		! IEU1
1088
	bne	1b			! CTI
1089
	 add	%g2, 0x10, %g2		! IEU0	Group
1090
2:
1091
	ba	__set_v4f_4
1092
	 nop
1093
1094
 
1095
_mesa_sparc_transform_points4_general:
1096
	ld	[%o2 + V4F_STRIDE], %o5
1097
	LDPTR	[%o2 + V4F_START], %g1
1098
	LDPTR	[%o0 + V4F_START], %g2
1099
	ld	[%o2 + V4F_COUNT], %g3
1100
1101
 
1102
1103
 
1104
	st	%g3, [%o0 + V4F_COUNT]
1105
	be	2f
1106
	 clr	%o1
1107
1108
 
1109
	ld	[%g1 + 0x04], %f1	! LSU	Group
1110
	ld	[%g1 + 0x08], %f2	! LSU	Group
1111
	ld	[%g1 + 0x0c], %f3	! LSU	Group
1112
	add	%o1, 1, %o1		! IEU0
1113
	add	%g1, %o5, %g1		! IEU1
1114
	fmuls	%f0, M0, %f4		! FGM	Group
1115
	fmuls	%f1, M4, %f8		! FGM	Group
1116
	fmuls	%f0, M1, %f5		! FGM	Group
1117
	fmuls	%f1, M5, %f9		! FGM	Group
1118
	fmuls	%f0, M2, %f6		! FGM	Group	f4 available
1119
	fmuls	%f1, M6, %f10		! FGM	Group	f8 available
1120
	fadds	%f4, %f8, %f4		! FGA
1121
	fmuls	%f0, M3, %f7		! FGM	Group	f5 available
1122
	fmuls	%f1, M7, %f11		! FGM	Group	f9 available
1123
	fadds	%f5, %f9, %f5		! FGA
1124
	fmuls	%f2, M8, %f12		! FGM	Group	f6 available
1125
	fmuls	%f2, M9, %f13		! FGM	Group	f10, f4 available
1126
	fadds	%f6, %f10, %f6		! FGA
1127
	fmuls	%f2, M10, %f14		! FGM	Group	f7 available
1128
	fmuls	%f2, M11, %f15		! FGM	Group	f11, f5 available
1129
	fadds	%f7, %f11, %f7		! FGA
1130
	fmuls	%f3, M12, %f8		! FGM	Group	f12 available
1131
	fadds	%f4, %f12, %f4		! FGA
1132
	fmuls	%f3, M13, %f9		! FGM	Group	f13, f6 available
1133
	fadds	%f5, %f13, %f5		! FGA
1134
	fmuls	%f3, M14, %f10		! FGM	Group	f14 available
1135
	fadds	%f6, %f14, %f6		! FGA
1136
	fmuls	%f3, M15, %f11		! FGM	Group	f15, f7 available
1137
	fadds	%f7, %f15, %f7		! FGA
1138
	fadds	%f4, %f8, %f4		! FGA	Group	f8, f4 available
1139
	st	%f4, [%g2 + 0x00]	! LSU
1140
	fadds	%f5, %f9, %f5		! FGA	Group	f9, f5 available
1141
	st	%f5, [%g2 + 0x04]	! LSU
1142
	fadds	%f6, %f10, %f6		! FGA	Group	f10, f6 available
1143
	st	%f6, [%g2 + 0x08]	! LSU
1144
	fadds	%f7, %f11, %f7		! FGA	Group	f11, f7 available
1145
	st	%f7, [%g2 + 0x0c]	! LSU
1146
	cmp	%o1, %g3		! IEU1
1147
	bne	1b			! CTI
1148
	 add	%g2, 0x10, %g2		! IEU0	Group
1149
2:
1150
	ba	__set_v4f_4
1151
	 nop
1152
1153
 
1154
_mesa_sparc_transform_points4_identity:
1155
	ld	[%o2 + V4F_STRIDE], %o5
1156
	LDPTR	[%o2 + V4F_START], %g1
1157
	LDPTR	[%o0 + V4F_START], %g2
1158
	ld	[%o2 + V4F_COUNT], %g3
1159
1160
 
1161
	st	%g3, [%o0 + V4F_COUNT]
1162
	be	2f
1163
	 clr	%o1
1164
1165
 
1166
	ld	[%g1 + 0x04], %f1
1167
	ld	[%g1 + 0x08], %f2
1168
	add	%o1, 1, %o1
1169
	ld	[%g1 + 0x0c], %f3
1170
	add	%g1, %o5, %g1
1171
	st	%f0, [%g2 + 0x00]
1172
	st	%f1, [%g2 + 0x04]
1173
	st	%f2, [%g2 + 0x08]
1174
	cmp	%o1, %g3
1175
	st	%f3, [%g2 + 0x0c]
1176
	bne	1b
1177
	 add	%g2, 0x10, %g2
1178
2:
1179
	ba	__set_v4f_4
1180
	 nop
1181
1182
 
1183
_mesa_sparc_transform_points4_2d:
1184
	ld	[%o2 + V4F_STRIDE], %o5
1185
	LDPTR	[%o2 + V4F_START], %g1
1186
	LDPTR	[%o0 + V4F_START], %g2
1187
	ld	[%o2 + V4F_COUNT], %g3
1188
1189
 
1190
1191
 
1192
	st	%g3, [%o0 + V4F_COUNT]
1193
	be	2f
1194
	 clr	%o1
1195
1196
 
1197
	ld	[%g1 + 0x04], %f1	! LSU	Group
1198
	ld	[%g1 + 0x08], %f2	! LSU	Group
1199
	ld	[%g1 + 0x0c], %f3	! LSU	Group
1200
	add	%o1, 1, %o1		! IEU0
1201
	add	%g1, %o5, %g1		! IEU1
1202
	fmuls	%f0, M0, %f4		! FGM
1203
	fmuls	%f1, M4, %f8		! FGM	Group
1204
	fmuls	%f0, M1, %f5		! FGM	Group
1205
	fmuls	%f1, M5, %f9		! FGM	Group	f4 available
1206
	fmuls	%f3, M12, %f12		! FGM	Group
1207
	fmuls	%f3, M13, %f13		! FGM	Group	f8 available
1208
	fadds	%f4, %f8, %f4		! FGA
1209
	fadds	%f5, %f9, %f5		! FGA	Group	stall, f5, f9 available
1210
	fadds	%f4, %f12, %f4		! FGA	Group	2 cycle stall, f4, f12, f13 avail
1211
	st	%f4, [%g2 + 0x00]	! LSU
1212
	fadds	%f5, %f13, %f5		! FGA	Group	f5 available
1213
	st	%f5, [%g2 + 0x04]	! LSU
1214
	st	%f2, [%g2 + 0x08]	! LSU	Group
1215
	st	%f3, [%g2 + 0x0c]	! LSU	Group
1216
	cmp	%o1, %g3		! IEU1
1217
	bne	1b			! CTI
1218
	 add	%g2, 0x10, %g2		! IEU0	Group
1219
2:
1220
	ba	__set_v4f_4
1221
	 nop
1222
1223
 
1224
_mesa_sparc_transform_points4_2d_no_rot:
1225
	ld	[%o2 + V4F_STRIDE], %o5
1226
	LDPTR	[%o2 + V4F_START], %g1
1227
	LDPTR	[%o0 + V4F_START], %g2
1228
	ld	[%o2 + V4F_COUNT], %g3
1229
1230
 
1231
1232
 
1233
	st	%g3, [%o0 + V4F_COUNT]
1234
	be	2f
1235
	 clr	%o1
1236
1237
 
1238
	ld	[%g1 + 0x04], %f1
1239
	ld	[%g1 + 0x08], %f2
1240
	ld	[%g1 + 0x0c], %f3
1241
	add	%o1, 1, %o1
1242
	add	%g1, %o5, %g1
1243
	fmuls	%f0, M0, %f4
1244
	fmuls	%f3, M12, %f8
1245
	fmuls	%f1, M5, %f5
1246
	fmuls	%f3, M13, %f9
1247
	fadds	%f4, %f8, %f4
1248
	st	%f4, [%g2 + 0x00]
1249
	fadds	%f5, %f9, %f5
1250
	st	%f5, [%g2 + 0x04]
1251
	st	%f2, [%g2 + 0x08]
1252
	st	%f3, [%g2 + 0x0c]
1253
	cmp	%o1, %g3
1254
	bne	1b
1255
	 add	%g2, 0x10, %g2
1256
2:
1257
	ba	__set_v4f_4
1258
	 nop
1259
1260
 
1261
_mesa_sparc_transform_points4_3d:
1262
	ld	[%o2 + V4F_STRIDE], %o5
1263
	LDPTR	[%o2 + V4F_START], %g1
1264
	LDPTR	[%o0 + V4F_START], %g2
1265
	ld	[%o2 + V4F_COUNT], %g3
1266
1267
 
1268
1269
 
1270
	st	%g3, [%o0 + V4F_COUNT]
1271
	be	2f
1272
	 clr	%o1
1273
1274
 
1275
	ld	[%g1 + 0x04], %f1	! LSU	Group
1276
	ld	[%g1 + 0x08], %f2	! LSU	Group
1277
	ld	[%g1 + 0x0c], %f3	! LSU	Group
1278
	add	%o1, 1, %o1		! IEU0
1279
	add	%g1, %o5, %g1		! IEU1
1280
	fmuls	%f0, M0, %f4		! FGM
1281
	fmuls	%f1, M4, %f7		! FGM	Group
1282
	fmuls	%f0, M1, %f5		! FGM	Group
1283
	fmuls	%f1, M5, %f8		! FGM	Group
1284
	fmuls	%f0, M2, %f6		! FGM	Group	f4 available
1285
	fmuls	%f1, M6, %f9		! FGM	Group	f7 available
1286
	fadds	%f4, %f7, %f4		! FGA
1287
	fmuls	%f2, M8, %f10		! FGM	Group	f5 available
1288
	fmuls	%f2, M9, %f11		! FGM	Group	f8 available
1289
	fadds	%f5, %f8, %f5		! FGA
1290
	fmuls	%f2, M10, %f12		! FGM	Group	f6 available
1291
	fmuls	%f3, M12, %f13		! FGM	Group	f9, f4 available
1292
	fadds	%f6, %f9, %f6		! FGA
1293
	fmuls	%f3, M13, %f14		! FGM	Group	f10 available
1294
	fadds	%f4, %f10, %f4		! FGA
1295
	fmuls	%f3, M14, %f15		! FGM	Group	f11, f5 available
1296
	fadds	%f5, %f11, %f5		! FGA
1297
	fadds	%f6, %f12, %f6		! FGA	Group	stall, f12, f13, f6 available
1298
	fadds	%f4, %f13, %f4		! FGA	Group	f14, f4 available
1299
	st	%f4, [%g2 + 0x00]	! LSU
1300
	fadds	%f5, %f14, %f5		! FGA	Group	f15, f5 available
1301
	st	%f5, [%g2 + 0x04]	! LSU
1302
	fadds	%f6, %f15, %f6		! FGA	Group	f6 available
1303
	st	%f6, [%g2 + 0x08]	! LSU
1304
	st	%f3, [%g2 + 0x0c]	! LSU	Group
1305
	cmp	%o1, %g3		! IEU1
1306
	bne	1b			! CTI
1307
	 add	%g2, 0x10, %g2		! IEU0	Group
1308
2:
1309
	ba	__set_v4f_4
1310
	 nop
1311
1312
 
1313
_mesa_sparc_transform_points4_3d_no_rot:
1314
	ld	[%o2 + V4F_STRIDE], %o5
1315
	LDPTR	[%o2 + V4F_START], %g1
1316
	LDPTR	[%o0 + V4F_START], %g2
1317
	ld	[%o2 + V4F_COUNT], %g3
1318
1319
 
1320
1321
 
1322
	st	%g3, [%o0 + V4F_COUNT]
1323
	be	2f
1324
	 clr	%o1
1325
1326
 
1327
	ld	[%g1 + 0x04], %f1	! LSU	Group
1328
	ld	[%g1 + 0x08], %f2	! LSU	Group
1329
	ld	[%g1 + 0x0c], %f3	! LSU	Group
1330
	add	%o1, 1, %o1		! IEU0
1331
	add	%g1, %o5, %g1		! IEU1
1332
	fmuls	%f0, M0, %f4		! FGM
1333
	fmuls	%f3, M12, %f7		! FGM	Group
1334
	fmuls	%f1, M5, %f5		! FGM	Group
1335
	fmuls	%f3, M13, %f8		! FGM	Group
1336
	fmuls	%f2, M10, %f6		! FGM	Group	f4 available
1337
	fmuls	%f3, M14, %f9		! FGM	Group	f7 available
1338
	fadds	%f4, %f7, %f4		! FGA
1339
	st	%f4, [%g2 + 0x00]	! LSU
1340
	fadds	%f5, %f8, %f5		! FGA	Group	stall, f5, f8 available
1341
	st	%f5, [%g2 + 0x04]	! LSU
1342
	fadds	%f6, %f9, %f6		! FGA	Group	stall, f6, f9 available
1343
	st	%f6, [%g2 + 0x08]	! LSU
1344
	st	%f3, [%g2 + 0x0c]	! LSU	Group
1345
	cmp	%o1, %g3		! IEU1
1346
	bne	1b			! CTI
1347
	 add	%g2, 0x10, %g2		! IEU0	Group
1348
2:
1349
	ba	__set_v4f_4
1350
	 nop
1351
1352
 
1353
_mesa_sparc_transform_points4_perspective:
1354
	ld	[%o2 + V4F_STRIDE], %o5
1355
	LDPTR	[%o2 + V4F_START], %g1
1356
	LDPTR	[%o0 + V4F_START], %g2
1357
	ld	[%o2 + V4F_COUNT], %g3
1358
1359
 
1360
1361
 
1362
	st	%g3, [%o0 + V4F_COUNT]
1363
	be	2f
1364
	 clr	%o1
1365
1366
 
1367
	ld	[%g1 + 0x04], %f1	! LSU	Group
1368
	ld	[%g1 + 0x08], %f2	! LSU	Group
1369
	ld	[%g1 + 0x0c], %f3	! LSU	Group
1370
	add	%o1, 1, %o1		! IEU0
1371
	add	%g1, %o5, %g1		! IEU1
1372
	fmuls	%f0, M0, %f4		! FGM
1373
	fmuls	%f2, M8, %f7		! FGM	Group
1374
	fmuls	%f1, M5, %f5		! FGM	Group
1375
	fmuls	%f2, M9, %f8		! FGM	Group
1376
	fmuls	%f2, M10, %f6		! FGM	Group	f4 available
1377
	fmuls	%f3, M14, %f9		! FGM	Group	f7 available
1378
	fadds	%f4, %f7, %f4		! FGA
1379
	st	%f4, [%g2 + 0x00]	! LSU
1380
	fadds	%f5, %f8, %f5		! FGA	Group	stall, f5, f8 available
1381
	st	%f5, [%g2 + 0x04]	! LSU
1382
	fadds	%f6, %f9, %f6		! FGA	Group	stall, f6, f9 available
1383
	st	%f6, [%g2 + 0x08]	! LSU
1384
	fnegs	%f2, %f7		! FGA	Group
1385
	st	%f7, [%g2 + 0x0c]	! LSU
1386
	cmp	%o1, %g3		! IEU1
1387
	bne	1b			! CTI
1388
	 add	%g2, 0x10, %g2		! IEU0	Group
1389
2:
1390
	ba	__set_v4f_4
1391
	 nop
1392