Rev 4358 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4358 | Rev 4632 | ||
---|---|---|---|
1 | /* |
1 | /* |
2 | * Mesa 3-D graphics library |
2 | * Mesa 3-D graphics library |
3 | * |
3 | * |
4 | * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. |
4 | * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. |
5 | * |
5 | * |
6 | * Permission is hereby granted, free of charge, to any person obtaining a |
6 | * Permission is hereby granted, free of charge, to any person obtaining a |
7 | * copy of this software and associated documentation files (the "Software"), |
7 | * copy of this software and associated documentation files (the "Software"), |
8 | * to deal in the Software without restriction, including without limitation |
8 | * to deal in the Software without restriction, including without limitation |
9 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
9 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
10 | * and/or sell copies of the Software, and to permit persons to whom the |
10 | * and/or sell copies of the Software, and to permit persons to whom the |
11 | * Software is furnished to do so, subject to the following conditions: |
11 | * Software is furnished to do so, subject to the following conditions: |
12 | * |
12 | * |
13 | * The above copyright notice and this permission notice shall be included |
13 | * The above copyright notice and this permission notice shall be included |
14 | * in all copies or substantial portions of the Software. |
14 | * in all copies or substantial portions of the Software. |
15 | * |
15 | * |
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
17 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
17 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
19 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR |
19 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR |
20 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
20 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
21 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
21 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
22 | * OTHER DEALINGS IN THE SOFTWARE. |
22 | * OTHER DEALINGS IN THE SOFTWARE. |
23 | */ |
23 | */ |
24 | 24 | ||
25 | /* |
25 | /* |
26 | * NOTE: Avoid using spaces in between '(' ')' and arguments, especially |
26 | * NOTE: Avoid using spaces in between '(' ')' and arguments, especially |
27 | * with macros like CONST, LLBL that expand to CONCAT(...). Putting spaces |
27 | * with macros like CONST, LLBL that expand to CONCAT(...). Putting spaces |
28 | * in there will break the build on some platforms. |
28 | * in there will break the build on some platforms. |
29 | */ |
29 | */ |
30 | 30 | ||
31 | #include "assyntax.h" |
31 | #include "assyntax.h" |
32 | #include "matypes.h" |
32 | #include "matypes.h" |
33 | #include "xform_args.h" |
33 | #include "xform_args.h" |
34 | 34 | ||
35 | SEG_TEXT |
35 | SEG_TEXT |
36 | 36 | ||
37 | #define FP_ONE 1065353216 |
37 | #define FP_ONE 1065353216 |
38 | #define FP_ZERO 0 |
38 | #define FP_ZERO 0 |
39 | 39 | ||
40 | #define SRC0 REGOFF(0, ESI) |
40 | #define SRC0 REGOFF(0, ESI) |
41 | #define SRC1 REGOFF(4, ESI) |
41 | #define SRC1 REGOFF(4, ESI) |
42 | #define SRC2 REGOFF(8, ESI) |
42 | #define SRC2 REGOFF(8, ESI) |
43 | #define SRC3 REGOFF(12, ESI) |
43 | #define SRC3 REGOFF(12, ESI) |
44 | #define DST0 REGOFF(0, EDI) |
44 | #define DST0 REGOFF(0, EDI) |
45 | #define DST1 REGOFF(4, EDI) |
45 | #define DST1 REGOFF(4, EDI) |
46 | #define DST2 REGOFF(8, EDI) |
46 | #define DST2 REGOFF(8, EDI) |
47 | #define DST3 REGOFF(12, EDI) |
47 | #define DST3 REGOFF(12, EDI) |
48 | #define MAT0 REGOFF(0, EDX) |
48 | #define MAT0 REGOFF(0, EDX) |
49 | #define MAT1 REGOFF(4, EDX) |
49 | #define MAT1 REGOFF(4, EDX) |
50 | #define MAT2 REGOFF(8, EDX) |
50 | #define MAT2 REGOFF(8, EDX) |
51 | #define MAT3 REGOFF(12, EDX) |
51 | #define MAT3 REGOFF(12, EDX) |
52 | #define MAT4 REGOFF(16, EDX) |
52 | #define MAT4 REGOFF(16, EDX) |
53 | #define MAT5 REGOFF(20, EDX) |
53 | #define MAT5 REGOFF(20, EDX) |
54 | #define MAT6 REGOFF(24, EDX) |
54 | #define MAT6 REGOFF(24, EDX) |
55 | #define MAT7 REGOFF(28, EDX) |
55 | #define MAT7 REGOFF(28, EDX) |
56 | #define MAT8 REGOFF(32, EDX) |
56 | #define MAT8 REGOFF(32, EDX) |
57 | #define MAT9 REGOFF(36, EDX) |
57 | #define MAT9 REGOFF(36, EDX) |
58 | #define MAT10 REGOFF(40, EDX) |
58 | #define MAT10 REGOFF(40, EDX) |
59 | #define MAT11 REGOFF(44, EDX) |
59 | #define MAT11 REGOFF(44, EDX) |
60 | #define MAT12 REGOFF(48, EDX) |
60 | #define MAT12 REGOFF(48, EDX) |
61 | #define MAT13 REGOFF(52, EDX) |
61 | #define MAT13 REGOFF(52, EDX) |
62 | #define MAT14 REGOFF(56, EDX) |
62 | #define MAT14 REGOFF(56, EDX) |
63 | #define MAT15 REGOFF(60, EDX) |
63 | #define MAT15 REGOFF(60, EDX) |
64 | 64 | ||
65 | 65 | ||
66 | ALIGNTEXT16 |
66 | ALIGNTEXT16 |
67 | GLOBL GLNAME( __mesa_x86_transform_points2_general ) |
67 | GLOBL GLNAME( _mesa_x86_transform_points2_general ) |
68 | HIDDEN(__mesa_x86_transform_points2_general) |
68 | HIDDEN(_mesa_x86_transform_points2_general) |
69 | GLNAME( __mesa_x86_transform_points2_general ): |
69 | GLNAME( _mesa_x86_transform_points2_general ): |
70 | 70 | ||
71 | #define FRAME_OFFSET 8 |
71 | #define FRAME_OFFSET 8 |
72 | PUSH_L( ESI ) |
72 | PUSH_L( ESI ) |
73 | PUSH_L( EDI ) |
73 | PUSH_L( EDI ) |
74 | 74 | ||
75 | MOV_L( ARG_SOURCE, ESI ) |
75 | MOV_L( ARG_SOURCE, ESI ) |
76 | MOV_L( ARG_DEST, EDI ) |
76 | MOV_L( ARG_DEST, EDI ) |
77 | 77 | ||
78 | MOV_L( ARG_MATRIX, EDX ) |
78 | MOV_L( ARG_MATRIX, EDX ) |
79 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
79 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
80 | 80 | ||
81 | TEST_L( ECX, ECX ) |
81 | TEST_L( ECX, ECX ) |
82 | JZ( LLBL(x86_p2_gr_done) ) |
82 | JZ( LLBL(x86_p2_gr_done) ) |
83 | 83 | ||
84 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
84 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
85 | OR_L( CONST(VEC_SIZE_4), REGOFF(V4F_FLAGS, EDI) ) |
85 | OR_L( CONST(VEC_SIZE_4), REGOFF(V4F_FLAGS, EDI) ) |
86 | 86 | ||
87 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
87 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
88 | MOV_L( CONST(4), REGOFF(V4F_SIZE, EDI) ) |
88 | MOV_L( CONST(4), REGOFF(V4F_SIZE, EDI) ) |
89 | 89 | ||
90 | SHL_L( CONST(4), ECX ) |
90 | SHL_L( CONST(4), ECX ) |
91 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
91 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
92 | 92 | ||
93 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
93 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
94 | ADD_L( EDI, ECX ) |
94 | ADD_L( EDI, ECX ) |
95 | 95 | ||
96 | ALIGNTEXT16 |
96 | ALIGNTEXT16 |
97 | LLBL(x86_p2_gr_loop): |
97 | LLBL(x86_p2_gr_loop): |
98 | 98 | ||
99 | FLD_S( SRC0 ) /* F4 */ |
99 | FLD_S( SRC0 ) /* F4 */ |
100 | FMUL_S( MAT0 ) |
100 | FMUL_S( MAT0 ) |
101 | FLD_S( SRC0 ) /* F5 F4 */ |
101 | FLD_S( SRC0 ) /* F5 F4 */ |
102 | FMUL_S( MAT1 ) |
102 | FMUL_S( MAT1 ) |
103 | FLD_S( SRC0 ) /* F6 F5 F4 */ |
103 | FLD_S( SRC0 ) /* F6 F5 F4 */ |
104 | FMUL_S( MAT2 ) |
104 | FMUL_S( MAT2 ) |
105 | FLD_S( SRC0 ) /* F7 F6 F5 F4 */ |
105 | FLD_S( SRC0 ) /* F7 F6 F5 F4 */ |
106 | FMUL_S( MAT3 ) |
106 | FMUL_S( MAT3 ) |
107 | 107 | ||
108 | FLD_S( SRC1 ) /* F0 F7 F6 F5 F4 */ |
108 | FLD_S( SRC1 ) /* F0 F7 F6 F5 F4 */ |
109 | FMUL_S( MAT4 ) |
109 | FMUL_S( MAT4 ) |
110 | FLD_S( SRC1 ) /* F1 F0 F7 F6 F5 F4 */ |
110 | FLD_S( SRC1 ) /* F1 F0 F7 F6 F5 F4 */ |
111 | FMUL_S( MAT5 ) |
111 | FMUL_S( MAT5 ) |
112 | FLD_S( SRC1 ) /* F2 F1 F0 F7 F6 F5 F4 */ |
112 | FLD_S( SRC1 ) /* F2 F1 F0 F7 F6 F5 F4 */ |
113 | FMUL_S( MAT6 ) |
113 | FMUL_S( MAT6 ) |
114 | FLD_S( SRC1 ) /* F3 F2 F1 F0 F7 F6 F5 F4 */ |
114 | FLD_S( SRC1 ) /* F3 F2 F1 F0 F7 F6 F5 F4 */ |
115 | FMUL_S( MAT7 ) |
115 | FMUL_S( MAT7 ) |
116 | 116 | ||
117 | FXCH( ST(3) ) /* F0 F2 F1 F3 F7 F6 F5 F4 */ |
117 | FXCH( ST(3) ) /* F0 F2 F1 F3 F7 F6 F5 F4 */ |
118 | FADDP( ST0, ST(7) ) /* F2 F1 F3 F7 F6 F5 F4 */ |
118 | FADDP( ST0, ST(7) ) /* F2 F1 F3 F7 F6 F5 F4 */ |
119 | FXCH( ST(1) ) /* F1 F2 F3 F7 F6 F5 F4 */ |
119 | FXCH( ST(1) ) /* F1 F2 F3 F7 F6 F5 F4 */ |
120 | FADDP( ST0, ST(5) ) /* F2 F3 F7 F6 F5 F4 */ |
120 | FADDP( ST0, ST(5) ) /* F2 F3 F7 F6 F5 F4 */ |
121 | FADDP( ST0, ST(3) ) /* F3 F7 F6 F5 F4 */ |
121 | FADDP( ST0, ST(3) ) /* F3 F7 F6 F5 F4 */ |
122 | FADDP( ST0, ST(1) ) /* F7 F6 F5 F4 */ |
122 | FADDP( ST0, ST(1) ) /* F7 F6 F5 F4 */ |
123 | 123 | ||
124 | FXCH( ST(3) ) /* F4 F6 F5 F7 */ |
124 | FXCH( ST(3) ) /* F4 F6 F5 F7 */ |
125 | FADD_S( MAT12 ) |
125 | FADD_S( MAT12 ) |
126 | FXCH( ST(2) ) /* F5 F6 F4 F7 */ |
126 | FXCH( ST(2) ) /* F5 F6 F4 F7 */ |
127 | FADD_S( MAT13 ) |
127 | FADD_S( MAT13 ) |
128 | FXCH( ST(1) ) /* F6 F5 F4 F7 */ |
128 | FXCH( ST(1) ) /* F6 F5 F4 F7 */ |
129 | FADD_S( MAT14 ) |
129 | FADD_S( MAT14 ) |
130 | FXCH( ST(3) ) /* F7 F5 F4 F6 */ |
130 | FXCH( ST(3) ) /* F7 F5 F4 F6 */ |
131 | FADD_S( MAT15 ) |
131 | FADD_S( MAT15 ) |
132 | 132 | ||
133 | FXCH( ST(2) ) /* F4 F5 F7 F6 */ |
133 | FXCH( ST(2) ) /* F4 F5 F7 F6 */ |
134 | FSTP_S( DST0 ) /* F5 F7 F6 */ |
134 | FSTP_S( DST0 ) /* F5 F7 F6 */ |
135 | FSTP_S( DST1 ) /* F7 F6 */ |
135 | FSTP_S( DST1 ) /* F7 F6 */ |
136 | FXCH( ST(1) ) /* F6 F7 */ |
136 | FXCH( ST(1) ) /* F6 F7 */ |
137 | FSTP_S( DST2 ) /* F7 */ |
137 | FSTP_S( DST2 ) /* F7 */ |
138 | FSTP_S( DST3 ) /* */ |
138 | FSTP_S( DST3 ) /* */ |
139 | 139 | ||
140 | LLBL(x86_p2_gr_skip): |
140 | LLBL(x86_p2_gr_skip): |
141 | 141 | ||
142 | ADD_L( CONST(16), EDI ) |
142 | ADD_L( CONST(16), EDI ) |
143 | ADD_L( EAX, ESI ) |
143 | ADD_L( EAX, ESI ) |
144 | CMP_L( ECX, EDI ) |
144 | CMP_L( ECX, EDI ) |
145 | JNE( LLBL(x86_p2_gr_loop) ) |
145 | JNE( LLBL(x86_p2_gr_loop) ) |
146 | 146 | ||
147 | LLBL(x86_p2_gr_done): |
147 | LLBL(x86_p2_gr_done): |
148 | 148 | ||
149 | POP_L( EDI ) |
149 | POP_L( EDI ) |
150 | POP_L( ESI ) |
150 | POP_L( ESI ) |
151 | RET |
151 | RET |
152 | #undef FRAME_OFFSET |
152 | #undef FRAME_OFFSET |
153 | 153 | ||
154 | 154 | ||
155 | 155 | ||
156 | 156 | ||
157 | ALIGNTEXT16 |
157 | ALIGNTEXT16 |
158 | GLOBL GLNAME( __mesa_x86_transform_points2_perspective ) |
158 | GLOBL GLNAME( _mesa_x86_transform_points2_perspective ) |
159 | HIDDEN(__mesa_x86_transform_points2_perspective) |
159 | HIDDEN(_mesa_x86_transform_points2_perspective) |
160 | GLNAME( __mesa_x86_transform_points2_perspective ): |
160 | GLNAME( _mesa_x86_transform_points2_perspective ): |
161 | 161 | ||
162 | #define FRAME_OFFSET 12 |
162 | #define FRAME_OFFSET 12 |
163 | PUSH_L( ESI ) |
163 | PUSH_L( ESI ) |
164 | PUSH_L( EDI ) |
164 | PUSH_L( EDI ) |
165 | PUSH_L( EBX ) |
165 | PUSH_L( EBX ) |
166 | 166 | ||
167 | MOV_L( ARG_SOURCE, ESI ) |
167 | MOV_L( ARG_SOURCE, ESI ) |
168 | MOV_L( ARG_DEST, EDI ) |
168 | MOV_L( ARG_DEST, EDI ) |
169 | 169 | ||
170 | MOV_L( ARG_MATRIX, EDX ) |
170 | MOV_L( ARG_MATRIX, EDX ) |
171 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
171 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
172 | 172 | ||
173 | TEST_L( ECX, ECX ) |
173 | TEST_L( ECX, ECX ) |
174 | JZ( LLBL(x86_p2_pr_done) ) |
174 | JZ( LLBL(x86_p2_pr_done) ) |
175 | 175 | ||
176 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
176 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
177 | OR_L( CONST(VEC_SIZE_4), REGOFF(V4F_FLAGS, EDI) ) |
177 | OR_L( CONST(VEC_SIZE_4), REGOFF(V4F_FLAGS, EDI) ) |
178 | 178 | ||
179 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
179 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
180 | MOV_L( CONST(4), REGOFF(V4F_SIZE, EDI) ) |
180 | MOV_L( CONST(4), REGOFF(V4F_SIZE, EDI) ) |
181 | 181 | ||
182 | SHL_L( CONST(4), ECX ) |
182 | SHL_L( CONST(4), ECX ) |
183 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
183 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
184 | 184 | ||
185 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
185 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
186 | ADD_L( EDI, ECX ) |
186 | ADD_L( EDI, ECX ) |
187 | 187 | ||
188 | MOV_L( MAT14, EBX ) |
188 | MOV_L( MAT14, EBX ) |
189 | 189 | ||
190 | ALIGNTEXT16 |
190 | ALIGNTEXT16 |
191 | LLBL(x86_p2_pr_loop): |
191 | LLBL(x86_p2_pr_loop): |
192 | 192 | ||
193 | FLD_S( SRC0 ) /* F4 */ |
193 | FLD_S( SRC0 ) /* F4 */ |
194 | FMUL_S( MAT0 ) |
194 | FMUL_S( MAT0 ) |
195 | 195 | ||
196 | FLD_S( SRC1 ) /* F1 F4 */ |
196 | FLD_S( SRC1 ) /* F1 F4 */ |
197 | FMUL_S( MAT5 ) |
197 | FMUL_S( MAT5 ) |
198 | 198 | ||
199 | FXCH( ST(1) ) /* F4 F1 */ |
199 | FXCH( ST(1) ) /* F4 F1 */ |
200 | FSTP_S( DST0 ) /* F1 */ |
200 | FSTP_S( DST0 ) /* F1 */ |
201 | FSTP_S( DST1 ) /* */ |
201 | FSTP_S( DST1 ) /* */ |
202 | MOV_L( EBX, DST2 ) |
202 | MOV_L( EBX, DST2 ) |
203 | MOV_L( CONST(FP_ZERO), DST3 ) |
203 | MOV_L( CONST(FP_ZERO), DST3 ) |
204 | 204 | ||
205 | LLBL(x86_p2_pr_skip): |
205 | LLBL(x86_p2_pr_skip): |
206 | 206 | ||
207 | ADD_L( CONST(16), EDI ) |
207 | ADD_L( CONST(16), EDI ) |
208 | ADD_L( EAX, ESI ) |
208 | ADD_L( EAX, ESI ) |
209 | CMP_L( ECX, EDI ) |
209 | CMP_L( ECX, EDI ) |
210 | JNE( LLBL(x86_p2_pr_loop) ) |
210 | JNE( LLBL(x86_p2_pr_loop) ) |
211 | 211 | ||
212 | LLBL(x86_p2_pr_done): |
212 | LLBL(x86_p2_pr_done): |
213 | 213 | ||
214 | POP_L( EBX ) |
214 | POP_L( EBX ) |
215 | POP_L( EDI ) |
215 | POP_L( EDI ) |
216 | POP_L( ESI ) |
216 | POP_L( ESI ) |
217 | RET |
217 | RET |
218 | #undef FRAME_OFFSET |
218 | #undef FRAME_OFFSET |
219 | 219 | ||
220 | 220 | ||
221 | 221 | ||
222 | 222 | ||
223 | ALIGNTEXT16 |
223 | ALIGNTEXT16 |
224 | GLOBL GLNAME( __mesa_x86_transform_points2_3d ) |
224 | GLOBL GLNAME( _mesa_x86_transform_points2_3d ) |
225 | HIDDEN(__mesa_x86_transform_points2_3d) |
225 | HIDDEN(_mesa_x86_transform_points2_3d) |
226 | GLNAME( __mesa_x86_transform_points2_3d ): |
226 | GLNAME( _mesa_x86_transform_points2_3d ): |
227 | 227 | ||
228 | #define FRAME_OFFSET 8 |
228 | #define FRAME_OFFSET 8 |
229 | PUSH_L( ESI ) |
229 | PUSH_L( ESI ) |
230 | PUSH_L( EDI ) |
230 | PUSH_L( EDI ) |
231 | 231 | ||
232 | MOV_L( ARG_SOURCE, ESI ) |
232 | MOV_L( ARG_SOURCE, ESI ) |
233 | MOV_L( ARG_DEST, EDI ) |
233 | MOV_L( ARG_DEST, EDI ) |
234 | 234 | ||
235 | MOV_L( ARG_MATRIX, EDX ) |
235 | MOV_L( ARG_MATRIX, EDX ) |
236 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
236 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
237 | 237 | ||
238 | TEST_L( ECX, ECX ) |
238 | TEST_L( ECX, ECX ) |
239 | JZ( LLBL(x86_p2_3dr_done) ) |
239 | JZ( LLBL(x86_p2_3dr_done) ) |
240 | 240 | ||
241 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
241 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
242 | OR_L( CONST(VEC_SIZE_3), REGOFF(V4F_FLAGS, EDI) ) |
242 | OR_L( CONST(VEC_SIZE_3), REGOFF(V4F_FLAGS, EDI) ) |
243 | 243 | ||
244 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
244 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
245 | MOV_L( CONST(3), REGOFF(V4F_SIZE, EDI) ) |
245 | MOV_L( CONST(3), REGOFF(V4F_SIZE, EDI) ) |
246 | 246 | ||
247 | SHL_L( CONST(4), ECX ) |
247 | SHL_L( CONST(4), ECX ) |
248 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
248 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
249 | 249 | ||
250 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
250 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
251 | ADD_L( EDI, ECX ) |
251 | ADD_L( EDI, ECX ) |
252 | 252 | ||
253 | ALIGNTEXT16 |
253 | ALIGNTEXT16 |
254 | LLBL(x86_p2_3dr_loop): |
254 | LLBL(x86_p2_3dr_loop): |
255 | 255 | ||
256 | FLD_S( SRC0 ) /* F4 */ |
256 | FLD_S( SRC0 ) /* F4 */ |
257 | FMUL_S( MAT0 ) |
257 | FMUL_S( MAT0 ) |
258 | FLD_S( SRC0 ) /* F5 F4 */ |
258 | FLD_S( SRC0 ) /* F5 F4 */ |
259 | FMUL_S( MAT1 ) |
259 | FMUL_S( MAT1 ) |
260 | FLD_S( SRC0 ) /* F6 F5 F4 */ |
260 | FLD_S( SRC0 ) /* F6 F5 F4 */ |
261 | FMUL_S( MAT2 ) |
261 | FMUL_S( MAT2 ) |
262 | 262 | ||
263 | FLD_S( SRC1 ) /* F0 F6 F5 F4 */ |
263 | FLD_S( SRC1 ) /* F0 F6 F5 F4 */ |
264 | FMUL_S( MAT4 ) |
264 | FMUL_S( MAT4 ) |
265 | FLD_S( SRC1 ) /* F1 F0 F6 F5 F4 */ |
265 | FLD_S( SRC1 ) /* F1 F0 F6 F5 F4 */ |
266 | FMUL_S( MAT5 ) |
266 | FMUL_S( MAT5 ) |
267 | FLD_S( SRC1 ) /* F2 F1 F0 F6 F5 F4 */ |
267 | FLD_S( SRC1 ) /* F2 F1 F0 F6 F5 F4 */ |
268 | FMUL_S( MAT6 ) |
268 | FMUL_S( MAT6 ) |
269 | 269 | ||
270 | FXCH( ST(2) ) /* F0 F1 F2 F6 F5 F4 */ |
270 | FXCH( ST(2) ) /* F0 F1 F2 F6 F5 F4 */ |
271 | FADDP( ST0, ST(5) ) /* F1 F2 F6 F5 F4 */ |
271 | FADDP( ST0, ST(5) ) /* F1 F2 F6 F5 F4 */ |
272 | FADDP( ST0, ST(3) ) /* F2 F6 F5 F4 */ |
272 | FADDP( ST0, ST(3) ) /* F2 F6 F5 F4 */ |
273 | FADDP( ST0, ST(1) ) /* F6 F5 F4 */ |
273 | FADDP( ST0, ST(1) ) /* F6 F5 F4 */ |
274 | 274 | ||
275 | FXCH( ST(2) ) /* F4 F5 F6 */ |
275 | FXCH( ST(2) ) /* F4 F5 F6 */ |
276 | FADD_S( MAT12 ) |
276 | FADD_S( MAT12 ) |
277 | FXCH( ST(1) ) /* F5 F4 F6 */ |
277 | FXCH( ST(1) ) /* F5 F4 F6 */ |
278 | FADD_S( MAT13 ) |
278 | FADD_S( MAT13 ) |
279 | FXCH( ST(2) ) /* F6 F4 F5 */ |
279 | FXCH( ST(2) ) /* F6 F4 F5 */ |
280 | FADD_S( MAT14 ) |
280 | FADD_S( MAT14 ) |
281 | 281 | ||
282 | FXCH( ST(1) ) /* F4 F6 F5 */ |
282 | FXCH( ST(1) ) /* F4 F6 F5 */ |
283 | FSTP_S( DST0 ) /* F6 F5 */ |
283 | FSTP_S( DST0 ) /* F6 F5 */ |
284 | FXCH( ST(1) ) /* F5 F6 */ |
284 | FXCH( ST(1) ) /* F5 F6 */ |
285 | FSTP_S( DST1 ) /* F6 */ |
285 | FSTP_S( DST1 ) /* F6 */ |
286 | FSTP_S( DST2 ) /* */ |
286 | FSTP_S( DST2 ) /* */ |
287 | 287 | ||
288 | LLBL(x86_p2_3dr_skip): |
288 | LLBL(x86_p2_3dr_skip): |
289 | 289 | ||
290 | ADD_L( CONST(16), EDI ) |
290 | ADD_L( CONST(16), EDI ) |
291 | ADD_L( EAX, ESI ) |
291 | ADD_L( EAX, ESI ) |
292 | CMP_L( ECX, EDI ) |
292 | CMP_L( ECX, EDI ) |
293 | JNE( LLBL(x86_p2_3dr_loop) ) |
293 | JNE( LLBL(x86_p2_3dr_loop) ) |
294 | 294 | ||
295 | LLBL(x86_p2_3dr_done): |
295 | LLBL(x86_p2_3dr_done): |
296 | 296 | ||
297 | POP_L( EDI ) |
297 | POP_L( EDI ) |
298 | POP_L( ESI ) |
298 | POP_L( ESI ) |
299 | RET |
299 | RET |
300 | #undef FRAME_OFFSET |
300 | #undef FRAME_OFFSET |
301 | 301 | ||
302 | 302 | ||
303 | 303 | ||
304 | 304 | ||
305 | ALIGNTEXT16 |
305 | ALIGNTEXT16 |
306 | GLOBL GLNAME( __mesa_x86_transform_points2_3d_no_rot ) |
306 | GLOBL GLNAME( _mesa_x86_transform_points2_3d_no_rot ) |
307 | HIDDEN(__mesa_x86_transform_points2_3d_no_rot) |
307 | HIDDEN(_mesa_x86_transform_points2_3d_no_rot) |
308 | GLNAME( __mesa_x86_transform_points2_3d_no_rot ): |
308 | GLNAME( _mesa_x86_transform_points2_3d_no_rot ): |
309 | 309 | ||
310 | #define FRAME_OFFSET 12 |
310 | #define FRAME_OFFSET 12 |
311 | PUSH_L( ESI ) |
311 | PUSH_L( ESI ) |
312 | PUSH_L( EDI ) |
312 | PUSH_L( EDI ) |
313 | PUSH_L( EBX ) |
313 | PUSH_L( EBX ) |
314 | 314 | ||
315 | MOV_L( ARG_SOURCE, ESI ) |
315 | MOV_L( ARG_SOURCE, ESI ) |
316 | MOV_L( ARG_DEST, EDI ) |
316 | MOV_L( ARG_DEST, EDI ) |
317 | 317 | ||
318 | MOV_L( ARG_MATRIX, EDX ) |
318 | MOV_L( ARG_MATRIX, EDX ) |
319 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
319 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
320 | 320 | ||
321 | TEST_L( ECX, ECX ) |
321 | TEST_L( ECX, ECX ) |
322 | JZ( LLBL(x86_p2_3dnrr_done) ) |
322 | JZ( LLBL(x86_p2_3dnrr_done) ) |
323 | 323 | ||
324 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
324 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
325 | OR_L( CONST(VEC_SIZE_3), REGOFF(V4F_FLAGS, EDI) ) |
325 | OR_L( CONST(VEC_SIZE_3), REGOFF(V4F_FLAGS, EDI) ) |
326 | 326 | ||
327 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
327 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
328 | MOV_L( CONST(3), REGOFF(V4F_SIZE, EDI) ) |
328 | MOV_L( CONST(3), REGOFF(V4F_SIZE, EDI) ) |
329 | 329 | ||
330 | SHL_L( CONST(4), ECX ) |
330 | SHL_L( CONST(4), ECX ) |
331 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
331 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
332 | 332 | ||
333 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
333 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
334 | ADD_L( EDI, ECX ) |
334 | ADD_L( EDI, ECX ) |
335 | 335 | ||
336 | MOV_L( MAT14, EBX ) |
336 | MOV_L( MAT14, EBX ) |
337 | 337 | ||
338 | ALIGNTEXT16 |
338 | ALIGNTEXT16 |
339 | LLBL(x86_p2_3dnrr_loop): |
339 | LLBL(x86_p2_3dnrr_loop): |
340 | 340 | ||
341 | FLD_S( SRC0 ) /* F4 */ |
341 | FLD_S( SRC0 ) /* F4 */ |
342 | FMUL_S( MAT0 ) |
342 | FMUL_S( MAT0 ) |
343 | 343 | ||
344 | FLD_S( SRC1 ) /* F1 F4 */ |
344 | FLD_S( SRC1 ) /* F1 F4 */ |
345 | FMUL_S( MAT5 ) |
345 | FMUL_S( MAT5 ) |
346 | 346 | ||
347 | FXCH( ST(1) ) /* F4 F1 */ |
347 | FXCH( ST(1) ) /* F4 F1 */ |
348 | FADD_S( MAT12 ) |
348 | FADD_S( MAT12 ) |
349 | FLD_S( MAT13 ) /* F5 F4 F1 */ |
349 | FLD_S( MAT13 ) /* F5 F4 F1 */ |
350 | FXCH( ST(2) ) /* F1 F4 F5 */ |
350 | FXCH( ST(2) ) /* F1 F4 F5 */ |
351 | FADDP( ST0, ST(2) ) /* F4 F5 */ |
351 | FADDP( ST0, ST(2) ) /* F4 F5 */ |
352 | 352 | ||
353 | FSTP_S( DST0 ) /* F5 */ |
353 | FSTP_S( DST0 ) /* F5 */ |
354 | FSTP_S( DST1 ) /* */ |
354 | FSTP_S( DST1 ) /* */ |
355 | MOV_L( EBX, DST2 ) |
355 | MOV_L( EBX, DST2 ) |
356 | 356 | ||
357 | LLBL(x86_p2_3dnrr_skip): |
357 | LLBL(x86_p2_3dnrr_skip): |
358 | 358 | ||
359 | ADD_L( CONST(16), EDI ) |
359 | ADD_L( CONST(16), EDI ) |
360 | ADD_L( EAX, ESI ) |
360 | ADD_L( EAX, ESI ) |
361 | CMP_L( ECX, EDI ) |
361 | CMP_L( ECX, EDI ) |
362 | JNE( LLBL(x86_p2_3dnrr_loop) ) |
362 | JNE( LLBL(x86_p2_3dnrr_loop) ) |
363 | 363 | ||
364 | LLBL(x86_p2_3dnrr_done): |
364 | LLBL(x86_p2_3dnrr_done): |
365 | 365 | ||
366 | POP_L( EBX ) |
366 | POP_L( EBX ) |
367 | POP_L( EDI ) |
367 | POP_L( EDI ) |
368 | POP_L( ESI ) |
368 | POP_L( ESI ) |
369 | RET |
369 | RET |
370 | #undef FRAME_OFFSET |
370 | #undef FRAME_OFFSET |
371 | 371 | ||
372 | 372 | ||
373 | 373 | ||
374 | 374 | ||
375 | ALIGNTEXT16 |
375 | ALIGNTEXT16 |
376 | GLOBL GLNAME( __mesa_x86_transform_points2_2d ) |
376 | GLOBL GLNAME( _mesa_x86_transform_points2_2d ) |
377 | HIDDEN(__mesa_x86_transform_points2_2d) |
377 | HIDDEN(_mesa_x86_transform_points2_2d) |
378 | GLNAME( __mesa_x86_transform_points2_2d ): |
378 | GLNAME( _mesa_x86_transform_points2_2d ): |
379 | 379 | ||
380 | #define FRAME_OFFSET 8 |
380 | #define FRAME_OFFSET 8 |
381 | PUSH_L( ESI ) |
381 | PUSH_L( ESI ) |
382 | PUSH_L( EDI ) |
382 | PUSH_L( EDI ) |
383 | 383 | ||
384 | MOV_L( ARG_SOURCE, ESI ) |
384 | MOV_L( ARG_SOURCE, ESI ) |
385 | MOV_L( ARG_DEST, EDI ) |
385 | MOV_L( ARG_DEST, EDI ) |
386 | 386 | ||
387 | MOV_L( ARG_MATRIX, EDX ) |
387 | MOV_L( ARG_MATRIX, EDX ) |
388 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
388 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
389 | 389 | ||
390 | TEST_L( ECX, ECX ) |
390 | TEST_L( ECX, ECX ) |
391 | JZ( LLBL(x86_p2_2dr_done) ) |
391 | JZ( LLBL(x86_p2_2dr_done) ) |
392 | 392 | ||
393 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
393 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
394 | OR_L( CONST(VEC_SIZE_2), REGOFF(V4F_FLAGS, EDI) ) |
394 | OR_L( CONST(VEC_SIZE_2), REGOFF(V4F_FLAGS, EDI) ) |
395 | 395 | ||
396 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
396 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
397 | MOV_L( CONST(2), REGOFF(V4F_SIZE, EDI) ) |
397 | MOV_L( CONST(2), REGOFF(V4F_SIZE, EDI) ) |
398 | 398 | ||
399 | SHL_L( CONST(4), ECX ) |
399 | SHL_L( CONST(4), ECX ) |
400 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
400 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
401 | 401 | ||
402 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
402 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
403 | ADD_L( EDI, ECX ) |
403 | ADD_L( EDI, ECX ) |
404 | 404 | ||
405 | ALIGNTEXT16 |
405 | ALIGNTEXT16 |
406 | LLBL(x86_p2_2dr_loop): |
406 | LLBL(x86_p2_2dr_loop): |
407 | 407 | ||
408 | FLD_S( SRC0 ) /* F4 */ |
408 | FLD_S( SRC0 ) /* F4 */ |
409 | FMUL_S( MAT0 ) |
409 | FMUL_S( MAT0 ) |
410 | FLD_S( SRC0 ) /* F5 F4 */ |
410 | FLD_S( SRC0 ) /* F5 F4 */ |
411 | FMUL_S( MAT1 ) |
411 | FMUL_S( MAT1 ) |
412 | 412 | ||
413 | FLD_S( SRC1 ) /* F0 F5 F4 */ |
413 | FLD_S( SRC1 ) /* F0 F5 F4 */ |
414 | FMUL_S( MAT4 ) |
414 | FMUL_S( MAT4 ) |
415 | FLD_S( SRC1 ) /* F1 F0 F5 F4 */ |
415 | FLD_S( SRC1 ) /* F1 F0 F5 F4 */ |
416 | FMUL_S( MAT5 ) |
416 | FMUL_S( MAT5 ) |
417 | 417 | ||
418 | FXCH( ST(1) ) /* F0 F1 F5 F4 */ |
418 | FXCH( ST(1) ) /* F0 F1 F5 F4 */ |
419 | FADDP( ST0, ST(3) ) /* F1 F5 F4 */ |
419 | FADDP( ST0, ST(3) ) /* F1 F5 F4 */ |
420 | FADDP( ST0, ST(1) ) /* F5 F4 */ |
420 | FADDP( ST0, ST(1) ) /* F5 F4 */ |
421 | 421 | ||
422 | FXCH( ST(1) ) /* F4 F5 */ |
422 | FXCH( ST(1) ) /* F4 F5 */ |
423 | FADD_S( MAT12 ) |
423 | FADD_S( MAT12 ) |
424 | FXCH( ST(1) ) /* F5 F4 */ |
424 | FXCH( ST(1) ) /* F5 F4 */ |
425 | FADD_S( MAT13 ) |
425 | FADD_S( MAT13 ) |
426 | 426 | ||
427 | FXCH( ST(1) ) /* F4 F5 */ |
427 | FXCH( ST(1) ) /* F4 F5 */ |
428 | FSTP_S( DST0 ) /* F5 */ |
428 | FSTP_S( DST0 ) /* F5 */ |
429 | FSTP_S( DST1 ) /* */ |
429 | FSTP_S( DST1 ) /* */ |
430 | 430 | ||
431 | LLBL(x86_p2_2dr_skip): |
431 | LLBL(x86_p2_2dr_skip): |
432 | 432 | ||
433 | ADD_L( CONST(16), EDI ) |
433 | ADD_L( CONST(16), EDI ) |
434 | ADD_L( EAX, ESI ) |
434 | ADD_L( EAX, ESI ) |
435 | CMP_L( ECX, EDI ) |
435 | CMP_L( ECX, EDI ) |
436 | JNE( LLBL(x86_p2_2dr_loop) ) |
436 | JNE( LLBL(x86_p2_2dr_loop) ) |
437 | 437 | ||
438 | LLBL(x86_p2_2dr_done): |
438 | LLBL(x86_p2_2dr_done): |
439 | 439 | ||
440 | POP_L( EDI ) |
440 | POP_L( EDI ) |
441 | POP_L( ESI ) |
441 | POP_L( ESI ) |
442 | RET |
442 | RET |
443 | #undef FRAME_OFFSET |
443 | #undef FRAME_OFFSET |
444 | 444 | ||
445 | 445 | ||
446 | 446 | ||
447 | 447 | ||
448 | ALIGNTEXT4 |
448 | ALIGNTEXT4 |
449 | GLOBL GLNAME( __mesa_x86_transform_points2_2d_no_rot ) |
449 | GLOBL GLNAME( _mesa_x86_transform_points2_2d_no_rot ) |
450 | HIDDEN(__mesa_x86_transform_points2_2d_no_rot) |
450 | HIDDEN(_mesa_x86_transform_points2_2d_no_rot) |
451 | GLNAME( __mesa_x86_transform_points2_2d_no_rot ): |
451 | GLNAME( _mesa_x86_transform_points2_2d_no_rot ): |
452 | 452 | ||
453 | #define FRAME_OFFSET 8 |
453 | #define FRAME_OFFSET 8 |
454 | PUSH_L( ESI ) |
454 | PUSH_L( ESI ) |
455 | PUSH_L( EDI ) |
455 | PUSH_L( EDI ) |
456 | 456 | ||
457 | MOV_L( ARG_SOURCE, ESI ) |
457 | MOV_L( ARG_SOURCE, ESI ) |
458 | MOV_L( ARG_DEST, EDI ) |
458 | MOV_L( ARG_DEST, EDI ) |
459 | 459 | ||
460 | MOV_L( ARG_MATRIX, EDX ) |
460 | MOV_L( ARG_MATRIX, EDX ) |
461 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
461 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
462 | 462 | ||
463 | TEST_L( ECX, ECX ) |
463 | TEST_L( ECX, ECX ) |
464 | JZ( LLBL(x86_p2_2dnrr_done) ) |
464 | JZ( LLBL(x86_p2_2dnrr_done) ) |
465 | 465 | ||
466 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
466 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
467 | OR_L( CONST(VEC_SIZE_2), REGOFF(V4F_FLAGS, EDI) ) |
467 | OR_L( CONST(VEC_SIZE_2), REGOFF(V4F_FLAGS, EDI) ) |
468 | 468 | ||
469 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
469 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
470 | MOV_L( CONST(2), REGOFF(V4F_SIZE, EDI) ) |
470 | MOV_L( CONST(2), REGOFF(V4F_SIZE, EDI) ) |
471 | 471 | ||
472 | SHL_L( CONST(4), ECX ) |
472 | SHL_L( CONST(4), ECX ) |
473 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
473 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
474 | 474 | ||
475 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
475 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
476 | ADD_L( EDI, ECX ) |
476 | ADD_L( EDI, ECX ) |
477 | 477 | ||
478 | ALIGNTEXT16 |
478 | ALIGNTEXT16 |
479 | LLBL(x86_p2_2dnrr_loop): |
479 | LLBL(x86_p2_2dnrr_loop): |
480 | 480 | ||
481 | FLD_S( SRC0 ) /* F4 */ |
481 | FLD_S( SRC0 ) /* F4 */ |
482 | FMUL_S( MAT0 ) |
482 | FMUL_S( MAT0 ) |
483 | 483 | ||
484 | FLD_S( SRC1 ) /* F1 F4 */ |
484 | FLD_S( SRC1 ) /* F1 F4 */ |
485 | FMUL_S( MAT5 ) |
485 | FMUL_S( MAT5 ) |
486 | 486 | ||
487 | FXCH( ST(1) ) /* F4 F1 */ |
487 | FXCH( ST(1) ) /* F4 F1 */ |
488 | FADD_S( MAT12 ) |
488 | FADD_S( MAT12 ) |
489 | FLD_S( MAT13 ) /* F5 F4 F1 */ |
489 | FLD_S( MAT13 ) /* F5 F4 F1 */ |
490 | FXCH( ST(2) ) /* F1 F4 F5 */ |
490 | FXCH( ST(2) ) /* F1 F4 F5 */ |
491 | FADDP( ST0, ST(2) ) /* F4 F5 */ |
491 | FADDP( ST0, ST(2) ) /* F4 F5 */ |
492 | 492 | ||
493 | FSTP_S( DST0 ) /* F5 */ |
493 | FSTP_S( DST0 ) /* F5 */ |
494 | FSTP_S( DST1 ) /* */ |
494 | FSTP_S( DST1 ) /* */ |
495 | 495 | ||
496 | LLBL(x86_p2_2dnrr_skip): |
496 | LLBL(x86_p2_2dnrr_skip): |
497 | 497 | ||
498 | ADD_L( CONST(16), EDI ) |
498 | ADD_L( CONST(16), EDI ) |
499 | ADD_L( EAX, ESI ) |
499 | ADD_L( EAX, ESI ) |
500 | CMP_L( ECX, EDI ) |
500 | CMP_L( ECX, EDI ) |
501 | JNE( LLBL(x86_p2_2dnrr_loop) ) |
501 | JNE( LLBL(x86_p2_2dnrr_loop) ) |
502 | 502 | ||
503 | LLBL(x86_p2_2dnrr_done): |
503 | LLBL(x86_p2_2dnrr_done): |
504 | 504 | ||
505 | POP_L( EDI ) |
505 | POP_L( EDI ) |
506 | POP_L( ESI ) |
506 | POP_L( ESI ) |
507 | RET |
507 | RET |
508 | #undef FRAME_OFFSET |
508 | #undef FRAME_OFFSET |
509 | 509 | ||
510 | 510 | ||
511 | 511 | ||
512 | 512 | ||
513 | ALIGNTEXT16 |
513 | ALIGNTEXT16 |
514 | GLOBL GLNAME( __mesa_x86_transform_points2_identity ) |
514 | GLOBL GLNAME( _mesa_x86_transform_points2_identity ) |
515 | HIDDEN(__mesa_x86_transform_points2_identity) |
515 | HIDDEN(_mesa_x86_transform_points2_identity) |
516 | GLNAME( __mesa_x86_transform_points2_identity ): |
516 | GLNAME( _mesa_x86_transform_points2_identity ): |
517 | 517 | ||
518 | #define FRAME_OFFSET 12 |
518 | #define FRAME_OFFSET 12 |
519 | PUSH_L( ESI ) |
519 | PUSH_L( ESI ) |
520 | PUSH_L( EDI ) |
520 | PUSH_L( EDI ) |
521 | PUSH_L( EBX ) |
521 | PUSH_L( EBX ) |
522 | 522 | ||
523 | MOV_L( ARG_SOURCE, ESI ) |
523 | MOV_L( ARG_SOURCE, ESI ) |
524 | MOV_L( ARG_DEST, EDI ) |
524 | MOV_L( ARG_DEST, EDI ) |
525 | 525 | ||
526 | MOV_L( ARG_MATRIX, EDX ) |
526 | MOV_L( ARG_MATRIX, EDX ) |
527 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
527 | MOV_L( REGOFF(V4F_COUNT, ESI), ECX ) |
528 | 528 | ||
529 | TEST_L( ECX, ECX ) |
529 | TEST_L( ECX, ECX ) |
530 | JZ( LLBL(x86_p2_ir_done) ) |
530 | JZ( LLBL(x86_p2_ir_done) ) |
531 | 531 | ||
532 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
532 | MOV_L( REGOFF(V4F_STRIDE, ESI), EAX ) |
533 | OR_L( CONST(VEC_SIZE_2), REGOFF(V4F_FLAGS, EDI) ) |
533 | OR_L( CONST(VEC_SIZE_2), REGOFF(V4F_FLAGS, EDI) ) |
534 | 534 | ||
535 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
535 | MOV_L( ECX, REGOFF(V4F_COUNT, EDI) ) |
536 | MOV_L( CONST(2), REGOFF(V4F_SIZE, EDI) ) |
536 | MOV_L( CONST(2), REGOFF(V4F_SIZE, EDI) ) |
537 | 537 | ||
538 | SHL_L( CONST(4), ECX ) |
538 | SHL_L( CONST(4), ECX ) |
539 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
539 | MOV_L( REGOFF(V4F_START, ESI), ESI ) |
540 | 540 | ||
541 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
541 | MOV_L( REGOFF(V4F_START, EDI), EDI ) |
542 | ADD_L( EDI, ECX ) |
542 | ADD_L( EDI, ECX ) |
543 | 543 | ||
544 | CMP_L( ESI, EDI ) |
544 | CMP_L( ESI, EDI ) |
545 | JE( LLBL(x86_p2_ir_done) ) |
545 | JE( LLBL(x86_p2_ir_done) ) |
546 | 546 | ||
547 | ALIGNTEXT16 |
547 | ALIGNTEXT16 |
548 | LLBL(x86_p2_ir_loop): |
548 | LLBL(x86_p2_ir_loop): |
549 | 549 | ||
550 | MOV_L( SRC0, EBX ) |
550 | MOV_L( SRC0, EBX ) |
551 | MOV_L( SRC1, EDX ) |
551 | MOV_L( SRC1, EDX ) |
552 | 552 | ||
553 | MOV_L( EBX, DST0 ) |
553 | MOV_L( EBX, DST0 ) |
554 | MOV_L( EDX, DST1 ) |
554 | MOV_L( EDX, DST1 ) |
555 | 555 | ||
556 | LLBL(x86_p2_ir_skip): |
556 | LLBL(x86_p2_ir_skip): |
557 | 557 | ||
558 | ADD_L( CONST(16), EDI ) |
558 | ADD_L( CONST(16), EDI ) |
559 | ADD_L( EAX, ESI ) |
559 | ADD_L( EAX, ESI ) |
560 | CMP_L( ECX, EDI ) |
560 | CMP_L( ECX, EDI ) |
561 | JNE( LLBL(x86_p2_ir_loop) ) |
561 | JNE( LLBL(x86_p2_ir_loop) ) |
562 | 562 | ||
563 | LLBL(x86_p2_ir_done): |
563 | LLBL(x86_p2_ir_done): |
564 | 564 | ||
565 | POP_L( EBX ) |
565 | POP_L( EBX ) |
566 | POP_L( EDI ) |
566 | POP_L( EDI ) |
567 | POP_L( ESI ) |
567 | POP_L( ESI ) |
568 | RET |
568 | RET |
569 | #undef FRAME_OFFSET |
569 | #undef FRAME_OFFSET |
570 | 570 | ||
571 | #if defined (__ELF__) && defined (__linux__) |
571 | #if defined (__ELF__) && defined (__linux__) |
572 | .section .note.GNU-stack,"",%progbits |
572 | .section .note.GNU-stack,"",%progbits |
573 | #endif |
573 | #endif |