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