1848b8605Smrg
2848b8605Smrg	/* TODO
3848b8605Smrg	 *
4848b8605Smrg	 * 1) It would be nice if load/store double could be used
5848b8605Smrg	 *    at least for the matrix parts.  I think for the matrices
6848b8605Smrg	 *    it is safe, but for the vertices it probably is not due to
7848b8605Smrg	 *    things like glInterleavedArrays etc.
8848b8605Smrg	 *
9848b8605Smrg	 *    UPDATE: Trying this now in sparc_matrix.h -DaveM_990624
10848b8605Smrg	 *
11848b8605Smrg	 * 2) One extremely slick trick would be if we could enclose
12848b8605Smrg	 *    groups of xform calls on the same vertices such that
13848b8605Smrg	 *    we just load the matrix into f16-->f31 before the calls
14848b8605Smrg	 *    and then we would not have to do them here.  This may be
15848b8605Smrg	 *    tricky and not much of a gain though.
16848b8605Smrg	 */
17848b8605Smrg
18848b8605Smrg#include "sparc_matrix.h"
19848b8605Smrg
20848b8605Smrg#if defined(SVR4) || defined(__SVR4) || defined(__svr4__) || defined(__arch64__)
21848b8605Smrg	/* Solaris requires this for 64-bit. */
22848b8605Smrg        .register %g2, #scratch
23848b8605Smrg        .register %g3, #scratch
24848b8605Smrg#endif
25848b8605Smrg
26848b8605Smrg	.text
27848b8605Smrg	.align	64
28848b8605Smrg
29848b8605Smrg__set_v4f_1:
30848b8605Smrg	ld	[%o0 + V4F_FLAGS], %g2
31848b8605Smrg	mov	1, %g1
32848b8605Smrg	st	%g1, [%o0 + V4F_SIZE]
33848b8605Smrg	or	%g2, VEC_SIZE_1, %g2
34848b8605Smrg	retl
35848b8605Smrg	 st	%g2, [%o0 + V4F_FLAGS]
36848b8605Smrg__set_v4f_2:
37848b8605Smrg	ld	[%o0 + V4F_FLAGS], %g2
38848b8605Smrg	mov	2, %g1
39848b8605Smrg	st	%g1, [%o0 + V4F_SIZE]
40848b8605Smrg	or	%g2, VEC_SIZE_2, %g2
41848b8605Smrg	retl
42848b8605Smrg	 st	%g2, [%o0 + V4F_FLAGS]
43848b8605Smrg__set_v4f_3:
44848b8605Smrg	ld	[%o0 + V4F_FLAGS], %g2
45848b8605Smrg	mov	3, %g1
46848b8605Smrg	st	%g1, [%o0 + V4F_SIZE]
47848b8605Smrg	or	%g2, VEC_SIZE_3, %g2
48848b8605Smrg	retl
49848b8605Smrg	 st	%g2, [%o0 + V4F_FLAGS]
50848b8605Smrg__set_v4f_4:
51848b8605Smrg	ld	[%o0 + V4F_FLAGS], %g2
52848b8605Smrg	mov	4, %g1
53848b8605Smrg	st	%g1, [%o0 + V4F_SIZE]
54848b8605Smrg	or	%g2, VEC_SIZE_4, %g2
55848b8605Smrg	retl
56848b8605Smrg	 st	%g2, [%o0 + V4F_FLAGS]
57848b8605Smrg
58848b8605Smrg	/* First the raw versions. */
59848b8605Smrg
60848b8605Smrg	.globl	_mesa_sparc_transform_points1_general
61848b8605Smrg_mesa_sparc_transform_points1_general:
62848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
63848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
64848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
65848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
66848b8605Smrg
67848b8605Smrg	LDMATRIX_0_1_2_3_12_13_14_15(%o1)
68848b8605Smrg
69848b8605Smrg	cmp	%g3, 1
70848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
71848b8605Smrg	bl	3f
72848b8605Smrg	 clr	%o1
73848b8605Smrg
74848b8605Smrg	be	2f
75848b8605Smrg	 andn	%g3, 1, %o2
76848b8605Smrg
77848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
78848b8605Smrg	add	%g1, %o5, %g1		! IEU0
79848b8605Smrg	ld	[%g1 + 0x00], %f8	! LSU	Group
80848b8605Smrg	add	%o1, 2, %o1		! IEU0
81848b8605Smrg	add	%g1, %o5, %g1		! IEU1
82848b8605Smrg	fmuls	%f0, M0, %f1		! FGM	Group	1-cycle stall on %f0
83848b8605Smrg	fmuls	%f0, M1, %f2		! FGM	Group
84848b8605Smrg	fmuls	%f0, M2, %f3		! FGM	Group
85848b8605Smrg	fmuls	%f0, M3, %f4		! FGM	Group
86848b8605Smrg	fmuls	%f8, M0, %f9		! FGM	Group	f1 available
87848b8605Smrg	fadds	%f1, M12, %f1		! FGA
88848b8605Smrg	st	%f1, [%g2 + 0x00]	! LSU
89848b8605Smrg	fmuls	%f8, M1, %f10		! FGM	Group	f2 available
90848b8605Smrg	fadds	%f2, M13, %f2		! FGA
91848b8605Smrg	st	%f2, [%g2 + 0x04]	! LSU
92848b8605Smrg	fmuls	%f8, M2, %f11		! FGM	Group	f3 available
93848b8605Smrg	fadds	%f3, M14, %f3		! FGA
94848b8605Smrg	st	%f3, [%g2 + 0x08]	! LSU
95848b8605Smrg	fmuls	%f8, M3, %f12		! FGM	Group	f4 available
96848b8605Smrg	fadds	%f4, M15, %f4		! FGA
97848b8605Smrg	st	%f4, [%g2 + 0x0c]	! LSU
98848b8605Smrg	fadds	%f9, M12, %f9		! FGA	Group	f9 available
99848b8605Smrg	st	%f9, [%g2 + 0x10]	! LSU
100848b8605Smrg	fadds	%f10, M13, %f10		! FGA	Group	f10 available
101848b8605Smrg	st	%f10, [%g2 + 0x14]	! LSU
102848b8605Smrg	fadds	%f11, M14, %f11		! FGA	Group	f11 available
103848b8605Smrg	st	%f11, [%g2 + 0x18]	! LSU
104848b8605Smrg	fadds	%f12, M15, %f12		! FGA	Group	f12 available
105848b8605Smrg	st	%f12, [%g2 + 0x1c]	! LSU
106848b8605Smrg	cmp	%o1, %o2		! IEU1
107848b8605Smrg	bne	1b			! CTI
108848b8605Smrg	 add	%g2, 0x20, %g2		! IEU0	Group
109848b8605Smrg
110848b8605Smrg	cmp	%o1, %g3
111848b8605Smrg	be	3f
112848b8605Smrg	 nop
113848b8605Smrg
114848b8605Smrg2:	ld	[%g1 + 0x00], %f0	! LSU	Group
115848b8605Smrg	fmuls	%f0, M0, %f1		! FGM	Group	1-cycle stall on %f0
116848b8605Smrg	fmuls	%f0, M1, %f2		! FGM	Group
117848b8605Smrg	fmuls	%f0, M2, %f3		! FGM	Group
118848b8605Smrg	fmuls	%f0, M3, %f4		! FGM	Group
119848b8605Smrg	fadds	%f1, M12, %f1		! FGA	Group
120848b8605Smrg	st	%f1, [%g2 + 0x00]	! LSU
121848b8605Smrg	fadds	%f2, M13, %f2		! FGA	Group
122848b8605Smrg	st	%f2, [%g2 + 0x04]	! LSU
123848b8605Smrg	fadds	%f3, M14, %f3		! FGA	Group
124848b8605Smrg	st	%f3, [%g2 + 0x08]	! LSU
125848b8605Smrg	fadds	%f4, M15, %f4		! FGA	Group
126848b8605Smrg	st	%f4, [%g2 + 0x0c]	! LSU
127848b8605Smrg
128848b8605Smrg3:
129848b8605Smrg	ba	__set_v4f_4
130848b8605Smrg	 nop
131848b8605Smrg
132848b8605Smrg	.globl	_mesa_sparc_transform_points1_identity
133848b8605Smrg_mesa_sparc_transform_points1_identity:
134848b8605Smrg	cmp	%o0, %o2
135848b8605Smrg	be	4f
136848b8605Smrg	 ld	[%o2 + V4F_STRIDE], %o5
137848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
138848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
139848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
140848b8605Smrg
141848b8605Smrg	cmp	%g3, 1
142848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
143848b8605Smrg	bl	3f
144848b8605Smrg	 clr	%o1
145848b8605Smrg
146848b8605Smrg	be	2f
147848b8605Smrg	 andn	%g3, 1, %o2
148848b8605Smrg
149848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
150848b8605Smrg	add	%g1, %o5, %g1		! IEU0
151848b8605Smrg	ld	[%g1 + 0x00], %f1	! LSU	Group
152848b8605Smrg	add	%o1, 2, %o1		! IEU0
153848b8605Smrg	add	%g1, %o5, %g1		! IEU1
154848b8605Smrg	st	%f0, [%g2 + 0x00]	! LSU	Group
155848b8605Smrg	cmp	%o1, %o2		! IEU1
156848b8605Smrg	st	%f1, [%g2 + 0x10]	! LSU	Group
157848b8605Smrg	bne	1b			! CTI
158848b8605Smrg	 add	%g2, 0x20, %g2		! IEU0
159848b8605Smrg
160848b8605Smrg	cmp	%o1, %g3
161848b8605Smrg	be	3f
162848b8605Smrg	 nop
163848b8605Smrg
164848b8605Smrg2:	ld	[%g1 + 0x00], %f0
165848b8605Smrg	addx	%g0, %g0, %g0
166848b8605Smrg	st	%f0, [%g2 + 0x00]
167848b8605Smrg
168848b8605Smrg3:
169848b8605Smrg	ba	__set_v4f_1
170848b8605Smrg	 nop
171848b8605Smrg
172848b8605Smrg4:	retl
173848b8605Smrg	 nop
174848b8605Smrg
175848b8605Smrg	.globl	_mesa_sparc_transform_points1_2d
176848b8605Smrg_mesa_sparc_transform_points1_2d:
177848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
178848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
179848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
180848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
181848b8605Smrg
182848b8605Smrg	LDMATRIX_0_1_12_13(%o1)
183848b8605Smrg
184848b8605Smrg	cmp	%g3, 1
185848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
186848b8605Smrg	bl	3f
187848b8605Smrg	 clr	%o1
188848b8605Smrg
189848b8605Smrg	be	2f
190848b8605Smrg	 andn	%g3, 1, %o2
191848b8605Smrg
192848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
193848b8605Smrg	add	%g1, %o5, %g1		! IEU0
194848b8605Smrg	ld	[%g1 + 0x00], %f8	! LSU	Group
195848b8605Smrg	add	%o1, 2, %o1		! IEU0
196848b8605Smrg	add	%g1, %o5, %g1		! IEU1
197848b8605Smrg	fmuls	%f0, M0, %f1		! FGM	Group
198848b8605Smrg	fmuls	%f0, M1, %f2		! FGM	Group
199848b8605Smrg	fmuls	%f8, M0, %f9		! FGM	Group
200848b8605Smrg	fmuls	%f8, M1, %f10		! FGM	Group
201848b8605Smrg	fadds	%f1, M12, %f3		! FGA	Group	f1 available
202848b8605Smrg	st	%f3, [%g2 + 0x00]	! LSU
203848b8605Smrg	fadds	%f2, M13, %f4		! FGA	Group	f2 available
204848b8605Smrg	st	%f4, [%g2 + 0x04]	! LSU
205848b8605Smrg	fadds	%f9, M12, %f11		! FGA	Group	f9 available
206848b8605Smrg	st	%f11, [%g2 + 0x10]	! LSU
207848b8605Smrg	fadds	%f10, M13, %f12		! FGA	Group	f10 available
208848b8605Smrg	st	%f12, [%g2 + 0x14]	! LSU
209848b8605Smrg	cmp	%o1, %o2		! IEU1
210848b8605Smrg	bne	1b			! CTI
211848b8605Smrg	 add	%g2, 0x20, %g2		! IEU0	Group
212848b8605Smrg
213848b8605Smrg	cmp	%o1, %g3
214848b8605Smrg	be	3f
215848b8605Smrg	 nop
216848b8605Smrg
217848b8605Smrg2:	ld	[%g1 + 0x00], %f0
218848b8605Smrg	fmuls	%f0, M0, %f1
219848b8605Smrg	fmuls	%f0, M1, %f2
220848b8605Smrg	fadds	%f1, M12, %f3
221848b8605Smrg	st	%f3, [%g2 + 0x00]
222848b8605Smrg	fadds	%f2, M13, %f4
223848b8605Smrg	st	%f4, [%g2 + 0x04]
224848b8605Smrg
225848b8605Smrg3:
226848b8605Smrg	ba	__set_v4f_2
227848b8605Smrg	 nop
228848b8605Smrg
229848b8605Smrg	.globl	_mesa_sparc_transform_points1_2d_no_rot
230848b8605Smrg_mesa_sparc_transform_points1_2d_no_rot:
231848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
232848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
233848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
234848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
235848b8605Smrg
236848b8605Smrg	LDMATRIX_0_12_13(%o1)
237848b8605Smrg
238848b8605Smrg	cmp	%g3, 1
239848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
240848b8605Smrg	bl	3f
241848b8605Smrg	 clr	%o1
242848b8605Smrg
243848b8605Smrg	be	2f
244848b8605Smrg	 andn	%g3, 1, %o2
245848b8605Smrg
246848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
247848b8605Smrg	add	%g1, %o5, %g1		! IEU0
248848b8605Smrg	ld	[%g1 + 0x00], %f4	! LSU	Group
249848b8605Smrg	add	%o1, 2, %o1		! IEU0
250848b8605Smrg	add	%g1, %o5, %g1		! IEU1
251848b8605Smrg	fmuls	%f0, M0, %f1		! FGM	Group
252848b8605Smrg	fmuls	%f4, M0, %f5		! FGM	Group
253848b8605Smrg	fadds	%f1, M12, %f3		! FGA	Group, 2 cycle stall, f1 available
254848b8605Smrg	st	%f3, [%g2 + 0x00]	! LSU
255848b8605Smrg	st	M13, [%g2 + 0x04]	! LSU	Group, f5 available
256848b8605Smrg	fadds	%f5, M12, %f6		! FGA
257848b8605Smrg	st	%f6, [%g2 + 0x10]	! LSU	Group
258848b8605Smrg	st	M13, [%g2 + 0x14]	! LSU	Group
259848b8605Smrg	cmp	%o1, %o2		! IEU1
260848b8605Smrg	bne	1b			! CTI
261848b8605Smrg	 add	%g2, 0x20, %g2		! IEU0	Group
262848b8605Smrg
263848b8605Smrg	cmp	%o1, %g3
264848b8605Smrg	be	3f
265848b8605Smrg	 nop
266848b8605Smrg
267848b8605Smrg2:	ld	[%g1 + 0x00], %f0
268848b8605Smrg	fmuls	%f0, M0, %f1
269848b8605Smrg	fadds	%f1, M12, %f3
270848b8605Smrg	st	%f3, [%g2 + 0x00]
271848b8605Smrg	st	M13, [%g2 + 0x04]
272848b8605Smrg
273848b8605Smrg3:
274848b8605Smrg	ba	__set_v4f_2
275848b8605Smrg	 nop
276848b8605Smrg
277848b8605Smrg	.globl	_mesa_sparc_transform_points1_3d
278848b8605Smrg_mesa_sparc_transform_points1_3d:
279848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
280848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
281848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
282848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
283848b8605Smrg
284848b8605Smrg	LDMATRIX_0_1_2_12_13_14(%o1)
285848b8605Smrg
286848b8605Smrg	cmp	%g3, 1
287848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
288848b8605Smrg	bl	3f
289848b8605Smrg	 clr	%o1
290848b8605Smrg
291848b8605Smrg	be	2f
292848b8605Smrg	 andn	%g3, 1, %o2
293848b8605Smrg
294848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
295848b8605Smrg	add	%g1, %o5, %g1		! IEU0
296848b8605Smrg	ld	[%g1 + 0x00], %f4	! LSU	Group
297848b8605Smrg	add	%o1, 2, %o1		! IEU0
298848b8605Smrg	add	%g1, %o5, %g1		! IEU1
299848b8605Smrg	fmuls	%f0, M0, %f1		! FGM	Group
300848b8605Smrg	fmuls	%f0, M1, %f2		! FGM	Group
301848b8605Smrg	fmuls	%f0, M2, %f3		! FGM	Group
302848b8605Smrg	fmuls	%f4, M0, %f5		! FGM	Group
303848b8605Smrg	fadds	%f1, M12, %f1		! FGA	Group, f1 available
304848b8605Smrg	st	%f1, [%g2 + 0x00]	! LSU
305848b8605Smrg	fmuls	%f4, M1, %f6		! FGM
306848b8605Smrg	fadds	%f2, M13, %f2		! FGA	Group, f2 available
307848b8605Smrg	st	%f2, [%g2 + 0x04]	! LSU
308848b8605Smrg	fmuls	%f4, M2, %f7		! FGM
309848b8605Smrg	fadds	%f3, M14, %f3		! FGA	Group, f3 available
310848b8605Smrg	st	%f3, [%g2 + 0x08]	! LSU
311848b8605Smrg	fadds	%f5, M12, %f5		! FGA	Group, f5 available
312848b8605Smrg	st	%f5, [%g2 + 0x10]	! LSU
313848b8605Smrg	fadds	%f6, M13, %f6		! FGA	Group, f6 available
314848b8605Smrg	st	%f6, [%g2 + 0x14]	! LSU
315848b8605Smrg	fadds	%f7, M14, %f7		! FGA	Group, f7 available
316848b8605Smrg	st	%f7, [%g2 + 0x18]	! LSU
317848b8605Smrg	cmp	%o1, %o2		! IEU1
318848b8605Smrg	bne	1b			! CTI
319848b8605Smrg	 add	%g2, 0x20, %g2		! IEU0	Group
320848b8605Smrg
321848b8605Smrg	cmp	%o1, %g3
322848b8605Smrg	be	3f
323848b8605Smrg	 nop
324848b8605Smrg
325848b8605Smrg2:	ld	[%g1 + 0x00], %f0
326848b8605Smrg	fmuls	%f0, M0, %f1
327848b8605Smrg	fmuls	%f0, M1, %f2
328848b8605Smrg	fmuls	%f0, M2, %f3
329848b8605Smrg	fadds	%f1, M12, %f1
330848b8605Smrg	st	%f1, [%g2 + 0x00]
331848b8605Smrg	fadds	%f2, M13, %f2
332848b8605Smrg	st	%f2, [%g2 + 0x04]
333848b8605Smrg	fadds	%f3, M14, %f3
334848b8605Smrg	st	%f3, [%g2 + 0x08]
335848b8605Smrg
336848b8605Smrg3:
337848b8605Smrg	ba	__set_v4f_3
338848b8605Smrg	 nop
339848b8605Smrg
340848b8605Smrg	.globl	_mesa_sparc_transform_points1_3d_no_rot
341848b8605Smrg_mesa_sparc_transform_points1_3d_no_rot:
342848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
343848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
344848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
345848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
346848b8605Smrg
347848b8605Smrg	LDMATRIX_0_12_13_14(%o1)
348848b8605Smrg
349848b8605Smrg	cmp	%g3, 1
350848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
351848b8605Smrg	bl	3f
352848b8605Smrg	 clr	%o1
353848b8605Smrg
354848b8605Smrg	be	2f
355848b8605Smrg	 andn	%g3, 1, %o2
356848b8605Smrg
357848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
358848b8605Smrg	add	%g1, %o5, %g1		! IEU0
359848b8605Smrg	ld	[%g1 + 0x00], %f2	! LSU	Group
360848b8605Smrg	add	%o1, 2, %o1		! IEU0
361848b8605Smrg	add	%g1, %o5, %g1		! IEU1
362848b8605Smrg	fmuls	%f0, M0, %f1		! FGM	Group
363848b8605Smrg	fmuls	%f2, M0, %f3		! FGM	Group
364848b8605Smrg	fadds	%f1, M12, %f1		! FGA	Group, 2 cycle stall, f1 available
365848b8605Smrg	st	%f1, [%g2 + 0x00]	! LSU
366848b8605Smrg	fadds	%f3, M12, %f3		! FGA	Group, f3 available
367848b8605Smrg	st	M13, [%g2 + 0x04]	! LSU
368848b8605Smrg	st	M14, [%g2 + 0x08]	! LSU	Group
369848b8605Smrg	st	%f3, [%g2 + 0x10]	! LSU	Group
370848b8605Smrg	st	M13, [%g2 + 0x14]	! LSU	Group
371848b8605Smrg	st	M14, [%g2 + 0x18]	! LSU	Group
372848b8605Smrg	cmp	%o1, %o2		! IEU1
373848b8605Smrg	bne	1b			! CTI
374848b8605Smrg	 add	%g2, 0x20, %g2		! IEU0	Group
375848b8605Smrg
376848b8605Smrg	cmp	%o1, %g3
377848b8605Smrg	be	3f
378848b8605Smrg	 nop
379848b8605Smrg
380848b8605Smrg2:	ld	[%g1 + 0x00], %f0
381848b8605Smrg	fmuls	%f0, M0, %f1
382848b8605Smrg	fadds	%f1, M12, %f1
383848b8605Smrg	st	%f1, [%g2 + 0x00]
384848b8605Smrg	st	M13, [%g2 + 0x04]
385848b8605Smrg	st	M14, [%g2 + 0x08]
386848b8605Smrg
387848b8605Smrg3:
388848b8605Smrg	ba	__set_v4f_3
389848b8605Smrg	 nop
390848b8605Smrg
391848b8605Smrg	.globl	_mesa_sparc_transform_points1_perspective
392848b8605Smrg_mesa_sparc_transform_points1_perspective:
393848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
394848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
395848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
396848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
397848b8605Smrg
398848b8605Smrg	LDMATRIX_0_14(%o1)
399848b8605Smrg
400848b8605Smrg	cmp	%g3, 1
401848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
402848b8605Smrg	bl	3f
403848b8605Smrg	 clr	%o1
404848b8605Smrg
405848b8605Smrg	be	2f
406848b8605Smrg	 andn	%g3, 1, %o2
407848b8605Smrg
408848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
409848b8605Smrg	add	%g1, %o5, %g1		! IEU0
410848b8605Smrg	ld	[%g1 + 0x00], %f2	! LSU	Group
411848b8605Smrg	add	%o1, 2, %o1		! IEU0
412848b8605Smrg	add	%g1, %o5, %g1		! IEU1
413848b8605Smrg	fmuls	%f0, M0, %f1		! FGM	Group
414848b8605Smrg	st	%f1, [%g2 + 0x00]	! LSU
415848b8605Smrg	fmuls	%f2, M0, %f3		! FGM	Group
416848b8605Smrg	st	%g0, [%g2 + 0x04]	! LSU
417848b8605Smrg	st	M14, [%g2 + 0x08]	! LSU	Group
418848b8605Smrg	st	%g0, [%g2 + 0x0c]	! LSU	Group
419848b8605Smrg	st	%f3, [%g2 + 0x10]	! LSU	Group
420848b8605Smrg	st	%g0, [%g2 + 0x14]	! LSU	Group
421848b8605Smrg	st	M14, [%g2 + 0x18]	! LSU	Group
422848b8605Smrg	st	%g0, [%g2 + 0x1c]	! LSU	Group
423848b8605Smrg	cmp	%o1, %o2		! IEU1
424848b8605Smrg	bne	1b			! CTI
425848b8605Smrg	 add	%g2, 0x20, %g2		! IEU0	Group
426848b8605Smrg
427848b8605Smrg	cmp	%o1, %g3
428848b8605Smrg	be	3f
429848b8605Smrg	 nop
430848b8605Smrg
431848b8605Smrg2:	ld	[%g1 + 0x00], %f0
432848b8605Smrg	fmuls	%f0, M0, %f1
433848b8605Smrg	st	%f1, [%g2 + 0x00]
434848b8605Smrg	st	%g0, [%g2 + 0x04]
435848b8605Smrg	st	M14, [%g2 + 0x08]
436848b8605Smrg	st	%g0, [%g2 + 0x0c]
437848b8605Smrg
438848b8605Smrg3:
439848b8605Smrg	ba	__set_v4f_4
440848b8605Smrg	 nop
441848b8605Smrg
442848b8605Smrg	.globl	_mesa_sparc_transform_points2_general
443848b8605Smrg_mesa_sparc_transform_points2_general:
444848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
445848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
446848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
447848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
448848b8605Smrg
449848b8605Smrg	LDMATRIX_0_1_2_3_4_5_6_7_12_13_14_15(%o1)
450848b8605Smrg
451848b8605Smrg	cmp	%g3, 0
452848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
453848b8605Smrg	be	2f
454848b8605Smrg	 clr	%o1
455848b8605Smrg
456848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
457848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
458848b8605Smrg	add	%o1, 1, %o1		! IEU0
459848b8605Smrg	add	%g1, %o5, %g1		! IEU1
460848b8605Smrg	fmuls	%f0, M0, %f2		! FGM	Group
461848b8605Smrg	fmuls	%f0, M1, %f3		! FGM	Group
462848b8605Smrg	fmuls	%f0, M2, %f4		! FGM	Group
463848b8605Smrg	fmuls	%f0, M3, %f5		! FGM	Group
464848b8605Smrg	fadds	%f2, M12, %f2		! FGA	Group	f2 available
465848b8605Smrg	fmuls	%f1, M4, %f6		! FGM
466848b8605Smrg	fadds	%f3, M13, %f3		! FGA	Group	f3 available
467848b8605Smrg	fmuls	%f1, M5, %f7		! FGM
468848b8605Smrg	fadds	%f4, M14, %f4		! FGA	Group	f4 available
469848b8605Smrg	fmuls	%f1, M6, %f8		! FGM
470848b8605Smrg	fadds	%f5, M15, %f5		! FGA	Group	f5 available
471848b8605Smrg	fmuls	%f1, M7, %f9		! FGM
472848b8605Smrg	fadds	%f2, %f6, %f2		! FGA	Group	f6 available
473848b8605Smrg	st	%f2, [%g2 + 0x00]	! LSU
474848b8605Smrg	fadds	%f3, %f7, %f3		! FGA	Group	f7 available
475848b8605Smrg	st	%f3, [%g2 + 0x04]	! LSU
476848b8605Smrg	fadds	%f4, %f8, %f4		! FGA	Group	f8 available
477848b8605Smrg	st	%f4, [%g2 + 0x08]	! LSU
478848b8605Smrg	fadds	%f5, %f9, %f5		! FGA	Group	f9 available
479848b8605Smrg	st	%f5, [%g2 + 0x0c]	! LSU
480848b8605Smrg	cmp	%o1, %g3		! IEU1
481848b8605Smrg	bne	1b			! CTI
482848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0	Group
483848b8605Smrg2:
484848b8605Smrg	ba	__set_v4f_4
485848b8605Smrg	 nop
486848b8605Smrg
487848b8605Smrg	.globl	_mesa_sparc_transform_points2_identity
488848b8605Smrg_mesa_sparc_transform_points2_identity:
489848b8605Smrg	cmp	%o2, %o0
490848b8605Smrg	be	3f
491848b8605Smrg	 ld	[%o2 + V4F_STRIDE], %o5
492848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
493848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
494848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
495848b8605Smrg
496848b8605Smrg	cmp	%g3, 0
497848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
498848b8605Smrg	be	2f
499848b8605Smrg	 clr	%o1
500848b8605Smrg
501848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
502848b8605Smrg	add	%o1, 1, %o1		! IEU0
503848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
504848b8605Smrg	add	%g1, %o5, %g1		! IEU0
505848b8605Smrg	cmp	%o1, %g3		! IEU1
506848b8605Smrg	st	%f0, [%g2 + 0x00]	! LSU	Group
507848b8605Smrg	st	%f1, [%g2 + 0x04]	! LSU	Group
508848b8605Smrg	bne	1b			! CTI
509848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0
510848b8605Smrg2:
511848b8605Smrg	ba	__set_v4f_2
512848b8605Smrg	 nop
513848b8605Smrg
514848b8605Smrg3:	retl
515848b8605Smrg	 nop
516848b8605Smrg
517848b8605Smrg	.globl	_mesa_sparc_transform_points2_2d
518848b8605Smrg_mesa_sparc_transform_points2_2d:
519848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
520848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
521848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
522848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
523848b8605Smrg
524848b8605Smrg	LDMATRIX_0_1_4_5_12_13(%o1)
525848b8605Smrg
526848b8605Smrg	cmp	%g3, 1
527848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
528848b8605Smrg	bl	3f
529848b8605Smrg	 clr	%o1
530848b8605Smrg
531848b8605Smrg	be	2f
532848b8605Smrg	 andn	%g3, 1, %o2
533848b8605Smrg
534848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
535848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
536848b8605Smrg	add	%o1, 2, %o1		! IEU0
537848b8605Smrg	add	%g1, %o5, %g1		! IEU1
538848b8605Smrg	fmuls	%f0, M0, %f2		! FGM
539848b8605Smrg	ld	[%g1 + 0x00], %f8	! LSU	Group
540848b8605Smrg	fmuls	%f0, M1, %f3		! FGM
541848b8605Smrg	ld	[%g1 + 0x04], %f9	! LSU	Group
542848b8605Smrg	fmuls	%f1, M4, %f6		! FGM
543848b8605Smrg	fmuls	%f1, M5, %f7		! FGM	Group
544848b8605Smrg	add	%g1, %o5, %g1		! IEU0
545848b8605Smrg	fmuls	%f8, M0, %f10		! FGM	Group	f2 available
546848b8605Smrg	fadds	%f2, M12, %f2		! FGA
547848b8605Smrg	fmuls	%f8, M1, %f11		! FGM	Group	f3 available
548848b8605Smrg	fadds	%f3, M13, %f3		! FGA
549848b8605Smrg	fmuls	%f9, M4, %f12		! FGM	Group
550848b8605Smrg	fmuls	%f9, M5, %f13		! FGM	Group
551848b8605Smrg	fadds	%f10, M12, %f10		! FGA	Group	f2, f10 available
552848b8605Smrg	fadds	%f2, %f6, %f2		! FGA	Group	f3, f11 available
553848b8605Smrg	st	%f2, [%g2 + 0x00]	! LSU
554848b8605Smrg	fadds	%f11, M13, %f11		! FGA	Group	f12 available
555848b8605Smrg	fadds	%f3, %f7, %f3		! FGA	Group	f13 available
556848b8605Smrg	st	%f3, [%g2 + 0x04]	! LSU
557848b8605Smrg	fadds	%f10, %f12, %f10	! FGA	Group	f10 available
558848b8605Smrg	st	%f10, [%g2 + 0x10]	! LSU
559848b8605Smrg	fadds	%f11, %f13, %f11	! FGA	Group	f11 available
560848b8605Smrg	st	%f11, [%g2 + 0x14]	! LSU
561848b8605Smrg	cmp	%o1, %o2		! IEU1
562848b8605Smrg	bne	1b			! CTI
563848b8605Smrg	 add	%g2, 0x20, %g2		! IEU0	Group
564848b8605Smrg
565848b8605Smrg	cmp	%o1, %g3
566848b8605Smrg	be	3f
567848b8605Smrg	 nop
568848b8605Smrg
569848b8605Smrg2:	ld	[%g1 + 0x00], %f0	! LSU	Group
570848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
571848b8605Smrg	fmuls	%f0, M0, %f2		! FGM	Group
572848b8605Smrg	fmuls	%f0, M1, %f3		! FGM	Group
573848b8605Smrg	fmuls	%f1, M4, %f6		! FGM	Group
574848b8605Smrg	fmuls	%f1, M5, %f7		! FGM	Group
575848b8605Smrg	fadds	%f2, M12, %f2		! FGA	Group	f2 available
576848b8605Smrg	fadds	%f3, M13, %f3		! FGA	Group	f3 available
577848b8605Smrg	fadds	%f2, %f6, %f2		! FGA	Group	2 cycle stall, f2 available
578848b8605Smrg	st	%f2, [%g2 + 0x00]	! LSU
579848b8605Smrg	fadds	%f3, %f7, %f3		! FGA	Group	f3 available
580848b8605Smrg	st	%f3, [%g2 + 0x04]	! LSU
581848b8605Smrg
582848b8605Smrg3:
583848b8605Smrg	ba	__set_v4f_2
584848b8605Smrg	 nop
585848b8605Smrg
586848b8605Smrg	.globl	_mesa_sparc_transform_points2_2d_no_rot
587848b8605Smrg_mesa_sparc_transform_points2_2d_no_rot:
588848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
589848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
590848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
591848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
592848b8605Smrg
593848b8605Smrg	LDMATRIX_0_5_12_13(%o1)
594848b8605Smrg
595848b8605Smrg	cmp	%g3, 1
596848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
597848b8605Smrg	bl	3f
598848b8605Smrg	 clr	%o1
599848b8605Smrg
600848b8605Smrg	be	2f
601848b8605Smrg	 andn	%g3, 1, %o2
602848b8605Smrg
603848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
604848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
605848b8605Smrg	add	%o1, 2, %o1		! IEU0
606848b8605Smrg	add	%g1, %o5, %g1		! IEU1
607848b8605Smrg	ld	[%g1 + 0x00], %f4	! LSU	Group
608848b8605Smrg	fmuls	%f0, M0, %f2		! FGM
609848b8605Smrg	ld	[%g1 + 0x04], %f5	! LSU	Group
610848b8605Smrg	fmuls	%f1, M5, %f3		! FGM
611848b8605Smrg	fmuls	%f4, M0, %f6		! FGM	Group
612848b8605Smrg	add	%g1, %o5, %g1		! IEU0
613848b8605Smrg	fmuls	%f5, M5, %f7		! FGM	Group
614848b8605Smrg	fadds	%f2, M12, %f2		! FGA	Group	f2 available
615848b8605Smrg	st	%f2, [%g2 + 0x00]	! LSU
616848b8605Smrg	fadds	%f3, M13, %f3		! FGA	Group	f3 available
617848b8605Smrg	st	%f3, [%g2 + 0x04]	! LSU
618848b8605Smrg	fadds	%f6, M12, %f6		! FGA	Group	f6 available
619848b8605Smrg	st	%f6, [%g2 + 0x10]	! LSU
620848b8605Smrg	fadds	%f7, M13, %f7		! FGA	Group	f7 available
621848b8605Smrg	st	%f7, [%g2 + 0x14]	! LSU
622848b8605Smrg	cmp	%o1, %o2		! IEU1
623848b8605Smrg	bne	1b			! CTI
624848b8605Smrg	 add	%g2, 0x20, %g2		! IEU0	Group
625848b8605Smrg
626848b8605Smrg	cmp	%o1, %g3
627848b8605Smrg	be	3f
628848b8605Smrg	 nop
629848b8605Smrg
630848b8605Smrg2:	ld	[%g1 + 0x00], %f0	! LSU	Group
631848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
632848b8605Smrg	fmuls	%f0, M0, %f2		! FGM	Group
633848b8605Smrg	fmuls	%f1, M5, %f3		! FGM	Group
634848b8605Smrg	fadds	%f2, M12, %f2		! FGA	Group, 2 cycle stall, f2 available
635848b8605Smrg	st	%f2, [%g2 + 0x00]	! LSU
636848b8605Smrg	fadds	%f3, M13, %f3		! FGA	Group	f3 available
637848b8605Smrg	st	%f3, [%g2 + 0x04]	! LSU
638848b8605Smrg
639848b8605Smrg3:
640848b8605Smrg	ba	__set_v4f_2
641848b8605Smrg	 nop
642848b8605Smrg
643848b8605Smrg	/* orig: 12 cycles */
644848b8605Smrg	.globl	_mesa_sparc_transform_points2_3d
645848b8605Smrg_mesa_sparc_transform_points2_3d:
646848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
647848b8605Smrg	ld	[%o2 + V4F_START], %g1
648848b8605Smrg	ld	[%o0 + V4F_START], %g2
649848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
650848b8605Smrg
651848b8605Smrg	LDMATRIX_0_1_2_3_4_5_6_12_13_14(%o1)
652848b8605Smrg
653848b8605Smrg	cmp	%g3, 1
654848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
655848b8605Smrg	bl	3f
656848b8605Smrg	 clr	%o1
657848b8605Smrg
658848b8605Smrg	be	2f
659848b8605Smrg	 andn	%g3, 1, %o2
660848b8605Smrg
661848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
662848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
663848b8605Smrg	add	%o1, 2, %o1		! IEU0
664848b8605Smrg	add	%g1, %o5, %g1		! IEU1
665848b8605Smrg	ld	[%g1 + 0x00], %f9	! LSU	Group
666848b8605Smrg	fmuls	%f0, M0, %f2		! FGM
667848b8605Smrg	ld	[%g1 + 0x04], %f10	! LSU	Group
668848b8605Smrg	fmuls	%f0, M1, %f3		! FGM
669848b8605Smrg	fmuls	%f0, M2, %f4		! FGM	Group
670848b8605Smrg	add	%g1, %o5, %g1		! IEU0
671848b8605Smrg	fmuls	%f1, M4, %f6		! FGM	Group
672848b8605Smrg	fmuls	%f1, M5, %f7		! FGM	Group	f2 available
673848b8605Smrg	fadds	%f2, M12, %f2		! FGA
674848b8605Smrg	fmuls	%f1, M6, %f8		! FGM	Group	f3 available
675848b8605Smrg	fadds	%f3, M13, %f3		! FGA
676848b8605Smrg	fmuls	%f9, M0, %f11		! FGM	Group	f4 available
677848b8605Smrg	fadds	%f4, M14, %f4		! FGA
678848b8605Smrg	fmuls	%f9, M1, %f12		! FGM	Group	f6 available
679848b8605Smrg	fmuls	%f9, M2, %f13		! FGM	Group	f2, f7 available
680848b8605Smrg	fadds	%f2, %f6, %f2		! FGA
681848b8605Smrg	st	%f2, [%g2 + 0x00]	! LSU
682848b8605Smrg	fmuls	%f10, M4, %f14		! FGM	Group	f3, f8 available
683848b8605Smrg	fadds	%f3, %f7, %f3		! FGA
684848b8605Smrg	st	%f3, [%g2 + 0x04]	! LSU
685848b8605Smrg	fmuls	%f10, M5, %f15		! FGM	Group	f4, f11 available
686848b8605Smrg	fadds	%f11, M12, %f11		! FGA
687848b8605Smrg	fmuls	%f10, M6, %f0		! FGM	Group	f12 available
688848b8605Smrg	fadds	%f12, M13, %f12		! FGA
689848b8605Smrg	fadds	%f13, M14, %f13		! FGA	Group	f13 available
690848b8605Smrg	fadds	%f4, %f8, %f4		! FGA	Group	f14 available
691848b8605Smrg	st	%f4, [%g2 + 0x08]	! LSU
692848b8605Smrg	fadds	%f11, %f14, %f11	! FGA	Group	f15, f11 available
693848b8605Smrg	st	%f11, [%g2 + 0x10]	! LSU
694848b8605Smrg	fadds	%f12, %f15, %f12	! FGA	Group	f0, f12 available
695848b8605Smrg	st	%f12, [%g2 + 0x14]	! LSU
696848b8605Smrg	fadds	%f13, %f0, %f13		! FGA	Group	f13 available
697848b8605Smrg	st	%f13, [%g2 + 0x18]	! LSU
698848b8605Smrg
699848b8605Smrg	cmp	%o1, %o2		! IEU1
700848b8605Smrg	bne	1b			! CTI
701848b8605Smrg	 add	%g2, 0x20, %g2		! IEU0	Group
702848b8605Smrg
703848b8605Smrg	cmp	%o1, %g3
704848b8605Smrg	be	3f
705848b8605Smrg	 nop
706848b8605Smrg
707848b8605Smrg2:	ld	[%g1 + 0x00], %f0	! LSU	Group
708848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
709848b8605Smrg	fmuls	%f0, M0, %f2		! FGM	Group
710848b8605Smrg	fmuls	%f0, M1, %f3		! FGM	Group
711848b8605Smrg	fmuls	%f0, M2, %f4		! FGM	Group
712848b8605Smrg	fmuls	%f1, M4, %f6		! FGM	Group
713848b8605Smrg	fmuls	%f1, M5, %f7		! FGM	Group	f2 available
714848b8605Smrg	fadds	%f2, M12, %f2		! FGA
715848b8605Smrg	fmuls	%f1, M6, %f8		! FGM	Group	f3 available
716848b8605Smrg	fadds	%f3, M13, %f3		! FGA
717848b8605Smrg	fadds	%f4, M14, %f4		! FGA	Group	f4 available
718848b8605Smrg	fadds	%f2, %f6, %f2		! FGA	Group	stall, f2, f6, f7 available
719848b8605Smrg	st	%f2, [%g2 + 0x00]	! LSU
720848b8605Smrg	fadds	%f3, %f7, %f3		! FGA	Group	f3, f8 available
721848b8605Smrg	st	%f3, [%g2 + 0x04]	! LSU
722848b8605Smrg	fadds	%f4, %f8, %f4		! FGA	Group	f4 available
723848b8605Smrg	st	%f4, [%g2 + 0x08]	! LSU
724848b8605Smrg
725848b8605Smrg3:
726848b8605Smrg	ba	__set_v4f_3
727848b8605Smrg	 nop
728848b8605Smrg
729848b8605Smrg	.globl	_mesa_sparc_transform_points2_3d_no_rot
730848b8605Smrg_mesa_sparc_transform_points2_3d_no_rot:
731848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
732848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
733848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
734848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
735848b8605Smrg
736848b8605Smrg	LDMATRIX_0_5_12_13_14(%o1)
737848b8605Smrg
738848b8605Smrg	cmp	%g3, 1
739848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
740848b8605Smrg	bl	3f
741848b8605Smrg	 clr	%o3
742848b8605Smrg
743848b8605Smrg	be	2f
744848b8605Smrg	 andn	%g3, 1, %o2
745848b8605Smrg
746848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
747848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
748848b8605Smrg	add	%o3, 2, %o3		! IEU0
749848b8605Smrg	add	%g1, %o5, %g1		! IEU1
750848b8605Smrg	ld	[%g1 + 0x00], %f4	! LSU	Group
751848b8605Smrg	fmuls	%f0, M0, %f2		! FGM
752848b8605Smrg	ld	[%g1 + 0x04], %f5	! LSU	Group
753848b8605Smrg	fmuls	%f1, M5, %f3		! FGM
754848b8605Smrg	fmuls	%f4, M0, %f6		! FGM	Group
755848b8605Smrg	add	%g1, %o5, %g1		! IEU0
756848b8605Smrg	fmuls	%f5, M5, %f7		! FGM	Group
757848b8605Smrg	fadds	%f2, M12, %f2		! FGA	Group	f2 available
758848b8605Smrg	st	%f2, [%g2 + 0x00]	! LSU
759848b8605Smrg	fadds	%f3, M13, %f3		! FGA	Group	f3 available
760848b8605Smrg	st	%f3, [%g2 + 0x04]	! LSU
761848b8605Smrg	fadds	%f6, M12, %f6		! FGA	Group	f6 available
762848b8605Smrg	st	M14, [%g2 + 0x08]	! LSU
763848b8605Smrg	fadds	%f7, M13, %f7		! FGA	Group	f7 available
764848b8605Smrg	st	%f6, [%g2 + 0x10]	! LSU
765848b8605Smrg	st	%f7, [%g2 + 0x14]	! LSU	Group
766848b8605Smrg	st	M14, [%g2 + 0x18]	! LSU	Group
767848b8605Smrg	cmp	%o3, %o2		! IEU1
768848b8605Smrg	bne	1b			! CTI
769848b8605Smrg	 add	%g2, 0x20, %g2		! IEU0	Group
770848b8605Smrg
771848b8605Smrg	cmp	%o3, %g3
772848b8605Smrg	be	3f
773848b8605Smrg	 nop
774848b8605Smrg
775848b8605Smrg2:	ld	[%g1 + 0x00], %f0	! LSU	Group
776848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
777848b8605Smrg	fmuls	%f0, M0, %f2		! FGM	Group
778848b8605Smrg	fmuls	%f1, M5, %f3		! FGM	Group
779848b8605Smrg	fadds	%f2, M12, %f2		! FGA	Group, 2 cycle stall, f2 available
780848b8605Smrg	st	%f2, [%g2 + 0x00]	! LSU
781848b8605Smrg	fadds	%f3, M13, %f3		! FGA	Group	f3 available
782848b8605Smrg	st	%f3, [%g2 + 0x04]	! LSU
783848b8605Smrg	st	M14, [%g2 + 0x08]	! LSU	Group
784848b8605Smrg
785848b8605Smrg3:	ld	[%o1 + (14 * 0x4)], %g3
786848b8605Smrg	cmp	%g3, 0
787848b8605Smrg	bne	__set_v4f_3
788848b8605Smrg	 nop
789848b8605Smrg	ba	__set_v4f_2
790848b8605Smrg	 nop
791848b8605Smrg
792848b8605Smrg	.globl	_mesa_sparc_transform_points2_perspective
793848b8605Smrg_mesa_sparc_transform_points2_perspective:
794848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
795848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
796848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
797848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
798848b8605Smrg
799848b8605Smrg	LDMATRIX_0_5_14(%o1)
800848b8605Smrg
801848b8605Smrg	cmp	%g3, 0
802848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
803848b8605Smrg	be	2f
804848b8605Smrg	 clr	%o1
805848b8605Smrg
806848b8605Smrg1:	ld	[%g1 + 0x00], %f0
807848b8605Smrg	ld	[%g1 + 0x04], %f1
808848b8605Smrg	add	%o1, 1, %o1
809848b8605Smrg	add	%g1, %o5, %g1
810848b8605Smrg	fmuls	%f0, M0, %f2
811848b8605Smrg	st	%f2, [%g2 + 0x00]
812848b8605Smrg	fmuls	%f1, M5, %f3
813848b8605Smrg	st	%f3, [%g2 + 0x04]
814848b8605Smrg	st	M14, [%g2 + 0x08]
815848b8605Smrg	st	%g0, [%g2 + 0x0c]
816848b8605Smrg	cmp	%o1, %g3
817848b8605Smrg	bne	1b
818848b8605Smrg	 add	%g2, 0x10, %g2
819848b8605Smrg2:
820848b8605Smrg	ba	__set_v4f_4
821848b8605Smrg	 nop
822848b8605Smrg
823848b8605Smrg	.globl	_mesa_sparc_transform_points3_general
824848b8605Smrg_mesa_sparc_transform_points3_general:
825848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
826848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
827848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
828848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
829848b8605Smrg
830848b8605Smrg	LDMATRIX_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15(%o1)
831848b8605Smrg
832848b8605Smrg	cmp	%g3, 0
833848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
834848b8605Smrg	be	2f
835848b8605Smrg	 clr	%o1
836848b8605Smrg
837848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
838848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
839848b8605Smrg	ld	[%g1 + 0x08], %f2	! LSU	Group
840848b8605Smrg	add	%o1, 1, %o1		! IEU0
841848b8605Smrg	add	%g1, %o5, %g1		! IEU1
842848b8605Smrg	fmuls	%f0, M0, %f3		! FGM
843848b8605Smrg	fmuls	%f1, M4, %f7		! FGM	Group
844848b8605Smrg	fmuls	%f0, M1, %f4		! FGM	Group
845848b8605Smrg	fmuls	%f1, M5, %f8		! FGM	Group
846848b8605Smrg	fmuls	%f0, M2, %f5		! FGM	Group	f3 available
847848b8605Smrg	fmuls	%f1, M6, %f9		! FGM	Group	f7 available
848848b8605Smrg	fadds	%f3, %f7, %f3		! FGA
849848b8605Smrg	fmuls	%f0, M3, %f6		! FGM	Group	f4 available
850848b8605Smrg	fmuls	%f1, M7, %f10		! FGM	Group	f8 available
851848b8605Smrg	fadds	%f4, %f8, %f4		! FGA
852848b8605Smrg	fmuls	%f2, M8, %f7		! FGM	Group	f5 available
853848b8605Smrg	fmuls	%f2, M9, %f8		! FGM	Group	f9,f3 available
854848b8605Smrg	fadds	%f5, %f9, %f5		! FGA
855848b8605Smrg	fmuls	%f2, M10, %f9		! FGM	Group	f6 available
856848b8605Smrg	fadds	%f6, %f10, %f6		! FGA	Group	f10,f4 available
857848b8605Smrg	fmuls	%f2, M11, %f10		! FGM
858848b8605Smrg	fadds	%f3, M12, %f3		! FGA	Group	f7 available
859848b8605Smrg	fadds	%f4, M13, %f4		! FGA	Group	f8,f5 available
860848b8605Smrg	fadds	%f5, M14, %f5		! FGA	Group	f9 available
861848b8605Smrg	fadds	%f6, M15, %f6		! FGA	Group	f10,f6 available
862848b8605Smrg	fadds	%f3, %f7, %f3		! FGA	Group	f3 available
863848b8605Smrg	st	%f3, [%g2 + 0x00]	! LSU
864848b8605Smrg	fadds	%f4, %f8, %f4		! FGA	Group	f4 available
865848b8605Smrg	st	%f4, [%g2 + 0x04]	! LSU
866848b8605Smrg	fadds	%f5, %f9, %f5		! FGA	Group	f5 available
867848b8605Smrg	st	%f5, [%g2 + 0x08]	! LSU
868848b8605Smrg	fadds	%f6, %f10, %f6		! FGA	Group	f6 available
869848b8605Smrg	st	%f6, [%g2 + 0x0c]	! LSU
870848b8605Smrg	cmp	%o1, %g3		! IEU1
871848b8605Smrg	bne	1b			! CTI
872848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0	Group
873848b8605Smrg2:
874848b8605Smrg	ba	__set_v4f_4
875848b8605Smrg	 nop
876848b8605Smrg
877848b8605Smrg	.globl	_mesa_sparc_transform_points3_identity
878848b8605Smrg_mesa_sparc_transform_points3_identity:
879848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
880848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
881848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
882848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
883848b8605Smrg
884848b8605Smrg	cmp	%g3, 0
885848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
886848b8605Smrg	be	2f
887848b8605Smrg	 clr	%o1
888848b8605Smrg
889848b8605Smrg1:	ld	[%g1 + 0x00], %f0
890848b8605Smrg	ld	[%g1 + 0x04], %f1
891848b8605Smrg	ld	[%g1 + 0x08], %f2
892848b8605Smrg	add	%o1, 1, %o1
893848b8605Smrg	add	%g1, %o5, %g1
894848b8605Smrg	cmp	%o1, %g3
895848b8605Smrg	st	%f0, [%g2 + 0x00]
896848b8605Smrg	st	%f1, [%g2 + 0x04]
897848b8605Smrg	st	%f2, [%g2 + 0x08]
898848b8605Smrg	bne	1b
899848b8605Smrg	 add	%g2, 0x10, %g2
900848b8605Smrg2:
901848b8605Smrg	ba	__set_v4f_3
902848b8605Smrg	 nop
903848b8605Smrg
904848b8605Smrg	.globl	_mesa_sparc_transform_points3_2d
905848b8605Smrg_mesa_sparc_transform_points3_2d:
906848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
907848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
908848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
909848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
910848b8605Smrg
911848b8605Smrg	LDMATRIX_0_1_4_5_12_13(%o1)
912848b8605Smrg
913848b8605Smrg	cmp	%g3, 0
914848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
915848b8605Smrg	be	2f
916848b8605Smrg	 clr	%o1
917848b8605Smrg
918848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
919848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
920848b8605Smrg	ld	[%g1 + 0x08], %f2	! LSU	Group
921848b8605Smrg	add	%o1, 1, %o1		! IEU0
922848b8605Smrg	add	%g1, %o5, %g1		! IEU1
923848b8605Smrg	fmuls	%f0, M0, %f3		! FGM
924848b8605Smrg	fmuls	%f0, M1, %f4		! FGM	Group
925848b8605Smrg	fmuls	%f1, M4, %f6		! FGM	Group
926848b8605Smrg	fmuls	%f1, M5, %f7		! FGM	Group
927848b8605Smrg	fadds	%f3, M12, %f3		! FGA	Group	f3 available
928848b8605Smrg	fadds	%f4, M13, %f4		! FGA	Group	f4 available
929848b8605Smrg	fadds	%f3, %f6, %f3		! FGA	Group	f6 available
930848b8605Smrg	st	%f3, [%g2 + 0x00]	! LSU
931848b8605Smrg	fadds	%f4, %f7, %f4		! FGA	Group	f7 available
932848b8605Smrg	st	%f4, [%g2 + 0x04]	! LSU
933848b8605Smrg	st	%f2, [%g2 + 0x08]	! LSU	Group
934848b8605Smrg	cmp	%o1, %g3		! IEU1
935848b8605Smrg	bne	1b			! CTI
936848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0	Group
937848b8605Smrg2:
938848b8605Smrg	ba	__set_v4f_3
939848b8605Smrg	 nop
940848b8605Smrg
941848b8605Smrg	.globl	_mesa_sparc_transform_points3_2d_no_rot
942848b8605Smrg_mesa_sparc_transform_points3_2d_no_rot:
943848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
944848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
945848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
946848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
947848b8605Smrg
948848b8605Smrg	LDMATRIX_0_5_12_13(%o1)
949848b8605Smrg
950848b8605Smrg	cmp	%g3, 0
951848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
952848b8605Smrg	be	2f
953848b8605Smrg	 clr	%o1
954848b8605Smrg
955848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
956848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
957848b8605Smrg	ld	[%g1 + 0x08], %f2	! LSU	Group
958848b8605Smrg	add	%o1, 1, %o1		! IEU0
959848b8605Smrg	add	%g1, %o5, %g1		! IEU1
960848b8605Smrg	fmuls	%f0, M0, %f3		! FGM
961848b8605Smrg	fmuls	%f1, M5, %f4		! FGM	Group
962848b8605Smrg	st	%f2, [%g2 + 0x08]	! LSU
963848b8605Smrg	fadds	%f3, M12, %f3		! FGA	Group
964848b8605Smrg	st	%f3, [%g2 + 0x00]	! LSU
965848b8605Smrg	fadds	%f4, M13, %f4		! FGA	Group
966848b8605Smrg	st	%f4, [%g2 + 0x04]	! LSU
967848b8605Smrg	cmp	%o1, %g3		! IEU1
968848b8605Smrg	bne	1b			! CTI
969848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0	Group
970848b8605Smrg2:
971848b8605Smrg	ba	__set_v4f_3
972848b8605Smrg	 nop
973848b8605Smrg
974848b8605Smrg	.globl	_mesa_sparc_transform_points3_3d
975848b8605Smrg_mesa_sparc_transform_points3_3d:
976848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
977848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
978848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
979848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
980848b8605Smrg
981848b8605Smrg	LDMATRIX_0_1_2_4_5_6_8_9_10_12_13_14(%o1)
982848b8605Smrg
983848b8605Smrg	cmp	%g3, 0
984848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
985848b8605Smrg	be	2f
986848b8605Smrg	 clr	%o1
987848b8605Smrg
988848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
989848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
990848b8605Smrg	ld	[%g1 + 0x08], %f2	! LSU	Group
991848b8605Smrg	add	%o1, 1, %o1		! IEU0
992848b8605Smrg	add	%g1, %o5, %g1		! IEU1
993848b8605Smrg	fmuls	%f0, M0, %f3		! FGM
994848b8605Smrg	fmuls	%f1, M4, %f6		! FGM	Group
995848b8605Smrg	fmuls	%f0, M1, %f4		! FGM	Group
996848b8605Smrg	fmuls	%f1, M5, %f7		! FGM	Group
997848b8605Smrg	fmuls	%f0, M2, %f5		! FGM	Group	f3 available
998848b8605Smrg	fmuls	%f1, M6, %f8		! FGM	Group	f6 available
999848b8605Smrg	fadds	%f3, %f6, %f3		! FGA
1000848b8605Smrg	fmuls	%f2, M8, %f9		! FGM	Group	f4 available
1001848b8605Smrg	fmuls	%f2, M9, %f10		! FGM	Group	f7 available
1002848b8605Smrg	fadds	%f4, %f7, %f4		! FGA
1003848b8605Smrg	fmuls	%f2, M10, %f11		! FGM	Group	f5 available
1004848b8605Smrg	fadds	%f5, %f8, %f5		! FGA	Group	f8, f3 available
1005848b8605Smrg	fadds	%f3, %f9, %f3		! FGA	Group	f9 available
1006848b8605Smrg	fadds	%f4, %f10, %f4		! FGA	Group	f10, f4 available
1007848b8605Smrg	fadds	%f5, %f11, %f5		! FGA	Group	stall, f11, f5 available
1008848b8605Smrg	fadds	%f3, M12, %f3		! FGA	Group	f3 available
1009848b8605Smrg	st	%f3, [%g2 + 0x00]	! LSU
1010848b8605Smrg	fadds	%f4, M13, %f4		! FGA	Group	f4 available
1011848b8605Smrg	st	%f4, [%g2 + 0x04]	! LSU
1012848b8605Smrg	fadds	%f5, M14, %f5		! FGA	Group	f5 available
1013848b8605Smrg	st	%f5, [%g2 + 0x08]	! LSU
1014848b8605Smrg	cmp	%o1, %g3		! IEU1
1015848b8605Smrg	bne	1b			! CTI
1016848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0	Group
1017848b8605Smrg2:
1018848b8605Smrg	ba	__set_v4f_3
1019848b8605Smrg	 nop
1020848b8605Smrg
1021848b8605Smrg	.globl	_mesa_sparc_transform_points3_3d_no_rot
1022848b8605Smrg_mesa_sparc_transform_points3_3d_no_rot:
1023848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
1024848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
1025848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
1026848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
1027848b8605Smrg
1028848b8605Smrg	LDMATRIX_0_5_10_12_13_14(%o1)
1029848b8605Smrg
1030848b8605Smrg	cmp	%g3, 0
1031848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
1032848b8605Smrg	be	2f
1033848b8605Smrg	 clr	%o1
1034848b8605Smrg
1035848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
1036848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
1037848b8605Smrg	ld	[%g1 + 0x08], %f2	! LSU	Group
1038848b8605Smrg	add	%o1, 1, %o1		! IEU0
1039848b8605Smrg	add	%g1, %o5, %g1		! IEU1
1040848b8605Smrg	cmp	%o1, %g3		! IEU1	Group
1041848b8605Smrg	fmuls	%f0, M0, %f3		! FGM
1042848b8605Smrg	fmuls	%f1, M5, %f4		! FGM	Group
1043848b8605Smrg	fmuls	%f2, M10, %f5		! FGM	Group
1044848b8605Smrg	fadds	%f3, M12, %f3		! FGA	Group, stall, f3 available
1045848b8605Smrg	st	%f3, [%g2 + 0x00]	! LSU
1046848b8605Smrg	fadds	%f4, M13, %f4		! FGA	Group, f4 available
1047848b8605Smrg	st	%f4, [%g2 + 0x04]	! LSU
1048848b8605Smrg	fadds	%f5, M14, %f5		! FGA	Group, f5 available
1049848b8605Smrg	st	%f5, [%g2 + 0x08]	! LEU
1050848b8605Smrg	bne	1b			! CTI
1051848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0	Group
1052848b8605Smrg2:
1053848b8605Smrg	ba	__set_v4f_3
1054848b8605Smrg	 nop
1055848b8605Smrg
1056848b8605Smrg	.globl	_mesa_sparc_transform_points3_perspective
1057848b8605Smrg_mesa_sparc_transform_points3_perspective:
1058848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
1059848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
1060848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
1061848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
1062848b8605Smrg
1063848b8605Smrg	LDMATRIX_0_5_8_9_10_14(%o1)
1064848b8605Smrg
1065848b8605Smrg	cmp	%g3, 0
1066848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
1067848b8605Smrg	be	2f
1068848b8605Smrg	 clr	%o1
1069848b8605Smrg
1070848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
1071848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
1072848b8605Smrg	ld	[%g1 + 0x08], %f2	! LSU	Group
1073848b8605Smrg	add	%o1, 1, %o1		! IEU0
1074848b8605Smrg	add	%g1, %o5, %g1		! IEU1
1075848b8605Smrg	fmuls	%f0, M0, %f3		! FGM
1076848b8605Smrg	fmuls	%f2, M8, %f6		! FGM	Group
1077848b8605Smrg	fmuls	%f1, M5, %f4		! FGM	Group
1078848b8605Smrg	fmuls	%f2, M9, %f7		! FGM	Group
1079848b8605Smrg	fmuls	%f2, M10, %f5		! FGM	Group	f3 available
1080848b8605Smrg	fadds	%f3, %f6, %f3		! FGA	Group	f6 available
1081848b8605Smrg	st	%f3, [%g2 + 0x00]	! LSU
1082848b8605Smrg	fadds	%f4, %f7, %f4		! FGA	Group	stall, f4, f7 available
1083848b8605Smrg	st	%f4, [%g2 + 0x04]	! LSU
1084848b8605Smrg	fadds	%f5, M14, %f5		! FGA	Group
1085848b8605Smrg	st	%f5, [%g2 + 0x08]	! LSU
1086848b8605Smrg	fnegs	%f2, %f6		! FGA	Group
1087848b8605Smrg	st	%f6, [%g2 + 0x0c]	! LSU
1088848b8605Smrg	cmp	%o1, %g3		! IEU1
1089848b8605Smrg	bne	1b			! CTI
1090848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0	Group
1091848b8605Smrg2:
1092848b8605Smrg	ba	__set_v4f_4
1093848b8605Smrg	 nop
1094848b8605Smrg
1095848b8605Smrg	.globl	_mesa_sparc_transform_points4_general
1096848b8605Smrg_mesa_sparc_transform_points4_general:
1097848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
1098848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
1099848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
1100848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
1101848b8605Smrg
1102848b8605Smrg	LDMATRIX_0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15(%o1)
1103848b8605Smrg
1104848b8605Smrg	cmp	%g3, 0
1105848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
1106848b8605Smrg	be	2f
1107848b8605Smrg	 clr	%o1
1108848b8605Smrg
1109848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
1110848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
1111848b8605Smrg	ld	[%g1 + 0x08], %f2	! LSU	Group
1112848b8605Smrg	ld	[%g1 + 0x0c], %f3	! LSU	Group
1113848b8605Smrg	add	%o1, 1, %o1		! IEU0
1114848b8605Smrg	add	%g1, %o5, %g1		! IEU1
1115848b8605Smrg	fmuls	%f0, M0, %f4		! FGM	Group
1116848b8605Smrg	fmuls	%f1, M4, %f8		! FGM	Group
1117848b8605Smrg	fmuls	%f0, M1, %f5		! FGM	Group
1118848b8605Smrg	fmuls	%f1, M5, %f9		! FGM	Group
1119848b8605Smrg	fmuls	%f0, M2, %f6		! FGM	Group	f4 available
1120848b8605Smrg	fmuls	%f1, M6, %f10		! FGM	Group	f8 available
1121848b8605Smrg	fadds	%f4, %f8, %f4		! FGA
1122848b8605Smrg	fmuls	%f0, M3, %f7		! FGM	Group	f5 available
1123848b8605Smrg	fmuls	%f1, M7, %f11		! FGM	Group	f9 available
1124848b8605Smrg	fadds	%f5, %f9, %f5		! FGA
1125848b8605Smrg	fmuls	%f2, M8, %f12		! FGM	Group	f6 available
1126848b8605Smrg	fmuls	%f2, M9, %f13		! FGM	Group	f10, f4 available
1127848b8605Smrg	fadds	%f6, %f10, %f6		! FGA
1128848b8605Smrg	fmuls	%f2, M10, %f14		! FGM	Group	f7 available
1129848b8605Smrg	fmuls	%f2, M11, %f15		! FGM	Group	f11, f5 available
1130848b8605Smrg	fadds	%f7, %f11, %f7		! FGA
1131848b8605Smrg	fmuls	%f3, M12, %f8		! FGM	Group	f12 available
1132848b8605Smrg	fadds	%f4, %f12, %f4		! FGA
1133848b8605Smrg	fmuls	%f3, M13, %f9		! FGM	Group	f13, f6 available
1134848b8605Smrg	fadds	%f5, %f13, %f5		! FGA
1135848b8605Smrg	fmuls	%f3, M14, %f10		! FGM	Group	f14 available
1136848b8605Smrg	fadds	%f6, %f14, %f6		! FGA
1137848b8605Smrg	fmuls	%f3, M15, %f11		! FGM	Group	f15, f7 available
1138848b8605Smrg	fadds	%f7, %f15, %f7		! FGA
1139848b8605Smrg	fadds	%f4, %f8, %f4		! FGA	Group	f8, f4 available
1140848b8605Smrg	st	%f4, [%g2 + 0x00]	! LSU
1141848b8605Smrg	fadds	%f5, %f9, %f5		! FGA	Group	f9, f5 available
1142848b8605Smrg	st	%f5, [%g2 + 0x04]	! LSU
1143848b8605Smrg	fadds	%f6, %f10, %f6		! FGA	Group	f10, f6 available
1144848b8605Smrg	st	%f6, [%g2 + 0x08]	! LSU
1145848b8605Smrg	fadds	%f7, %f11, %f7		! FGA	Group	f11, f7 available
1146848b8605Smrg	st	%f7, [%g2 + 0x0c]	! LSU
1147848b8605Smrg	cmp	%o1, %g3		! IEU1
1148848b8605Smrg	bne	1b			! CTI
1149848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0	Group
1150848b8605Smrg2:
1151848b8605Smrg	ba	__set_v4f_4
1152848b8605Smrg	 nop
1153848b8605Smrg
1154848b8605Smrg	.globl	_mesa_sparc_transform_points4_identity
1155848b8605Smrg_mesa_sparc_transform_points4_identity:
1156848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
1157848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
1158848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
1159848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
1160848b8605Smrg
1161848b8605Smrg	cmp	%g3, 0
1162848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
1163848b8605Smrg	be	2f
1164848b8605Smrg	 clr	%o1
1165848b8605Smrg
1166848b8605Smrg1:	ld	[%g1 + 0x00], %f0
1167848b8605Smrg	ld	[%g1 + 0x04], %f1
1168848b8605Smrg	ld	[%g1 + 0x08], %f2
1169848b8605Smrg	add	%o1, 1, %o1
1170848b8605Smrg	ld	[%g1 + 0x0c], %f3
1171848b8605Smrg	add	%g1, %o5, %g1
1172848b8605Smrg	st	%f0, [%g2 + 0x00]
1173848b8605Smrg	st	%f1, [%g2 + 0x04]
1174848b8605Smrg	st	%f2, [%g2 + 0x08]
1175848b8605Smrg	cmp	%o1, %g3
1176848b8605Smrg	st	%f3, [%g2 + 0x0c]
1177848b8605Smrg	bne	1b
1178848b8605Smrg	 add	%g2, 0x10, %g2
1179848b8605Smrg2:
1180848b8605Smrg	ba	__set_v4f_4
1181848b8605Smrg	 nop
1182848b8605Smrg
1183848b8605Smrg	.globl	_mesa_sparc_transform_points4_2d
1184848b8605Smrg_mesa_sparc_transform_points4_2d:
1185848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
1186848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
1187848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
1188848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
1189848b8605Smrg
1190848b8605Smrg	LDMATRIX_0_1_4_5_12_13(%o1)
1191848b8605Smrg
1192848b8605Smrg	cmp	%g3, 0
1193848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
1194848b8605Smrg	be	2f
1195848b8605Smrg	 clr	%o1
1196848b8605Smrg
1197848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
1198848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
1199848b8605Smrg	ld	[%g1 + 0x08], %f2	! LSU	Group
1200848b8605Smrg	ld	[%g1 + 0x0c], %f3	! LSU	Group
1201848b8605Smrg	add	%o1, 1, %o1		! IEU0
1202848b8605Smrg	add	%g1, %o5, %g1		! IEU1
1203848b8605Smrg	fmuls	%f0, M0, %f4		! FGM
1204848b8605Smrg	fmuls	%f1, M4, %f8		! FGM	Group
1205848b8605Smrg	fmuls	%f0, M1, %f5		! FGM	Group
1206848b8605Smrg	fmuls	%f1, M5, %f9		! FGM	Group	f4 available
1207848b8605Smrg	fmuls	%f3, M12, %f12		! FGM	Group
1208848b8605Smrg	fmuls	%f3, M13, %f13		! FGM	Group	f8 available
1209848b8605Smrg	fadds	%f4, %f8, %f4		! FGA
1210848b8605Smrg	fadds	%f5, %f9, %f5		! FGA	Group	stall, f5, f9 available
1211848b8605Smrg	fadds	%f4, %f12, %f4		! FGA	Group	2 cycle stall, f4, f12, f13 avail
1212848b8605Smrg	st	%f4, [%g2 + 0x00]	! LSU
1213848b8605Smrg	fadds	%f5, %f13, %f5		! FGA	Group	f5 available
1214848b8605Smrg	st	%f5, [%g2 + 0x04]	! LSU
1215848b8605Smrg	st	%f2, [%g2 + 0x08]	! LSU	Group
1216848b8605Smrg	st	%f3, [%g2 + 0x0c]	! LSU	Group
1217848b8605Smrg	cmp	%o1, %g3		! IEU1
1218848b8605Smrg	bne	1b			! CTI
1219848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0	Group
1220848b8605Smrg2:
1221848b8605Smrg	ba	__set_v4f_4
1222848b8605Smrg	 nop
1223848b8605Smrg
1224848b8605Smrg	.globl	_mesa_sparc_transform_points4_2d_no_rot
1225848b8605Smrg_mesa_sparc_transform_points4_2d_no_rot:
1226848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
1227848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
1228848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
1229848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
1230848b8605Smrg
1231848b8605Smrg	LDMATRIX_0_1_4_5_12_13(%o1)
1232848b8605Smrg
1233848b8605Smrg	cmp	%g3, 0
1234848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
1235848b8605Smrg	be	2f
1236848b8605Smrg	 clr	%o1
1237848b8605Smrg
1238848b8605Smrg1:	ld	[%g1 + 0x00], %f0
1239848b8605Smrg	ld	[%g1 + 0x04], %f1
1240848b8605Smrg	ld	[%g1 + 0x08], %f2
1241848b8605Smrg	ld	[%g1 + 0x0c], %f3
1242848b8605Smrg	add	%o1, 1, %o1
1243848b8605Smrg	add	%g1, %o5, %g1
1244848b8605Smrg	fmuls	%f0, M0, %f4
1245848b8605Smrg	fmuls	%f3, M12, %f8
1246848b8605Smrg	fmuls	%f1, M5, %f5
1247848b8605Smrg	fmuls	%f3, M13, %f9
1248848b8605Smrg	fadds	%f4, %f8, %f4
1249848b8605Smrg	st	%f4, [%g2 + 0x00]
1250848b8605Smrg	fadds	%f5, %f9, %f5
1251848b8605Smrg	st	%f5, [%g2 + 0x04]
1252848b8605Smrg	st	%f2, [%g2 + 0x08]
1253848b8605Smrg	st	%f3, [%g2 + 0x0c]
1254848b8605Smrg	cmp	%o1, %g3
1255848b8605Smrg	bne	1b
1256848b8605Smrg	 add	%g2, 0x10, %g2
1257848b8605Smrg2:
1258848b8605Smrg	ba	__set_v4f_4
1259848b8605Smrg	 nop
1260848b8605Smrg
1261848b8605Smrg	.globl	_mesa_sparc_transform_points4_3d
1262848b8605Smrg_mesa_sparc_transform_points4_3d:
1263848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
1264848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
1265848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
1266848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
1267848b8605Smrg
1268848b8605Smrg	LDMATRIX_0_1_2_4_5_6_8_9_10_12_13_14(%o1)
1269848b8605Smrg
1270848b8605Smrg	cmp	%g3, 0
1271848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
1272848b8605Smrg	be	2f
1273848b8605Smrg	 clr	%o1
1274848b8605Smrg
1275848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
1276848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
1277848b8605Smrg	ld	[%g1 + 0x08], %f2	! LSU	Group
1278848b8605Smrg	ld	[%g1 + 0x0c], %f3	! LSU	Group
1279848b8605Smrg	add	%o1, 1, %o1		! IEU0
1280848b8605Smrg	add	%g1, %o5, %g1		! IEU1
1281848b8605Smrg	fmuls	%f0, M0, %f4		! FGM
1282848b8605Smrg	fmuls	%f1, M4, %f7		! FGM	Group
1283848b8605Smrg	fmuls	%f0, M1, %f5		! FGM	Group
1284848b8605Smrg	fmuls	%f1, M5, %f8		! FGM	Group
1285848b8605Smrg	fmuls	%f0, M2, %f6		! FGM	Group	f4 available
1286848b8605Smrg	fmuls	%f1, M6, %f9		! FGM	Group	f7 available
1287848b8605Smrg	fadds	%f4, %f7, %f4		! FGA
1288848b8605Smrg	fmuls	%f2, M8, %f10		! FGM	Group	f5 available
1289848b8605Smrg	fmuls	%f2, M9, %f11		! FGM	Group	f8 available
1290848b8605Smrg	fadds	%f5, %f8, %f5		! FGA
1291848b8605Smrg	fmuls	%f2, M10, %f12		! FGM	Group	f6 available
1292848b8605Smrg	fmuls	%f3, M12, %f13		! FGM	Group	f9, f4 available
1293848b8605Smrg	fadds	%f6, %f9, %f6		! FGA
1294848b8605Smrg	fmuls	%f3, M13, %f14		! FGM	Group	f10 available
1295848b8605Smrg	fadds	%f4, %f10, %f4		! FGA
1296848b8605Smrg	fmuls	%f3, M14, %f15		! FGM	Group	f11, f5 available
1297848b8605Smrg	fadds	%f5, %f11, %f5		! FGA
1298848b8605Smrg	fadds	%f6, %f12, %f6		! FGA	Group	stall, f12, f13, f6 available
1299848b8605Smrg	fadds	%f4, %f13, %f4		! FGA	Group	f14, f4 available
1300848b8605Smrg	st	%f4, [%g2 + 0x00]	! LSU
1301848b8605Smrg	fadds	%f5, %f14, %f5		! FGA	Group	f15, f5 available
1302848b8605Smrg	st	%f5, [%g2 + 0x04]	! LSU
1303848b8605Smrg	fadds	%f6, %f15, %f6		! FGA	Group	f6 available
1304848b8605Smrg	st	%f6, [%g2 + 0x08]	! LSU
1305848b8605Smrg	st	%f3, [%g2 + 0x0c]	! LSU	Group
1306848b8605Smrg	cmp	%o1, %g3		! IEU1
1307848b8605Smrg	bne	1b			! CTI
1308848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0	Group
1309848b8605Smrg2:
1310848b8605Smrg	ba	__set_v4f_4
1311848b8605Smrg	 nop
1312848b8605Smrg
1313848b8605Smrg	.globl	_mesa_sparc_transform_points4_3d_no_rot
1314848b8605Smrg_mesa_sparc_transform_points4_3d_no_rot:
1315848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
1316848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
1317848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
1318848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
1319848b8605Smrg
1320848b8605Smrg	LDMATRIX_0_5_10_12_13_14(%o1)
1321848b8605Smrg
1322848b8605Smrg	cmp	%g3, 0
1323848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
1324848b8605Smrg	be	2f
1325848b8605Smrg	 clr	%o1
1326848b8605Smrg
1327848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
1328848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
1329848b8605Smrg	ld	[%g1 + 0x08], %f2	! LSU	Group
1330848b8605Smrg	ld	[%g1 + 0x0c], %f3	! LSU	Group
1331848b8605Smrg	add	%o1, 1, %o1		! IEU0
1332848b8605Smrg	add	%g1, %o5, %g1		! IEU1
1333848b8605Smrg	fmuls	%f0, M0, %f4		! FGM
1334848b8605Smrg	fmuls	%f3, M12, %f7		! FGM	Group
1335848b8605Smrg	fmuls	%f1, M5, %f5		! FGM	Group
1336848b8605Smrg	fmuls	%f3, M13, %f8		! FGM	Group
1337848b8605Smrg	fmuls	%f2, M10, %f6		! FGM	Group	f4 available
1338848b8605Smrg	fmuls	%f3, M14, %f9		! FGM	Group	f7 available
1339848b8605Smrg	fadds	%f4, %f7, %f4		! FGA
1340848b8605Smrg	st	%f4, [%g2 + 0x00]	! LSU
1341848b8605Smrg	fadds	%f5, %f8, %f5		! FGA	Group	stall, f5, f8 available
1342848b8605Smrg	st	%f5, [%g2 + 0x04]	! LSU
1343848b8605Smrg	fadds	%f6, %f9, %f6		! FGA	Group	stall, f6, f9 available
1344848b8605Smrg	st	%f6, [%g2 + 0x08]	! LSU
1345848b8605Smrg	st	%f3, [%g2 + 0x0c]	! LSU	Group
1346848b8605Smrg	cmp	%o1, %g3		! IEU1
1347848b8605Smrg	bne	1b			! CTI
1348848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0	Group
1349848b8605Smrg2:
1350848b8605Smrg	ba	__set_v4f_4
1351848b8605Smrg	 nop
1352848b8605Smrg
1353848b8605Smrg	.globl	_mesa_sparc_transform_points4_perspective
1354848b8605Smrg_mesa_sparc_transform_points4_perspective:
1355848b8605Smrg	ld	[%o2 + V4F_STRIDE], %o5
1356848b8605Smrg	LDPTR	[%o2 + V4F_START], %g1
1357848b8605Smrg	LDPTR	[%o0 + V4F_START], %g2
1358848b8605Smrg	ld	[%o2 + V4F_COUNT], %g3
1359848b8605Smrg
1360848b8605Smrg	LDMATRIX_0_5_8_9_10_14(%o1)
1361848b8605Smrg
1362848b8605Smrg	cmp	%g3, 0
1363848b8605Smrg	st	%g3, [%o0 + V4F_COUNT]
1364848b8605Smrg	be	2f
1365848b8605Smrg	 clr	%o1
1366848b8605Smrg
1367848b8605Smrg1:	ld	[%g1 + 0x00], %f0	! LSU	Group
1368848b8605Smrg	ld	[%g1 + 0x04], %f1	! LSU	Group
1369848b8605Smrg	ld	[%g1 + 0x08], %f2	! LSU	Group
1370848b8605Smrg	ld	[%g1 + 0x0c], %f3	! LSU	Group
1371848b8605Smrg	add	%o1, 1, %o1		! IEU0
1372848b8605Smrg	add	%g1, %o5, %g1		! IEU1
1373848b8605Smrg	fmuls	%f0, M0, %f4		! FGM
1374848b8605Smrg	fmuls	%f2, M8, %f7		! FGM	Group
1375848b8605Smrg	fmuls	%f1, M5, %f5		! FGM	Group
1376848b8605Smrg	fmuls	%f2, M9, %f8		! FGM	Group
1377848b8605Smrg	fmuls	%f2, M10, %f6		! FGM	Group	f4 available
1378848b8605Smrg	fmuls	%f3, M14, %f9		! FGM	Group	f7 available
1379848b8605Smrg	fadds	%f4, %f7, %f4		! FGA
1380848b8605Smrg	st	%f4, [%g2 + 0x00]	! LSU
1381848b8605Smrg	fadds	%f5, %f8, %f5		! FGA	Group	stall, f5, f8 available
1382848b8605Smrg	st	%f5, [%g2 + 0x04]	! LSU
1383848b8605Smrg	fadds	%f6, %f9, %f6		! FGA	Group	stall, f6, f9 available
1384848b8605Smrg	st	%f6, [%g2 + 0x08]	! LSU
1385848b8605Smrg	fnegs	%f2, %f7		! FGA	Group
1386848b8605Smrg	st	%f7, [%g2 + 0x0c]	! LSU
1387848b8605Smrg	cmp	%o1, %g3		! IEU1
1388848b8605Smrg	bne	1b			! CTI
1389848b8605Smrg	 add	%g2, 0x10, %g2		! IEU0	Group
1390848b8605Smrg2:
1391848b8605Smrg	ba	__set_v4f_4
1392848b8605Smrg	 nop
1393