source: trunk/src/opengl/mesa/vertex_3dnow.asm

Last change on this file was 2962, checked in by jeroen, 25 years ago

* empty log message *

File size: 3.4 KB
Line 
1; $Id: vertex_3dnow.asm,v 1.1 2000-03-01 18:49:39 jeroen Exp $
2;
3; 3dNow! transforms
4;
5
6 .586p
7
8CODE32 SEGMENT PARA USE32 PUBLIC 'CODE'
9CODE32 ENDS
10DATA32 SEGMENT PARA USE32 PUBLIC 'DATA'
11ASSUME DS:FLAT, SS:FLAT, ES:FLAT
12DATA32 ENDS
13
14CODE32 SEGMENT
15PUBLIC _gl_3dnow_project_vertices
16_gl_3dnow_project_vertices:
17
18 push EBP
19 femms
20 prefetch [ESP + 8]
21
22 mov ECX, dword ptr [ESP + 8]
23 mov EDX, dword ptr [ESP + 12]
24 mov EBP, dword ptr [ESP + 16]
25 mov EAX, dword ptr [ESP + 20]
26
27 movd mm6, [ EBP + 48]
28 punpckldq mm6, [ EBP + 52]
29 movd mm5, [EBP]
30 punpckldq mm5, [ EBP + 20]
31 movd mm1, [ EBP + 40]
32 sub EDX, ECX
33
34ALIGN 32
35v16_3dnow_pv_loop_start:
36
37 prefetch [ECX + 64]
38 movd mm0, [ECX + 12]
39 pfrcp mm0, mm0
40 movd mm7, [ECX + 12]
41 pfrcpit1 mm7, mm0
42 pfrcpit2 mm7, mm0
43 punpckldq mm7, mm7
44 movq mm2, [ECX]
45 pfmul mm2, mm7
46 movd mm3, [ECX + 8]
47 pfmul mm3, mm7
48 movd mm0, [ EBP + 56]
49 pfmul mm3, mm1
50 pfadd mm3, mm0
51 pfmul mm2, mm5
52 pfadd mm2, mm6
53 punpckldq mm3, mm7
54 movq [ECX + 0], mm2
55 movq [ECX + 8], mm3
56 add ECX, EAX
57 sub EDX, EAX
58 ja v16_3dnow_pv_loop_start
59
60 femms
61 pop EBP
62 ret
63
64
65
66
67
68
69
70
71PUBLIC _gl_3dnow_project_clipped_vertices
72_gl_3dnow_project_clipped_vertices:
73
74 push EBP
75 push ESI
76
77 femms
78
79 prefetch [ESP + 12]
80
81 mov ECX, dword ptr [ESP + 12]
82 mov EDX, dword ptr [ESP + 16]
83 mov EBP, dword ptr [ESP + 20]
84 mov EAX, dword ptr [ESP + 24]
85 mov ESI, dword ptr [ESP + 28]
86
87
88 movd mm6, [ EBP + 48]
89 punpckldq mm6, [ EBP + 52]
90 movd mm5, [EBP]
91 punpckldq mm5, [ EBP + 20]
92 movd mm1, [ EBP + 40]
93
94
95ALIGN 32
96v16_3dnow_pcv_loop_start:
97
98 cmp byte ptr [ESI], 0
99 jne v16_3dnow_pcv_skip
100
101 movd mm0, [ECX + 12]
102 pfrcp mm0, mm0
103 movd mm7, [ECX + 12]
104 pfrcpit1 mm7, mm0
105 pfrcpit2 mm7, mm0
106 punpckldq mm7, mm7
107 movq mm2, [ECX]
108 pfmul mm2, mm7
109 movd mm3, [ECX + 8]
110 pfmul mm3, mm7
111 movd mm0, [ EBP + 56]
112 pfmul mm3, mm1
113 pfadd mm3, mm0
114 pfmul mm2, mm5
115 pfadd mm2, mm6
116 punpckldq mm3, mm7
117 movq [ECX + 0], mm2
118 movq [ECX + 8], mm3
119
120v16_3dnow_pcv_skip:
121 add ECX, EAX
122 inc ESI
123
124 cmp EDX, ECX
125 jne v16_3dnow_pcv_loop_start
126
127 femms
128
129 pop ESI
130 pop EBP
131 ret
132
133
134
135
136
137
138PUBLIC _gl_v16_3dnow_general_xform
139_gl_v16_3dnow_general_xform:
140
141
142 push EDI
143 push ESI
144
145 mov EAX, dword ptr [ESP + 12]
146 mov ESI, dword ptr [ESP + 16]
147 mov EDX, dword ptr [ESP + 20]
148 mov EDI, dword ptr [ESP + 24]
149 mov ECX, dword ptr [ESP + 28]
150
151 femms
152
153 movq mm7, [ ESI + 48]
154 movq mm3, [ ESI + 56]
155
156ALIGN 32
157v16_3dnow_general_loop:
158 prefetch [EAX + 128]
159 prefetch [EDX + 32]
160
161 movq mm0, [EDX]
162 movd mm1, [EDX + 8]
163 movq mm4, [ESI]
164 punpckhdq mm2, mm0
165 movq mm5, [ESI + 16]
166 punpckldq mm0, mm0
167 movq mm6, [ESI + 32]
168 pfmul mm4, mm0
169 punpckhdq mm2, mm2
170 pfmul mm5, mm2
171 punpckldq mm1, mm1
172 pfmul mm0, [ESI + 8]
173 pfmul mm2, [ESI + 24]
174 pfmul mm6, mm1
175 pfadd mm5, mm4
176 pfmul mm1, [ESI + 40]
177 pfadd mm2, mm0
178 pfadd mm6, mm5
179 pfadd mm2, mm1
180 pfadd mm6, mm7
181 pfadd mm2, mm3
182 add EDX, EDI
183 movq [EAX], mm6
184 movq [EAX + 8], mm2
185 add EAX, 64
186 dec ECX
187 jne v16_3dnow_general_loop
188
189 femms
190
191 pop ESI
192 pop EDI
193 ret
194
195CODE32 ENDS
196
197end
Note: See TracBrowser for help on using the repository browser.