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 |
|
---|
8 | CODE32 SEGMENT PARA USE32 PUBLIC 'CODE'
|
---|
9 | CODE32 ENDS
|
---|
10 | DATA32 SEGMENT PARA USE32 PUBLIC 'DATA'
|
---|
11 | ASSUME DS:FLAT, SS:FLAT, ES:FLAT
|
---|
12 | DATA32 ENDS
|
---|
13 |
|
---|
14 | CODE32 SEGMENT
|
---|
15 | PUBLIC _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 |
|
---|
34 | ALIGN 32
|
---|
35 | v16_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 |
|
---|
71 | PUBLIC _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 |
|
---|
95 | ALIGN 32
|
---|
96 | v16_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 |
|
---|
120 | v16_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 |
|
---|
138 | PUBLIC _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 |
|
---|
156 | ALIGN 32
|
---|
157 | v16_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 |
|
---|
195 | CODE32 ENDS
|
---|
196 |
|
---|
197 | end
|
---|