1 .386P
2 .model FLAT
3 externdef _d_zistepu:dword
4 externdef _d_pzbuffer:dword
5 externdef _d_zistepv:dword
6 externdef _d_zrowbytes:dword
7 externdef _d_ziorigin:dword
8 externdef _r_turb_s:dword
9 externdef _r_turb_t:dword
10 externdef _r_turb_pdest:dword
11 externdef _r_turb_spancount:dword
12 externdef _r_turb_turb:dword
13 externdef _r_turb_pbase:dword
14 externdef _r_turb_sstep:dword
15 externdef _r_turb_tstep:dword
16 externdef _r_bmodelactive:dword
17 externdef _d_sdivzstepu:dword
18 externdef _d_tdivzstepu:dword
19 externdef _d_sdivzstepv:dword
20 externdef _d_tdivzstepv:dword
21 externdef _d_sdivzorigin:dword
22 externdef _d_tdivzorigin:dword
23 externdef _sadjust:dword
24 externdef _tadjust:dword
25 externdef _bbextents:dword
26 externdef _bbextentt:dword
27 externdef _cacheblock:dword
28 externdef _d_viewbuffer:dword
29 externdef _cachewidth:dword
30 externdef _d_pzbuffer:dword
31 externdef _d_zrowbytes:dword
32 externdef _d_zwidth:dword
33 externdef _d_scantable:dword
34 externdef _r_lightptr:dword
35 externdef _r_numvblocks:dword
36 externdef _prowdestbase:dword
37 externdef _pbasesource:dword
38 externdef _r_lightwidth:dword
39 externdef _lightright:dword
40 externdef _lightrightstep:dword
41 externdef _lightdeltastep:dword
42 externdef _lightdelta:dword
43 externdef _lightright:dword
44 externdef _lightdelta:dword
45 externdef _sourcetstep:dword
46 externdef _surfrowbytes:dword
47 externdef _lightrightstep:dword
48 externdef _lightdeltastep:dword
49 externdef _r_sourcemax:dword
50 externdef _r_stepback:dword
51 externdef _colormap:dword
52 externdef _blocksize:dword
53 externdef _sourcesstep:dword
54 externdef _lightleft:dword
55 externdef _blockdivshift:dword
56 externdef _blockdivmask:dword
57 externdef _lightleftstep:dword
58 externdef _r_origin:dword
59 externdef _r_ppn:dword
60 externdef _r_pup:dword
61 externdef _r_pright:dword
62 externdef _ycenter:dword
63 externdef _xcenter:dword
64 externdef _d_vrectbottom_particle:dword
65 externdef _d_vrectright_particle:dword
66 externdef _d_vrecty:dword
67 externdef _d_vrectx:dword
68 externdef _d_pix_shift:dword
69 externdef _d_pix_min:dword
70 externdef _d_pix_max:dword
71 externdef _d_y_aspect_shift:dword
72 externdef _screenwidth:dword
73 externdef _vright:dword
74 externdef _vup:dword
75 externdef _vpn:dword
76 externdef _BOPS_Error:dword
77 externdef _snd_scaletable:dword
78 externdef _paintbuffer:dword
79 externdef _snd_linear_count:dword
80 externdef _snd_p:dword
81 externdef _snd_vol:dword
82 externdef _snd_out:dword
83 externdef _r_leftclipped:dword
84 externdef _r_leftenter:dword
85 externdef _r_rightclipped:dword
86 externdef _r_rightenter:dword
87 externdef _modelorg:dword
88 externdef _xscale:dword
89 externdef _r_refdef:dword
90 externdef _yscale:dword
91 externdef _r_leftexit:dword
92 externdef _r_rightexit:dword
93 externdef _r_lastvertvalid:dword
94 externdef _cacheoffset:dword
95 externdef _newedges:dword
96 externdef _removeedges:dword
97 externdef _r_pedge:dword
98 externdef _r_framecount:dword
99 externdef _r_u1:dword
100 externdef _r_emitted:dword
101 externdef _edge_p:dword
102 externdef _surface_p:dword
103 externdef _surfaces:dword
104 externdef _r_lzi1:dword
105 externdef _r_v1:dword
106 externdef _r_ceilv1:dword
107 externdef _r_nearzi:dword
108 externdef _r_nearzionly:dword
109 externdef _edge_aftertail:dword
110 externdef _edge_tail:dword
111 externdef _current_iv:dword
112 externdef _edge_head_u_shift20:dword
113 externdef _span_p:dword
114 externdef _edge_head:dword
115 externdef _fv:dword
116 externdef _edge_tail_u_shift20:dword
117 externdef _r_apverts:dword
118 externdef _r_anumverts:dword
119 externdef _aliastransform:dword
120 externdef _r_avertexnormals:dword
121 externdef _r_plightvec:dword
122 externdef _r_ambientlight:dword
123 externdef _r_shadelight:dword
124 externdef _aliasxcenter:dword
125 externdef _aliasycenter:dword
126 externdef _a_sstepxfrac:dword
127 externdef _r_affinetridesc:dword
128 externdef _acolormap:dword
129 externdef _d_pcolormap:dword
130 externdef _r_affinetridesc:dword
131 externdef _d_sfrac:dword
132 externdef _d_ptex:dword
133 externdef _d_pedgespanpackage:dword
134 externdef _d_tfrac:dword
135 externdef _d_light:dword
136 externdef _d_zi:dword
137 externdef _d_pdest:dword
138 externdef _d_pz:dword
139 externdef _d_aspancount:dword
140 externdef _erroradjustup:dword
141 externdef _errorterm:dword
142 externdef _d_xdenom:dword
143 externdef _r_p0:dword
144 externdef _r_p1:dword
145 externdef _r_p2:dword
146 externdef _a_tstepxfrac:dword
147 externdef _r_sstepx:dword
148 externdef _r_tstepx:dword
149 externdef _a_ststepxwhole:dword
150 externdef _zspantable:dword
151 externdef _skintable:dword
152 externdef _r_zistepx:dword
153 externdef _erroradjustdown:dword
154 externdef _d_countextrastep:dword
155 externdef _ubasestep:dword
156 externdef _a_ststepxwhole:dword
157 externdef _a_tstepxfrac:dword
158 externdef _r_lstepx:dword
159 externdef _a_spans:dword
160 externdef _erroradjustdown:dword
161 externdef _d_pdestextrastep:dword
162 externdef _d_pzextrastep:dword
163 externdef _d_sfracextrastep:dword
164 externdef _d_ptexextrastep:dword
165 externdef _d_countextrastep:dword
166 externdef _d_tfracextrastep:dword
167 externdef _d_lightextrastep:dword
168 externdef _d_ziextrastep:dword
169 externdef _d_pdestbasestep:dword
170 externdef _d_pzbasestep:dword
171 externdef _d_sfracbasestep:dword
172 externdef _d_ptexbasestep:dword
173 externdef _ubasestep:dword
174 externdef _d_tfracbasestep:dword
175 externdef _d_lightbasestep:dword
176 externdef _d_zibasestep:dword
177 externdef _zspantable:dword
178 externdef _r_lstepy:dword
179 externdef _r_sstepy:dword
180 externdef _r_tstepy:dword
181 externdef _r_zistepy:dword
182 externdef _D_PolysetSetEdgeTable:dword
183 externdef _D_RasterizeAliasPolySmooth:dword
184 externdef float_point5:dword
185 externdef Float2ToThe31nd:dword
186 externdef izistep:dword
187 externdef izi:dword
188 externdef FloatMinus2ToThe31nd:dword
189 externdef float_1:dword
190 externdef float_particle_z_clip:dword
191 externdef float_minus_1:dword
192 externdef float_0:dword
193 externdef fp_16:dword
194 externdef fp_64k:dword
195 externdef fp_1m:dword
196 externdef fp_1m_minus_1:dword
197 externdef fp_8:dword
198 externdef entryvec_table:dword
199 externdef advancetable:dword
200 externdef sstep:dword
201 externdef tstep:dword
202 externdef pspantemp:dword
203 externdef counttemp:dword
204 externdef jumptemp:dword
205 externdef reciprocal_table:dword
206 externdef DP_Count:dword
207 externdef DP_u:dword
208 externdef DP_v:dword
209 externdef DP_32768:dword
210 externdef DP_Color:dword
211 externdef DP_Pix:dword
212 externdef DP_EntryTable:dword
213 externdef pbase:dword
214 externdef s:dword
215 externdef t:dword
216 externdef sfracf:dword
217 externdef tfracf:dword
218 externdef snext:dword
219 externdef tnext:dword
220 externdef spancountminus1:dword
221 externdef zi16stepu:dword
222 externdef sdivz16stepu:dword
223 externdef tdivz16stepu:dword
224 externdef zi8stepu:dword
225 externdef sdivz8stepu:dword
226 externdef tdivz8stepu:dword
227 externdef reciprocal_table_16:dword
228 externdef entryvec_table_16:dword
229 externdef ceil_cw:dword
230 externdef single_cw:dword
231 externdef fp_64kx64k:dword
232 externdef pz:dword
233 externdef spr8entryvec_table:dword
234_DATA SEGMENT
235_DATA ENDS
236_TEXT SEGMENT
237LClampHigh0:
238 mov esi,ds:dword ptr[_bbextents]
239 jmp LClampReentry0
240LClampHighOrLow0:
241 jg LClampHigh0
242 xor esi,esi
243 jmp LClampReentry0
244LClampHigh1:
245 mov edx,ds:dword ptr[_bbextentt]
246 jmp LClampReentry1
247LClampHighOrLow1:
248 jg LClampHigh1
249 xor edx,edx
250 jmp LClampReentry1
251LClampLow2:
252 mov ebp,4096
253 jmp LClampReentry2
254LClampHigh2:
255 mov ebp,ds:dword ptr[_bbextents]
256 jmp LClampReentry2
257LClampLow3:
258 mov ecx,4096
259 jmp LClampReentry3
260LClampHigh3:
261 mov ecx,ds:dword ptr[_bbextentt]
262 jmp LClampReentry3
263LClampLow4:
264 mov eax,4096
265 jmp LClampReentry4
266LClampHigh4:
267 mov eax,ds:dword ptr[_bbextents]
268 jmp LClampReentry4
269LClampLow5:
270 mov ebx,4096
271 jmp LClampReentry5
272LClampHigh5:
273 mov ebx,ds:dword ptr[_bbextentt]
274 jmp LClampReentry5
275 align 4
276 public _D_DrawSpans16
277_D_DrawSpans16:
278 push ebp
279 push edi
280 push esi
281 push ebx
282 fld ds:dword ptr[_d_sdivzstepu]
283 fmul ds:dword ptr[fp_16]
284 mov edx,ds:dword ptr[_cacheblock]
285 fld ds:dword ptr[_d_tdivzstepu]
286 fmul ds:dword ptr[fp_16]
287 mov ebx,ds:dword ptr[4+16+esp]
288 fld ds:dword ptr[_d_zistepu]
289 fmul ds:dword ptr[fp_16]
290 mov ds:dword ptr[pbase],edx
291 fstp ds:dword ptr[zi16stepu]
292 fstp ds:dword ptr[tdivz16stepu]
293 fstp ds:dword ptr[sdivz16stepu]
294LSpanLoop:
295 fild ds:dword ptr[4+ebx]
296 fild ds:dword ptr[0+ebx]
297 fld st(1)
298 fmul ds:dword ptr[_d_sdivzstepv]
299 fld st(1)
300 fmul ds:dword ptr[_d_sdivzstepu]
301 fld st(2)
302 fmul ds:dword ptr[_d_tdivzstepu]
303 fxch st(1)
304 faddp st(2),st(0)
305 fxch st(1)
306 fld st(3)
307 fmul ds:dword ptr[_d_tdivzstepv]
308 fxch st(1)
309 fadd ds:dword ptr[_d_sdivzorigin]
310 fxch st(4)
311 fmul ds:dword ptr[_d_zistepv]
312 fxch st(1)
313 faddp st(2),st(0)
314 fxch st(2)
315 fmul ds:dword ptr[_d_zistepu]
316 fxch st(1)
317 fadd ds:dword ptr[_d_tdivzorigin]
318 fxch st(2)
319 faddp st(1),st(0)
320 fld ds:dword ptr[fp_64k]
321 fxch st(1)
322 fadd ds:dword ptr[_d_ziorigin]
323 fdiv st(1),st(0)
324 mov ecx,ds:dword ptr[_d_viewbuffer]
325 mov eax,ds:dword ptr[4+ebx]
326 mov ds:dword ptr[pspantemp],ebx
327 mov edx,ds:dword ptr[_tadjust]
328 mov esi,ds:dword ptr[_sadjust]
329 mov edi,ds:dword ptr[_d_scantable+eax*4]
330 add edi,ecx
331 mov ecx,ds:dword ptr[0+ebx]
332 add edi,ecx
333 mov ecx,ds:dword ptr[8+ebx]
334 cmp ecx,16
335 ja LSetupNotLast1
336 dec ecx
337 jz LCleanup1
338 mov ds:dword ptr[spancountminus1],ecx
339 fxch st(1)
340 fld st(0)
341 fmul st(0),st(4)
342 fxch st(1)
343 fmul st(0),st(3)
344 fxch st(1)
345 fistp ds:dword ptr[s]
346 fistp ds:dword ptr[t]
347 fild ds:dword ptr[spancountminus1]
348 fld ds:dword ptr[_d_tdivzstepu]
349 fld ds:dword ptr[_d_zistepu]
350 fmul st(0),st(2)
351 fxch st(1)
352 fmul st(0),st(2)
353 fxch st(2)
354 fmul ds:dword ptr[_d_sdivzstepu]
355 fxch st(1)
356 faddp st(3),st(0)
357 fxch st(1)
358 faddp st(3),st(0)
359 faddp st(3),st(0)
360 fld ds:dword ptr[fp_64k]
361 fdiv st(0),st(1)
362 jmp LFDIVInFlight1
363LCleanup1:
364 fxch st(1)
365 fld st(0)
366 fmul st(0),st(4)
367 fxch st(1)
368 fmul st(0),st(3)
369 fxch st(1)
370 fistp ds:dword ptr[s]
371 fistp ds:dword ptr[t]
372 jmp LFDIVInFlight1
373 align 4
374LSetupNotLast1:
375 fxch st(1)
376 fld st(0)
377 fmul st(0),st(4)
378 fxch st(1)
379 fmul st(0),st(3)
380 fxch st(1)
381 fistp ds:dword ptr[s]
382 fistp ds:dword ptr[t]
383 fadd ds:dword ptr[zi16stepu]
384 fxch st(2)
385 fadd ds:dword ptr[sdivz16stepu]
386 fxch st(2)
387 fld ds:dword ptr[tdivz16stepu]
388 faddp st(2),st(0)
389 fld ds:dword ptr[fp_64k]
390 fdiv st(0),st(1)
391LFDIVInFlight1:
392 add esi,ds:dword ptr[s]
393 add edx,ds:dword ptr[t]
394 mov ebx,ds:dword ptr[_bbextents]
395 mov ebp,ds:dword ptr[_bbextentt]
396 cmp esi,ebx
397 ja LClampHighOrLow0
398LClampReentry0:
399 mov ds:dword ptr[s],esi
400 mov ebx,ds:dword ptr[pbase]
401 shl esi,16
402 cmp edx,ebp
403 mov ds:dword ptr[sfracf],esi
404 ja LClampHighOrLow1
405LClampReentry1:
406 mov ds:dword ptr[t],edx
407 mov esi,ds:dword ptr[s]
408 shl edx,16
409 mov eax,ds:dword ptr[t]
410 sar esi,16
411 mov ds:dword ptr[tfracf],edx
412 sar eax,16
413 mov edx,ds:dword ptr[_cachewidth]
414 imul eax,edx
415 add esi,ebx
416 add esi,eax
417 cmp ecx,16
418 jna LLastSegment
419LNotLastSegment:
420 fld st(0)
421 fmul st(0),st(4)
422 fxch st(1)
423 fmul st(0),st(3)
424 fxch st(1)
425 fistp ds:dword ptr[snext]
426 fistp ds:dword ptr[tnext]
427 mov eax,ds:dword ptr[snext]
428 mov edx,ds:dword ptr[tnext]
429 mov bl,ds:byte ptr[esi]
430 sub ecx,16
431 mov ebp,ds:dword ptr[_sadjust]
432 mov ds:dword ptr[counttemp],ecx
433 mov ecx,ds:dword ptr[_tadjust]
434 mov ds:byte ptr[edi],bl
435 add ebp,eax
436 add ecx,edx
437 mov eax,ds:dword ptr[_bbextents]
438 mov edx,ds:dword ptr[_bbextentt]
439 cmp ebp,4096
440 jl LClampLow2
441 cmp ebp,eax
442 ja LClampHigh2
443LClampReentry2:
444 cmp ecx,4096
445 jl LClampLow3
446 cmp ecx,edx
447 ja LClampHigh3
448LClampReentry3:
449 mov ds:dword ptr[snext],ebp
450 mov ds:dword ptr[tnext],ecx
451 sub ebp,ds:dword ptr[s]
452 sub ecx,ds:dword ptr[t]
453 mov eax,ecx
454 mov edx,ebp
455 sar eax,20
456 jz LZero
457 sar edx,20
458 mov ebx,ds:dword ptr[_cachewidth]
459 imul eax,ebx
460 jmp LSetUp1
461LZero:
462 sar edx,20
463 mov ebx,ds:dword ptr[_cachewidth]
464LSetUp1:
465 add eax,edx
466 mov edx,ds:dword ptr[tfracf]
467 mov ds:dword ptr[advancetable+4],eax
468 add eax,ebx
469 shl ebp,12
470 mov ebx,ds:dword ptr[sfracf]
471 shl ecx,12
472 mov ds:dword ptr[advancetable],eax
473 mov ds:dword ptr[tstep],ecx
474 add edx,ecx
475 sbb ecx,ecx
476 add ebx,ebp
477 adc esi,ds:dword ptr[advancetable+4+ecx*4]
478 add edx,ds:dword ptr[tstep]
479 sbb ecx,ecx
480 mov al,ds:byte ptr[esi]
481 add ebx,ebp
482 mov ds:byte ptr[1+edi],al
483 adc esi,ds:dword ptr[advancetable+4+ecx*4]
484 add edx,ds:dword ptr[tstep]
485 sbb ecx,ecx
486 add ebx,ebp
487 mov al,ds:byte ptr[esi]
488 adc esi,ds:dword ptr[advancetable+4+ecx*4]
489 add edx,ds:dword ptr[tstep]
490 sbb ecx,ecx
491 mov ds:byte ptr[2+edi],al
492 add ebx,ebp
493 mov al,ds:byte ptr[esi]
494 adc esi,ds:dword ptr[advancetable+4+ecx*4]
495 add edx,ds:dword ptr[tstep]
496 sbb ecx,ecx
497 mov ds:byte ptr[3+edi],al
498 add ebx,ebp
499 mov al,ds:byte ptr[esi]
500 adc esi,ds:dword ptr[advancetable+4+ecx*4]
501 add edx,ds:dword ptr[tstep]
502 sbb ecx,ecx
503 mov ds:byte ptr[4+edi],al
504 add ebx,ebp
505 mov al,ds:byte ptr[esi]
506 adc esi,ds:dword ptr[advancetable+4+ecx*4]
507 add edx,ds:dword ptr[tstep]
508 sbb ecx,ecx
509 mov ds:byte ptr[5+edi],al
510 add ebx,ebp
511 mov al,ds:byte ptr[esi]
512 adc esi,ds:dword ptr[advancetable+4+ecx*4]
513 add edx,ds:dword ptr[tstep]
514 sbb ecx,ecx
515 mov ds:byte ptr[6+edi],al
516 add ebx,ebp
517 mov al,ds:byte ptr[esi]
518 adc esi,ds:dword ptr[advancetable+4+ecx*4]
519 add edx,ds:dword ptr[tstep]
520 sbb ecx,ecx
521 mov ds:byte ptr[7+edi],al
522 add ebx,ebp
523 mov al,ds:byte ptr[esi]
524 adc esi,ds:dword ptr[advancetable+4+ecx*4]
525 mov ecx,ds:dword ptr[counttemp]
526 cmp ecx,16
527 ja LSetupNotLast2
528 dec ecx
529 jz LFDIVInFlight2
530 mov ds:dword ptr[spancountminus1],ecx
531 fild ds:dword ptr[spancountminus1]
532 fld ds:dword ptr[_d_zistepu]
533 fmul st(0),st(1)
534 fld ds:dword ptr[_d_tdivzstepu]
535 fmul st(0),st(2)
536 fxch st(1)
537 faddp st(3),st(0)
538 fxch st(1)
539 fmul ds:dword ptr[_d_sdivzstepu]
540 fxch st(1)
541 faddp st(3),st(0)
542 fld ds:dword ptr[fp_64k]
543 fxch st(1)
544 faddp st(4),st(0)
545 fdiv st(0),st(1)
546 jmp LFDIVInFlight2
547 align 4
548LSetupNotLast2:
549 fadd ds:dword ptr[zi16stepu]
550 fxch st(2)
551 fadd ds:dword ptr[sdivz16stepu]
552 fxch st(2)
553 fld ds:dword ptr[tdivz16stepu]
554 faddp st(2),st(0)
555 fld ds:dword ptr[fp_64k]
556 fdiv st(0),st(1)
557LFDIVInFlight2:
558 mov ds:dword ptr[counttemp],ecx
559 add edx,ds:dword ptr[tstep]
560 sbb ecx,ecx
561 mov ds:byte ptr[8+edi],al
562 add ebx,ebp
563 mov al,ds:byte ptr[esi]
564 adc esi,ds:dword ptr[advancetable+4+ecx*4]
565 add edx,ds:dword ptr[tstep]
566 sbb ecx,ecx
567 mov ds:byte ptr[9+edi],al
568 add ebx,ebp
569 mov al,ds:byte ptr[esi]
570 adc esi,ds:dword ptr[advancetable+4+ecx*4]
571 add edx,ds:dword ptr[tstep]
572 sbb ecx,ecx
573 mov ds:byte ptr[10+edi],al
574 add ebx,ebp
575 mov al,ds:byte ptr[esi]
576 adc esi,ds:dword ptr[advancetable+4+ecx*4]
577 add edx,ds:dword ptr[tstep]
578 sbb ecx,ecx
579 mov ds:byte ptr[11+edi],al
580 add ebx,ebp
581 mov al,ds:byte ptr[esi]
582 adc esi,ds:dword ptr[advancetable+4+ecx*4]
583 add edx,ds:dword ptr[tstep]
584 sbb ecx,ecx
585 mov ds:byte ptr[12+edi],al
586 add ebx,ebp
587 mov al,ds:byte ptr[esi]
588 adc esi,ds:dword ptr[advancetable+4+ecx*4]
589 add edx,ds:dword ptr[tstep]
590 sbb ecx,ecx
591 mov ds:byte ptr[13+edi],al
592 add ebx,ebp
593 mov al,ds:byte ptr[esi]
594 adc esi,ds:dword ptr[advancetable+4+ecx*4]
595 add edx,ds:dword ptr[tstep]
596 sbb ecx,ecx
597 mov ds:byte ptr[14+edi],al
598 add ebx,ebp
599 mov al,ds:byte ptr[esi]
600 adc esi,ds:dword ptr[advancetable+4+ecx*4]
601 add edi,16
602 mov ds:dword ptr[tfracf],edx
603 mov edx,ds:dword ptr[snext]
604 mov ds:dword ptr[sfracf],ebx
605 mov ebx,ds:dword ptr[tnext]
606 mov ds:dword ptr[s],edx
607 mov ds:dword ptr[t],ebx
608 mov ecx,ds:dword ptr[counttemp]
609 cmp ecx,16
610 mov ds:byte ptr[-1+edi],al
611 ja LNotLastSegment
612LLastSegment:
613 test ecx,ecx
614 jz LNoSteps
615 fld st(0)
616 fmul st(0),st(4)
617 fxch st(1)
618 fmul st(0),st(3)
619 fxch st(1)
620 fistp ds:dword ptr[snext]
621 fistp ds:dword ptr[tnext]
622 mov al,ds:byte ptr[esi]
623 mov ebx,ds:dword ptr[_tadjust]
624 mov ds:byte ptr[edi],al
625 mov eax,ds:dword ptr[_sadjust]
626 add eax,ds:dword ptr[snext]
627 add ebx,ds:dword ptr[tnext]
628 mov ebp,ds:dword ptr[_bbextents]
629 mov edx,ds:dword ptr[_bbextentt]
630 cmp eax,4096
631 jl LClampLow4
632 cmp eax,ebp
633 ja LClampHigh4
634LClampReentry4:
635 mov ds:dword ptr[snext],eax
636 cmp ebx,4096
637 jl LClampLow5
638 cmp ebx,edx
639 ja LClampHigh5
640LClampReentry5:
641 cmp ecx,1
642 je LOnlyOneStep
643 sub eax,ds:dword ptr[s]
644 sub ebx,ds:dword ptr[t]
645 add eax,eax
646 add ebx,ebx
647 imul ds:dword ptr[reciprocal_table_16-8+ecx*4]
648 mov ebp,edx
649 mov eax,ebx
650 imul ds:dword ptr[reciprocal_table_16-8+ecx*4]
651LSetEntryvec:
652 mov ebx,ds:dword ptr[entryvec_table_16+ecx*4]
653 mov eax,edx
654 mov ds:dword ptr[jumptemp],ebx
655 mov ecx,ebp
656 sar edx,16
657 mov ebx,ds:dword ptr[_cachewidth]
658 sar ecx,16
659 imul edx,ebx
660 add edx,ecx
661 mov ecx,ds:dword ptr[tfracf]
662 mov ds:dword ptr[advancetable+4],edx
663 add edx,ebx
664 shl ebp,16
665 mov ebx,ds:dword ptr[sfracf]
666 shl eax,16
667 mov ds:dword ptr[advancetable],edx
668 mov ds:dword ptr[tstep],eax
669 mov edx,ecx
670 add edx,eax
671 sbb ecx,ecx
672 add ebx,ebp
673 adc esi,ds:dword ptr[advancetable+4+ecx*4]
674 jmp dword ptr[jumptemp]
675LNoSteps:
676 mov al,ds:byte ptr[esi]
677 sub edi,15
678 jmp LEndSpan
679LOnlyOneStep:
680 sub eax,ds:dword ptr[s]
681 sub ebx,ds:dword ptr[t]
682 mov ebp,eax
683 mov edx,ebx
684 jmp LSetEntryvec
685 public Entry2_16, Entry3_16, Entry4_16, Entry5_16
686 public Entry6_16, Entry7_16, Entry8_16, Entry9_16
687 public Entry10_16, Entry11_16, Entry12_16, Entry13_16
688 public Entry14_16, Entry15_16, Entry16_16
689Entry2_16:
690 sub edi,14
691 mov al,ds:byte ptr[esi]
692 jmp LEntry2_16
693Entry3_16:
694 sub edi,13
695 add edx,eax
696 mov al,ds:byte ptr[esi]
697 sbb ecx,ecx
698 add ebx,ebp
699 adc esi,ds:dword ptr[advancetable+4+ecx*4]
700 jmp LEntry3_16
701Entry4_16:
702 sub edi,12
703 add edx,eax
704 mov al,ds:byte ptr[esi]
705 sbb ecx,ecx
706 add ebx,ebp
707 adc esi,ds:dword ptr[advancetable+4+ecx*4]
708 add edx,ds:dword ptr[tstep]
709 jmp LEntry4_16
710Entry5_16:
711 sub edi,11
712 add edx,eax
713 mov al,ds:byte ptr[esi]
714 sbb ecx,ecx
715 add ebx,ebp
716 adc esi,ds:dword ptr[advancetable+4+ecx*4]
717 add edx,ds:dword ptr[tstep]
718 jmp LEntry5_16
719Entry6_16:
720 sub edi,10
721 add edx,eax
722 mov al,ds:byte ptr[esi]
723 sbb ecx,ecx
724 add ebx,ebp
725 adc esi,ds:dword ptr[advancetable+4+ecx*4]
726 add edx,ds:dword ptr[tstep]
727 jmp LEntry6_16
728Entry7_16:
729 sub edi,9
730 add edx,eax
731 mov al,ds:byte ptr[esi]
732 sbb ecx,ecx
733 add ebx,ebp
734 adc esi,ds:dword ptr[advancetable+4+ecx*4]
735 add edx,ds:dword ptr[tstep]
736 jmp LEntry7_16
737Entry8_16:
738 sub edi,8
739 add edx,eax
740 mov al,ds:byte ptr[esi]
741 sbb ecx,ecx
742 add ebx,ebp
743 adc esi,ds:dword ptr[advancetable+4+ecx*4]
744 add edx,ds:dword ptr[tstep]
745 jmp LEntry8_16
746Entry9_16:
747 sub edi,7
748 add edx,eax
749 mov al,ds:byte ptr[esi]
750 sbb ecx,ecx
751 add ebx,ebp
752 adc esi,ds:dword ptr[advancetable+4+ecx*4]
753 add edx,ds:dword ptr[tstep]
754 jmp LEntry9_16
755Entry10_16:
756 sub edi,6
757 add edx,eax
758 mov al,ds:byte ptr[esi]
759 sbb ecx,ecx
760 add ebx,ebp
761 adc esi,ds:dword ptr[advancetable+4+ecx*4]
762 add edx,ds:dword ptr[tstep]
763 jmp LEntry10_16
764Entry11_16:
765 sub edi,5
766 add edx,eax
767 mov al,ds:byte ptr[esi]
768 sbb ecx,ecx
769 add ebx,ebp
770 adc esi,ds:dword ptr[advancetable+4+ecx*4]
771 add edx,ds:dword ptr[tstep]
772 jmp LEntry11_16
773Entry12_16:
774 sub edi,4
775 add edx,eax
776 mov al,ds:byte ptr[esi]
777 sbb ecx,ecx
778 add ebx,ebp
779 adc esi,ds:dword ptr[advancetable+4+ecx*4]
780 add edx,ds:dword ptr[tstep]
781 jmp LEntry12_16
782Entry13_16:
783 sub edi,3
784 add edx,eax
785 mov al,ds:byte ptr[esi]
786 sbb ecx,ecx
787 add ebx,ebp
788 adc esi,ds:dword ptr[advancetable+4+ecx*4]
789 add edx,ds:dword ptr[tstep]
790 jmp LEntry13_16
791Entry14_16:
792 sub edi,2
793 add edx,eax
794 mov al,ds:byte ptr[esi]
795 sbb ecx,ecx
796 add ebx,ebp
797 adc esi,ds:dword ptr[advancetable+4+ecx*4]
798 add edx,ds:dword ptr[tstep]
799 jmp LEntry14_16
800Entry15_16:
801 dec edi
802 add edx,eax
803 mov al,ds:byte ptr[esi]
804 sbb ecx,ecx
805 add ebx,ebp
806 adc esi,ds:dword ptr[advancetable+4+ecx*4]
807 add edx,ds:dword ptr[tstep]
808 jmp LEntry15_16
809Entry16_16:
810 add edx,eax
811 mov al,ds:byte ptr[esi]
812 sbb ecx,ecx
813 add ebx,ebp
814 adc esi,ds:dword ptr[advancetable+4+ecx*4]
815 add edx,ds:dword ptr[tstep]
816 sbb ecx,ecx
817 mov ds:byte ptr[1+edi],al
818 add ebx,ebp
819 mov al,ds:byte ptr[esi]
820 adc esi,ds:dword ptr[advancetable+4+ecx*4]
821 add edx,ds:dword ptr[tstep]
822LEntry15_16:
823 sbb ecx,ecx
824 mov ds:byte ptr[2+edi],al
825 add ebx,ebp
826 mov al,ds:byte ptr[esi]
827 adc esi,ds:dword ptr[advancetable+4+ecx*4]
828 add edx,ds:dword ptr[tstep]
829LEntry14_16:
830 sbb ecx,ecx
831 mov ds:byte ptr[3+edi],al
832 add ebx,ebp
833 mov al,ds:byte ptr[esi]
834 adc esi,ds:dword ptr[advancetable+4+ecx*4]
835 add edx,ds:dword ptr[tstep]
836LEntry13_16:
837 sbb ecx,ecx
838 mov ds:byte ptr[4+edi],al
839 add ebx,ebp
840 mov al,ds:byte ptr[esi]
841 adc esi,ds:dword ptr[advancetable+4+ecx*4]
842 add edx,ds:dword ptr[tstep]
843LEntry12_16:
844 sbb ecx,ecx
845 mov ds:byte ptr[5+edi],al
846 add ebx,ebp
847 mov al,ds:byte ptr[esi]
848 adc esi,ds:dword ptr[advancetable+4+ecx*4]
849 add edx,ds:dword ptr[tstep]
850LEntry11_16:
851 sbb ecx,ecx
852 mov ds:byte ptr[6+edi],al
853 add ebx,ebp
854 mov al,ds:byte ptr[esi]
855 adc esi,ds:dword ptr[advancetable+4+ecx*4]
856 add edx,ds:dword ptr[tstep]
857LEntry10_16:
858 sbb ecx,ecx
859 mov ds:byte ptr[7+edi],al
860 add ebx,ebp
861 mov al,ds:byte ptr[esi]
862 adc esi,ds:dword ptr[advancetable+4+ecx*4]
863 add edx,ds:dword ptr[tstep]
864LEntry9_16:
865 sbb ecx,ecx
866 mov ds:byte ptr[8+edi],al
867 add ebx,ebp
868 mov al,ds:byte ptr[esi]
869 adc esi,ds:dword ptr[advancetable+4+ecx*4]
870 add edx,ds:dword ptr[tstep]
871LEntry8_16:
872 sbb ecx,ecx
873 mov ds:byte ptr[9+edi],al
874 add ebx,ebp
875 mov al,ds:byte ptr[esi]
876 adc esi,ds:dword ptr[advancetable+4+ecx*4]
877 add edx,ds:dword ptr[tstep]
878LEntry7_16:
879 sbb ecx,ecx
880 mov ds:byte ptr[10+edi],al
881 add ebx,ebp
882 mov al,ds:byte ptr[esi]
883 adc esi,ds:dword ptr[advancetable+4+ecx*4]
884 add edx,ds:dword ptr[tstep]
885LEntry6_16:
886 sbb ecx,ecx
887 mov ds:byte ptr[11+edi],al
888 add ebx,ebp
889 mov al,ds:byte ptr[esi]
890 adc esi,ds:dword ptr[advancetable+4+ecx*4]
891 add edx,ds:dword ptr[tstep]
892LEntry5_16:
893 sbb ecx,ecx
894 mov ds:byte ptr[12+edi],al
895 add ebx,ebp
896 mov al,ds:byte ptr[esi]
897 adc esi,ds:dword ptr[advancetable+4+ecx*4]
898 add edx,ds:dword ptr[tstep]
899LEntry4_16:
900 sbb ecx,ecx
901 mov ds:byte ptr[13+edi],al
902 add ebx,ebp
903 mov al,ds:byte ptr[esi]
904 adc esi,ds:dword ptr[advancetable+4+ecx*4]
905LEntry3_16:
906 mov ds:byte ptr[14+edi],al
907 mov al,ds:byte ptr[esi]
908LEntry2_16:
909LEndSpan:
910 fstp st(0)
911 fstp st(0)
912 fstp st(0)
913 mov ebx,ds:dword ptr[pspantemp]
914 mov ebx,ds:dword ptr[12+ebx]
915 test ebx,ebx
916 mov ds:byte ptr[15+edi],al
917 jnz LSpanLoop
918 pop ebx
919 pop esi
920 pop edi
921 pop ebp
922 ret
923_TEXT ENDS
924 END
925