Main Page | Alphabetical List | Compound List | File List | Compound Members | File Members

x86span555.c File Reference

#include "windows.h"
#include "softdrv.h"
#include "basetype.h"
#include "drawspan.h"
#include "render.h"

Go to the source code of this file.

Compounds

struct  EdgeAsmFPUTag

Typedefs

typedef EdgeAsmFPUTag EdgeAsmFPU

Functions

void DrawScanLineGouraudNoZ_Asm555X86FPU (EdgeAsmFPU *pLeft, EdgeAsmFPU *pRight)
void DrawScanLineGouraudNoZTrans_Asm555X86FPU (EdgeAsmFPU *pLeft, EdgeAsmFPU *pRight)
void DrawScanLineGouraudZBuffer_Asm555X86FPU (EdgeAsmFPU *pLeft, EdgeAsmFPU *pRight)
void DrawScanLineGouraudZBufferNoZWrite_Asm555X86FPU (EdgeAsmFPU *pLeft, EdgeAsmFPU *pRight)
void DrawScanLineGouraudNoZBufferZWrite_Asm555X86FPU (EdgeAsmFPU *pLeft, EdgeAsmFPU *pRight)
void DrawScanLineGouraudZBufferTrans_Asm555X86FPU (EdgeAsmFPU *pLeft, EdgeAsmFPU *pRight)
void DrawScanLineGouraudZBufferNoZWriteTrans_Asm555X86FPU (EdgeAsmFPU *pLeft, EdgeAsmFPU *pRight)
void DrawScanLineGouraudNoZBufferZWriteTrans_Asm555X86FPU (EdgeAsmFPU *pLeft, EdgeAsmFPU *pRight)
void DrawScanLineGouraudNoZSolid_Asm555X86FPU (EdgeAsmFPU *pLeft, EdgeAsmFPU *pRight)
void DrawScanLineGouraudNoZBufferZWriteSolid_Asm555X86FPU (EdgeAsmFPU *pLeft, EdgeAsmFPU *pRight)
void DrawScanLineGouraudZBufferSolid_Asm555X86FPU (EdgeAsmFPU *pLeft, EdgeAsmFPU *pRight)
void DrawScanLineGouraudZBufferNoZWriteSolid_Asm555X86FPU (EdgeAsmFPU *pLeft, EdgeAsmFPU *pRight)
void DrawSpan16_AsmLitZBuffer555X86FPU (int32 x1, int32 x2, int32 y)
void DrawSpan16_AsmLitZWrite555X86FPU (int32 x1, int32 x2, int32 y)
void DrawSpan16_AsmGouraudZBuffer555X86FPU (int32 x1, int32 x2, int32 y, int32 r1, int32 g1, int32 b1, int32 r2, int32 g2, int32 b2)
void DrawSpan16_AsmGouraudZWrite555X86FPU (int32 x1, int32 x2, int32 y, int32 r1, int32 g1, int32 b1, int32 r2, int32 g2, int32 b2)
void DrawSpan16_AsmLit555X86FPU (int32 x1, int32 x2, int32 y)
void DrawSpan16_AsmGouraudZBufferTrans555X86FPU (int32 x1, int32 x2, int32 y, int32 r1, int32 g1, int32 b1, int32 r2, int32 g2, int32 b2)


Typedef Documentation

typedef struct EdgeAsmFPUTag EdgeAsmFPU
 


Function Documentation

void DrawScanLineGouraudNoZ_Asm555X86FPU EdgeAsmFPU pLeft,
EdgeAsmFPU pRight
 

Definition at line 47 of file x86span555.c.

References B, Blue, BLUEMASK2, Bucket, Bucket2, Dest, G, GBitPtrHalf, GHMaskShifted, Green, GREENMASK2, GWMask, Magic, or, R, r, Real65536, Red, REDMASK2, TDest, Two, VShift, widTemp, and EdgeAsmFPUTag::X.

Referenced by RenderMiscTexturePoly().

00048 {
00049         TDest   =Dest;
00050         Red             =Green  =0;
00051         _asm
00052         {
00053                 push    ebx
00054                 push    ecx
00055                 push    esi
00056                 push    edi
00057 
00058                 mov             ebx,pLeft
00059                 mov     ecx,pRight
00060                 mov     eax,[ebx]EdgeAsmFPU.X
00061                 mov     edx,[ecx]EdgeAsmFPU.X
00062                 sub     edx,eax
00063                 jle             GouraudReturnNoZ
00064 
00065                 mov             esi,eax
00066                 inc             edx
00067                 shl             eax,1
00068                 add             TDest,eax
00069                 test    esi,1                                   //dword align left side
00070                 jz              NoSinglePixie
00071 
00072                 //odd sized spans write one pixel to dword align
00073                 fld     dword ptr [ebx]EdgeAsmFPU.u             ; UL
00074                 fmul    [Real65536]                                             ; UL16
00075                 fld     dword ptr [ebx]EdgeAsmFPU.v             ; VL   UL16
00076                 fmul    [Real65536]                                             ; VL16 UL16
00077                 fld             dword ptr [ebx]EdgeAsmFPU.r             ; RL   VL16 UL16
00078                 fld             dword ptr [ebx]EdgeAsmFPU.g             ; GL   RL   VL16 UL16
00079                 fld             dword ptr [ebx]EdgeAsmFPU.b             ; BL   GL   RL   VL16 UL16
00080                 fxch    st(4)                                                   ; UL16 GL   RL   VL16 BL
00081                 fistp   [u16]                                                   ; GL   RL   VL16 BL
00082                 fxch    st(2)                                                   ; VL16 RL   GL   BL
00083                 fistp   [v16]                                                   ; RL   GL   BL
00084 
00085                 mov     [widTemp],edx
00086 
00087                 mov             ecx,[VShift]
00088                 mov             ebx,[GHMaskShifted]
00089 
00090                 mov             esi,[GWMask]
00091                 mov             edi,[v16]
00092 
00093                 mov             edx,dword ptr[u16]
00094 
00095                 shr             edi,cl
00096 
00097                 shr             edx,16
00098                 xor             eax,eax
00099 
00100                 and             edi,ebx
00101                 and             edx,esi
00102 
00103                 add             edi,edx
00104 
00105                 add             edi,GBitPtrHalf
00106                 mov             ax,word ptr[edi*2]
00107 
00108                 mov             ebx,eax
00109                 and             eax,REDMASK2
00110 
00111                 mov             ecx,ebx
00112                 and             ebx,GREENMASK2
00113 
00114                 mov             dword ptr[Red],eax
00115                 and             ecx,BLUEMASK2
00116 
00117                 mov             dword ptr[Green],ebx
00118                 mov             dword ptr[Blue],ecx
00119 
00120                 fimul   dword ptr[Red]                                  ; R    GL   BL
00121                 fxch    st(1)                                                   ; GL   R    BL
00122                 fimul   dword ptr[Green]                                ; G    R    BL
00123                 fxch    st(1)                                                   ; R    G    BL
00124                 fadd    qword ptr[Magic]                                ; Rk   G    BL
00125                 fxch    st(2)                                                   ; BL   G    Rk
00126                 fimul   [Blue]                                                  ; B    G    Rk
00127                 fxch    st(1)                                                   ; G    B    Rk
00128                 fadd    qword ptr[Magic]                                ; Gk   B    Rk
00129                 fxch    st(2)                                                   ; Rk   B    Gk
00130                 fstp    qword ptr[Bucket]                               ; B    Gk
00131                 fadd    qword ptr[Magic]                                ; Bk   Gk
00132                 fxch    st(1)                                                   ; Gk   Bk
00133                 fstp    qword ptr[Bucket2]                              ; Bk
00134 
00135                 mov             edx,dword ptr[Bucket]
00136                 mov             eax,dword ptr[Bucket2]
00137 
00138                 and             edx,REDMASK2
00139                 and             eax,GREENMASK2
00140 
00141                 fstp    qword ptr[Bucket]
00142 
00143                 mov             ecx,TDest
00144                 mov             ebx,dword ptr[Bucket]
00145 
00146                 and             ebx,BLUEMASK2
00147                 or              edx,eax
00148 
00149                 add             TDest,2
00150                 or              edx,ebx
00151 
00152                 mov             ebx,pLeft
00153                 mov             word ptr[ecx],dx
00154                 mov     edx,[widTemp]
00155                 mov     ecx,pRight
00156                 dec             edx
00157                 jz              GouraudReturnNoZ
00158                 mov             esi,edx
00159                 and             esi,1
00160                 sub             edx,esi
00161                 jz              GouraudReturnNoZ
00162 
00163 NoSinglePixie:
00164                 mov     [widTemp],edx                 ; just for a temp
00165                 shr             edx,1
00166 
00167                 ; try to keep fmul fxch pairs seperated to avoid stalling
00168                 ; calc this scanlines steps           ; FPU Stack
00169                                                       ; st0  st1  st2  st3  st4  st5  st6  st7
00170                 fild    dword ptr [widTemp]           ; WID
00171 
00172                 mov     [widTemp],edx                 ; Color interps doubled
00173 
00174                 fld     dword ptr [ecx]EdgeAsmFPU.u      ; UR   WID
00175                 fld     dword ptr [ebx]EdgeAsmFPU.u      ; UL   UR   WID
00176                 fsub    st(1), st                     ; UL   UD   WID
00177                 fld     dword ptr [ecx]EdgeAsmFPU.v      ; VR   UL   UD   WID
00178                 fxch    st(1)                         ; UL   VR   UD   WID
00179                 fmul    [Real65536]                   ; UL16 VR   UD   WID
00180                 fld     dword ptr [ebx]EdgeAsmFPU.v      ; VL   UL16 VR   UD   WID
00181                 fsub    st(2), st                     ; VL   UL16 VD   UD   WID
00182                 fild    dword ptr [ecx]EdgeAsmFPU.R      ; RR   VL   UL16 VD   UD   WID
00183                 fxch    st(3)                         ; VD   VL   UL16 RR   UD   WID
00184                 fmul    [Real65536]                   ; VD16 VL   UL16 RR   UD   WID
00185                 fild    dword ptr [ebx]EdgeAsmFPU.R      ; RL   VD16 VL   UL16 RR   UD   WID
00186                 fsub    st(4),st                      ; RL   VD16 VL   UL16 RD   UD   WID
00187                 fxch    st(5)                         ; UD   VD16 VL   UL16 RD   RL   WID
00188                 fmul    [Real65536]                   ; UD16 VD16 VL   UL16 RD   RL   WID
00189                 fxch    st(2)                                             ; VL   VD16 UD16 UL16 RD   RL   WID
00190                 fmul    [Real65536]                   ; VL16 VD16 UD16 UL16 RD   RL   WID
00191                 fxch    st(3)                                                   ; UL16 VD16 UD16 VL16 RD   RL   WID
00192                 fistp   [u16]                                                   ; VD16 UD16 VL16 RD   RL   WID
00193                 fxch    st(2)                                                   ; VL16 UD16 VD16 RD   RL   WID
00194                 fistp   [v16]                                                   ; UD16 VD16 RD   RL   WID
00195                 fld1                                                                    ; 1    UD16 VD16 RD   RL   WID
00196                 fdivrp  st(5),st                                                ; UD16 VD16 RD   RL   DWID
00197 
00198                 //let that cook
00199 
00200                 fmul    st,st(4)                                                ; USTP VD16 RD   RL   DWID
00201                 fild    [ecx]EdgeAsmFPU.G                                       ; RG   USTP VD16 RD   RL   DWID
00202                 fild    [ebx]EdgeAsmFPU.G                                       ; LG   RG   USTP VD16 RD   RL   DWID
00203                 fsub    st(1),st                                                ; LG   GD   USTP VD16 RD   RL   DWID
00204                 fxch    st(2)                                                   ; USTP GD   LG   VD16 RD   RL   DWID
00205                 fistp   [UStep]                                                 ; GD   LG   VD16 RD   RL   DWID
00206                 fild    [ecx]EdgeAsmFPU.B                                       ; RB   GD   LG   VD16 RD   RL   DWID
00207                 fild    [ebx]EdgeAsmFPU.B                                       ; LB   RB   GD   LG   VD16 RD   RL   DWID
00208                 fsub    st(1),st                                                ; LB   BD   GD   LG   VD16 RD   RL   DWID
00209                 fxch    st(4)                                                   ; VD16 BD   GD   LG   LB   RD   RL   DWID
00210                 fmul    st,st(7)                                                ; VSTP BD   GD   LG   LB   RD   RL   DWID
00211                 fxch    st(7)                                                   ; DWID BD   GD   LG   LB   RD   RL   VSTP
00212                 fmul    dword ptr[Two]                                  ; DW2  BD   GD   LG   LB   RD   RL   VSTP
00213                 fxch    st(7)                                                   ; VSTP BD   GD   LG   LB   RD   RL   DW2
00214                 fxch    st(5)                                                   ; RD   BD   GD   LG   LB   VSTP RL   DW2
00215                 fmul    st,st(7)                                                ; RI   BD   GD   LG   LB   VSTP RL   DW2
00216                 frndint
00217                 fxch    st(2)                                                   ; GD   BD   RI   LG   LB   VSTP RL   DW2
00218                 fmul    st,st(7)                                                ; GI   BD   RI   LG   LB   VSTP RL   DW2
00219                 frndint
00220                 fxch    st(7)                                                   ; DW2  BD   RI   LG   LB   VSTP RL   GI
00221                 fmulp   st(1),st                                                ; BI   RI   LG   LB   VSTP RL   GI
00222                 frndint
00223                 fxch    st(4)                                                   ; VSTP RI   LG   LB   BI   RL   GI
00224                 fistp   [VStep]                                                 ; RI   LG   LB   BI   RL   GI
00225 
00226                 push    ebp
00227 
00228 PixieLoop:
00229                 mov             ecx,[VShift]
00230                 mov             ebx,[GHMaskShifted]
00231 
00232                 mov             ebp,[GWMask]
00233                 mov             edi,[v16]
00234 
00235                 mov             edx,dword ptr[u16]
00236                 mov             esi,edi
00237 
00238                 mov             eax,edx
00239 
00240                 shr             edi,cl
00241                 add             esi,[VStep]
00242 
00243                 shr             edx,16
00244                 add             eax,[UStep]
00245 
00246                 and             edi,ebx
00247                 and             edx,ebp
00248 
00249                 add             edi,edx
00250                 mov             edx,eax
00251 
00252                 add             edi,GBitPtrHalf
00253                 add             eax,[UStep]
00254 
00255                 mov             [u16],eax
00256                 mov             ax,word ptr[edi*2]
00257 
00258                 mov             edi,esi
00259                 add             esi,[VStep]
00260 
00261                 shr             edx,16
00262                 mov             [v16],esi
00263 
00264                 shr             edi,cl
00265                 and             edx,ebp
00266 
00267                 mov             esi,GBitPtrHalf
00268                 and             edi,ebx
00269 
00270                 shl             eax,16
00271                 add             esi,edx
00272 
00273                 add             esi,edi
00274 
00275                 mov             ax,word ptr[esi*2]
00276 
00277                 mov             ebx,eax
00278                 and             eax,REDMASK2
00279 
00280                 mov             ecx,ebx
00281                 and             ebx,GREENMASK2
00282 
00283                 mov             dword ptr[Red],eax
00284                 and             ecx,BLUEMASK2
00285 
00286                 mov             dword ptr[Green],ebx
00287                 mov             dword ptr[Blue],ecx
00288 
00289                 fild    qword ptr[Red]                                  ; r    RI   LG   LB   BI   RL   GI
00290                 fmul    st,st(5)                                                ; R    RI   LG   LB   BI   RL   GI
00291                 fild    qword ptr[Green]                                ; g    R    RI   LG   LB   BI   RL   GI
00292                 fmul    st,st(3)                                                ; G    R    RI   LG   LB   BI   RL   GI
00293                 fxch    st(6)                                                   ; RL   R    RI   LG   LB   BI   G    GI
00294                 fadd    st,st(2)                                                ; RL2  R    RI   LG   LB   BI   G    GI
00295                 fxch    st(3)                                                   ; LG   R    RI   RL2  LB   BI   G    GI
00296                 fadd    st,st(7)                                                ; LG2  R    RI   RL2  LB   BI   G    GI
00297                 fxch    st(6)                                                   ; G    R    RI   RL2  LB   BI   LG2  GI
00298                 fadd    qword ptr[Magic]                                ; Gk   R    RI   RL2  LB   BI   LG2  GI
00299                 fxch    st(1)                                                   ; R    Gk   RI   RL2  LB   BI   LG2  GI
00300                 fadd    qword ptr[Magic]                                ; Rk   Gk   RI   RL2  LB   BI   LG2  GI
00301                 fxch    st(1)                                                   ; Gk   Rk   RI   RL2  LB   BI   LG2  GI
00302                 fstp    qword ptr[Bucket]                               ; Rk   RI   RL2  LB   BI   LG2  GI
00303                 fstp    qword ptr[Bucket2]                              ; RI   RL2  LB   BI   LG2  GI
00304 
00305                 mov             edx,dword ptr[Bucket]
00306                 mov             eax,dword ptr[Bucket2]
00307 
00308                 fild    dword ptr[Blue]                                 ; b    RI   RL2  LB   BI   LG2  GI
00309                 fmul    st,st(3)                                                ; B    RI   RL2  LB   BI   LG2  GI
00310                 fxch    st(3)                                                   ; LB   RI   RL2  B    BI   LG2  GI
00311                 fadd    st,st(4)                                                ; LB2  RI   RL2  B    BI   LG2  GI
00312                 fxch    st(3)                                                   ; B    RI   RL2  LB2  BI   LG2  GI
00313                 fadd    qword ptr[Magic]                                ; Bk   RI   RL2  LB2  BI   LG2  GI
00314 
00315                 and             edx,GREENMASK2
00316                 and             eax,REDMASK2
00317 
00318                 fstp    qword ptr[Bucket]                               ; RI   RL2  LB2  BI   LG2  GI
00319                 fstp    qword ptr[Bucket2]                              ; RL2  LB2  BI   LG2  GI
00320 
00321                 mov             edi,edx
00322                 mov             ebx,dword ptr[Bucket]
00323                 or              edi,eax
00324                 mov             ebp,TDest
00325                 and             ebx,BLUEMASK2
00326 
00327                 fxch    st(3)                                                   ; LG2  LB2  BI   RL2  GI
00328                 or              edi,ebx
00329 
00330                 fld             qword ptr[Bucket2]                              ; RI   LG2  LB2  BI   RL2  GI
00331 
00332                 rol             edi,16
00333                 add             TDest,4
00334 
00335                 mov             [ebp],edi
00336                 dec             [widTemp]
00337 
00338                 jnz             PixieLoop
00339 
00340                 pop             ebp
00341 
00342                 fstp    [u16]
00343                 fstp    [v16]
00344                 fstp    [u16]
00345                 fstp    [v16]
00346                 fstp    [u16]
00347                 fstp    [v16]
00348 
00349 GouraudReturnNoZ:
00350                 pop             edi
00351                 pop             esi
00352                 pop             ecx
00353                 pop             ebx
00354         }
00355 }

void DrawScanLineGouraudNoZBufferZWrite_Asm555X86FPU EdgeAsmFPU pLeft,
EdgeAsmFPU pRight
 

Definition at line 1381 of file x86span555.c.

References B, Blue, BLUEMASK2, Bucket, Bucket2, Dest, G, GBitPtrHalf, GHMaskShifted, Green, GREENMASK2, GWMask, Magic, or, pZBufferPtr, R, r, Real65536, Red, REDMASK2, TDest, Two, VShift, widTemp, and EdgeAsmFPUTag::X.

Referenced by RenderMiscTexturePoly().

01382 {
01383         TDest   =Dest;
01384         Red             =Green  =0;
01385         _asm
01386         {
01387                 push    ebx
01388                 push    ecx
01389                 push    esi
01390                 push    edi
01391 
01392                 mov             ebx,pLeft
01393                 mov     ecx,pRight
01394                 mov     eax,[ebx]EdgeAsmFPU.X
01395                 mov     edx,[ecx]EdgeAsmFPU.X
01396                 sub     edx,eax
01397                 jle             GouraudReturnNoZ
01398 
01399                 mov             esi,eax
01400                 inc             edx
01401                 shl             eax,1
01402                 add             TDest,eax
01403                 add             pZBufferPtr,eax
01404                 test    esi,1           //dword align left
01405                 jz              NoSinglePixie
01406 
01407                 //odd sized spans write one pixel to dword align
01408                 fld     dword ptr [ebx]EdgeAsmFPU.u             ; UL
01409                 fmul    [Real65536]                                             ; UL16
01410                 fld     dword ptr [ebx]EdgeAsmFPU.v             ; VL   UL16
01411                 fmul    [Real65536]                                             ; VL16 UL16
01412                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   VL16 UL16
01413                 fild    dword ptr [ebx]EdgeAsmFPU.G             ; GL   RL   VL16 UL16
01414                 fild    dword ptr [ebx]EdgeAsmFPU.B             ; BL   GL   RL   VL16 UL16
01415                 fxch    st(4)                                                   ; UL16 GL   RL   VL16 BL
01416                 fistp   [u16]                                                   ; GL   RL   VL16 BL
01417                 fxch    st(2)                                                   ; VL16 RL   GL   BL
01418                 fistp   [v16]                                                   ; RL   GL   BL
01419                 fld             dword ptr[ebx]EdgeAsmFPU.z              ; z    RL   GL   BL
01420                 fistp   [z16]                                                   ; RL   GL   BL
01421 
01422                 mov     [widTemp],edx
01423 
01424                 mov             ecx,[VShift]
01425                 mov             ebx,[GHMaskShifted]
01426 
01427                 mov             esi,[GWMask]
01428                 mov             edi,[v16]
01429 
01430                 mov             edx,dword ptr[u16]
01431 
01432                 shr             edi,cl
01433 
01434                 shr             edx,16
01435                 xor             eax,eax
01436 
01437                 and             edi,ebx
01438                 and             edx,esi
01439 
01440                 add             edi,edx
01441 
01442                 add             edi,GBitPtrHalf
01443                 mov             ax,word ptr[edi*2]
01444 
01445                 mov             ebx,eax
01446                 and             eax,REDMASK2
01447 
01448                 mov             ecx,ebx
01449                 and             ebx,GREENMASK2
01450 
01451                 mov             dword ptr[Red],eax
01452                 and             ecx,BLUEMASK2
01453 
01454                 mov             dword ptr[Green],ebx
01455                 mov             dword ptr[Blue],ecx
01456 
01457                 fimul   dword ptr[Red]                                  ; R    GL   BL
01458                 fxch    st(1)                                                   ; GL   R    BL
01459                 fimul   dword ptr[Green]                                ; G    R    BL
01460                 fxch    st(1)                                                   ; R    G    BL
01461                 fadd    qword ptr[Magic]                                ; Rk   G    BL
01462                 fxch    st(2)                                                   ; BL   G    Rk
01463                 fimul   [Blue]                                                  ; B    G    Rk
01464                 fxch    st(1)                                                   ; G    B    Rk
01465                 fadd    qword ptr[Magic]                                ; Gk   B    Rk
01466                 fxch    st(2)                                                   ; Rk   B    Gk
01467                 fstp    qword ptr[Bucket]                               ; B    Gk
01468                 fadd    qword ptr[Magic]                                ; Bk   Gk
01469                 fxch    st(1)                                                   ; Gk   Bk
01470                 fstp    qword ptr[Bucket2]                              ; Bk
01471 
01472                 mov             edx,dword ptr[Bucket]
01473                 mov             eax,dword ptr[Bucket2]
01474 
01475                 and             edx,REDMASK2
01476                 and             eax,GREENMASK2
01477 
01478                 fstp    qword ptr[Bucket]
01479 
01480                 mov             ecx,TDest
01481                 mov             ebx,dword ptr[Bucket]
01482 
01483                 mov             esi,[z16]
01484                 and             ebx,BLUEMASK2
01485 
01486                 shr             esi,16
01487                 or              edx,eax
01488 
01489                 mov             eax,pZBufferPtr
01490                 add             TDest,2
01491 
01492                 or              edx,ebx
01493                 mov             word ptr[eax],si
01494 
01495                 mov             word ptr[ecx],dx
01496 
01497                 mov             ebx,pLeft
01498                 mov     edx,[widTemp]
01499                 add             pZBufferPtr,2
01500                 mov     ecx,pRight
01501                 dec             edx
01502                 jz              GouraudReturnNoZ
01503                 mov             esi,edx
01504                 and             esi,1
01505                 sub             edx,esi
01506                 jz              GouraudReturnNoZ
01507 
01508 NoSinglePixie:
01509                 mov     [widTemp],edx                 ; just for a temp
01510                 shr             edx,1
01511 
01512                 ; try to keep fmul fxch pairs seperated to avoid stalling
01513                 ; calc this scanlines steps           ; FPU Stack
01514                                                       ; st0  st1  st2  st3  st4  st5  st6  st7
01515                 fild    dword ptr [widTemp]           ; WID
01516 
01517                 mov     [widTemp],edx                 ; Color interps doubled
01518 
01519                 fld     dword ptr [ecx]EdgeAsmFPU.u ; UR   WID
01520                 fld     dword ptr [ebx]EdgeAsmFPU.u ; UL   UR   WID
01521                 fsub    st(1), st                   ; UL   UD   WID
01522                 fld     dword ptr [ecx]EdgeAsmFPU.v ; VR   UL   UD   WID
01523                 fxch    st(1)                       ; UL   VR   UD   WID
01524                 fmul    [Real65536]                 ; UL16 VR   UD   WID
01525                 fld     dword ptr [ebx]EdgeAsmFPU.v ; VL   UL16 VR   UD   WID
01526                 fsub    st(2), st                   ; VL   UL16 VD   UD   WID
01527                 fild    dword ptr [ecx]EdgeAsmFPU.R ; RR   VL   UL16 VD   UD   WID
01528                 fxch    st(3)                       ; VD   VL   UL16 RR   UD   WID
01529                 fmul    [Real65536]                 ; VD16 VL   UL16 RR   UD   WID
01530                 fild    dword ptr [ebx]EdgeAsmFPU.R ; RL   VD16 VL   UL16 RR   UD   WID
01531                 fsub    st(4),st                    ; RL   VD16 VL   UL16 RD   UD   WID
01532                 fxch    st(5)                       ; UD   VD16 VL   UL16 RD   RL   WID
01533                 fmul    [Real65536]                 ; UD16 VD16 VL   UL16 RD   RL   WID
01534                 fxch    st(2)                                           ; VL   VD16 UD16 UL16 RD   RL   WID
01535                 fmul    [Real65536]                 ; VL16 VD16 UD16 UL16 RD   RL   WID
01536                 fxch    st(3)                                           ; UL16 VD16 UD16 VL16 RD   RL   WID
01537                 fistp   [u16]                                           ; VD16 UD16 VL16 RD   RL   WID
01538                 fxch    st(2)                                           ; VL16 UD16 VD16 RD   RL   WID
01539                 fistp   [v16]                                           ; UD16 VD16 RD   RL   WID
01540                 fld1                                                            ; 1    UD16 VD16 RD   RL   WID
01541                 fdivrp  st(5),st                                        ; UD16 VD16 RD   RL   DWID
01542 
01543                 //let that cook
01544 
01545                 fmul    st,st(4)                                                ; USTP VD16 RD   RL   DWID
01546                 fild    [ecx]EdgeAsmFPU.G                               ; RG   USTP VD16 RD   RL   DWID
01547                 fild    [ebx]EdgeAsmFPU.G                               ; LG   RG   USTP VD16 RD   RL   DWID
01548                 fsub    st(1),st                                                ; LG   GD   USTP VD16 RD   RL   DWID
01549                 fxch    st(2)                                                   ; USTP GD   LG   VD16 RD   RL   DWID
01550                 fistp   [UStep]                                                 ; GD   LG   VD16 RD   RL   DWID
01551                 fild    [ecx]EdgeAsmFPU.B                               ; RB   GD   LG   VD16 RD   RL   DWID
01552                 fild    [ebx]EdgeAsmFPU.B                               ; LB   RB   GD   LG   VD16 RD   RL   DWID
01553                 fsub    st(1),st                                                ; LB   BD   GD   LG   VD16 RD   RL   DWID
01554                 fxch    st(4)                                                   ; VD16 BD   GD   LG   LB   RD   RL   DWID
01555                 fmul    st,st(7)                                                ; VSTP BD   GD   LG   LB   RD   RL   DWID
01556                 fxch    st(7)                                                   ; DWID BD   GD   LG   LB   RD   RL   VSTP
01557                 fmul    dword ptr[Two]                                  ; DW2  BD   GD   LG   LB   RD   RL   VSTP
01558                 fxch    st(7)                                                   ; VSTP BD   GD   LG   LB   RD   RL   DW2
01559                 fxch    st(5)                                                   ; RD   BD   GD   LG   LB   VSTP RL   DW2
01560                 fmul    st,st(7)                                                ; RI   BD   GD   LG   LB   VSTP RL   DW2
01561                 frndint
01562                 fxch    st(2)                                                   ; GD   BD   RI   LG   LB   VSTP RL   DW2
01563                 fmul    st,st(7)                                                ; GI   BD   RI   LG   LB   VSTP RL   DW2
01564                 frndint
01565                 fxch    st(1)                                                   ; BD   GI   RI   LG   LB   VSTP RL   DW2
01566                 fmul    st,st(7)                                                ; BD   GI   RI   LG   LB   VSTP RL   DW2
01567                 frndint
01568                 fxch    st(5)                                                   ; VSTP GI   RI   LG   LB   BD   RL   DW2
01569                 fistp   [VStep]                                                 ; GI   RI   LG   LB   BD   RL   DW2
01570                 fld             [ecx]EdgeAsmFPU.z                               ; rz   GI   RI   LG   LB   BD   RL   DW2
01571                 fsub    [ebx]EdgeAsmFPU.z                               ; zd   GI   RI   LG   LB   BD   RL   DW2
01572                 fxch    st(7)                                                   ; DW2  GI   RI   LG   LB   BD   RL   zd
01573                 fmulp   st(7),st                                                ; GI   RI   LG   LB   BD   RL   zd
01574                 fld             [ebx]EdgeAsmFPU.z                               ; lz   GI   RI   LG   LB   BD   RL   zd
01575                 fxch    st(7)                                                   ; zd   GI   RI   LG   LB   BD   RL   lz
01576                 fistp   [ZStep]                                                 ; GI   RI   LG   LB   BD   RL   lz
01577                 fxch    st(6)                                                   ; lz   RI   LG   LB   BD   RL   GI
01578                 fistp   [z16]                                                   ; RI   LG   LB   BD   RL   GI
01579 
01580                 push    ebp
01581 
01582 PixieLoop:
01583                 mov             ebx,[ZStep]
01584 
01585                 add             [z16],ebx
01586                 mov             ecx,[VShift]
01587 
01588                 mov             edi,[z16]
01589 
01590                 shr             edi,16
01591                 mov             ebx,[GHMaskShifted]
01592 
01593                 mov             ebp,[GWMask]
01594                 mov             edx,dword ptr[u16]
01595 
01596                 mov             word ptr[Z32],di
01597                 mov             eax,edx
01598 
01599                 shr             edx,16
01600                 mov             edi,[v16]
01601 
01602                 add             eax,[UStep]
01603                 mov             esi,edi
01604 
01605                 shr             edi,cl
01606                 add             esi,[VStep]
01607 
01608                 and             edi,ebx
01609                 and             edx,ebp
01610 
01611                 add             edi,edx
01612                 mov             edx,eax
01613 
01614                 add             edi,GBitPtrHalf
01615                 add             eax,[UStep]
01616 
01617                 mov             [u16],eax
01618                 mov             ax,word ptr[edi*2]
01619 
01620                 mov             edi,esi
01621                 add             esi,[VStep]
01622 
01623                 shr             edx,16
01624                 mov             [v16],esi
01625 
01626                 shr             edi,cl
01627                 and             edx,ebp
01628 
01629                 mov             esi,GBitPtrHalf
01630                 and             edi,ebx
01631 
01632                 shl             eax,16
01633                 add             esi,edx
01634 
01635                 add             esi,edi
01636 
01637                 mov             ax,word ptr[esi*2]
01638 
01639                 mov             ebx,eax
01640                 and             eax,REDMASK2
01641 
01642                 mov             ecx,ebx
01643                 and             ebx,GREENMASK2
01644 
01645                 mov             dword ptr[Red],eax
01646                 and             ecx,BLUEMASK2
01647 
01648                 mov             dword ptr[Green],ebx
01649                 mov             dword ptr[Blue],ecx
01650 
01651                 fild    qword ptr[Red]                                  ; r    RI   LG   LB   BI   RL   GI
01652                 fmul    st,st(5)                                                ; R    RI   LG   LB   BI   RL   GI
01653                 fild    qword ptr[Green]                                ; g    R    RI   LG   LB   BI   RL   GI
01654                 fmul    st,st(3)                                                ; G    R    RI   LG   LB   BI   RL   GI
01655                 fxch    st(6)                                                   ; RL   R    RI   LG   LB   BI   G    GI
01656                 fadd    st,st(2)                                                ; RL2  R    RI   LG   LB   BI   G    GI
01657                 fxch    st(3)                                                   ; LG   R    RI   RL2  LB   BI   G    GI
01658                 fadd    st,st(7)                                                ; LG2  R    RI   RL2  LB   BI   G    GI
01659                 fxch    st(6)                                                   ; G    R    RI   RL2  LB   BI   LG2  GI
01660                 fadd    qword ptr[Magic]                                ; Gk   R    RI   RL2  LB   BI   LG2  GI
01661                 fxch    st(1)                                                   ; R    Gk   RI   RL2  LB   BI   LG2  GI
01662                 fadd    qword ptr[Magic]                                ; Rk   Gk   RI   RL2  LB   BI   LG2  GI
01663                 fxch    st(1)                                                   ; Gk   Rk   RI   RL2  LB   BI   LG2  GI
01664                 fstp    qword ptr[Bucket]                               ; Rk   RI   RL2  LB   BI   LG2  GI
01665                 fstp    qword ptr[Bucket2]                              ; RI   RL2  LB   BI   LG2  GI
01666 
01667                 mov             edx,dword ptr[Bucket]
01668                 mov             eax,dword ptr[Bucket2]
01669 
01670                 fild    dword ptr[Blue]                                 ; b    RI   RL2  LB   BI   LG2  GI
01671                 fmul    st,st(3)                                                ; B    RI   RL2  LB   BI   LG2  GI
01672                 fxch    st(3)                                                   ; LB   RI   RL2  B    BI   LG2  GI
01673                 fadd    st,st(4)                                                ; LB2  RI   RL2  B    BI   LG2  GI
01674                 fxch    st(3)                                                   ; B    RI   RL2  LB2  BI   LG2  GI
01675                 fadd    qword ptr[Magic]                                ; Bk   RI   RL2  LB2  BI   LG2  GI
01676 
01677                 and             edx,GREENMASK2
01678                 and             eax,REDMASK2
01679 
01680                 fstp    qword ptr[Bucket]                               ; RI   RL2  LB2  BI   LG2  GI
01681                 fstp    qword ptr[Bucket2]                              ; RL2  LB2  BI   LG2  GI
01682 
01683                 mov             edi,edx
01684                 mov             ebx,dword ptr[Bucket]
01685                 or              edi,eax
01686                 mov             ebp,TDest
01687                 and             ebx,BLUEMASK2
01688 
01689                 fxch    st(3)                                                   ; LG2  LB2  BI   RL2  GI
01690                 fld             qword ptr[Bucket2]                              ; RI   LG2  LB2  BI   RL2  GI
01691 
01692                 mov             si,word ptr[Z32]
01693                 add             TDest,4
01694 
01695                 mov             ecx,pZBufferPtr
01696                 or              edi,ebx
01697 
01698                 mov             [ecx],si
01699                 rol             edi,16
01700 
01701                 mov             dword ptr[ebp],edi
01702                 mov             [ecx+2],si
01703 
01704                 add             pZBufferPtr,4
01705                 dec             [widTemp]
01706 
01707                 jnz             PixieLoop
01708 
01709                 pop             ebp
01710 
01711                 fstp    [u16]
01712                 fstp    [v16]
01713                 fstp    [u16]
01714                 fstp    [v16]
01715                 fstp    [u16]
01716                 fstp    [v16]
01717 
01718 GouraudReturnNoZ:
01719                 pop             edi
01720                 pop             esi
01721                 pop             ecx
01722                 pop             ebx
01723         }
01724 }

void DrawScanLineGouraudNoZBufferZWriteSolid_Asm555X86FPU EdgeAsmFPU pLeft,
EdgeAsmFPU pRight
 

Definition at line 2970 of file x86span555.c.

References BlueMask, BLUEMASK2, Bucket, Bucket2, Dest, Green, GreenMask2, GREENMASK2, Magic, MiniRedMask2, or, pZBufferPtr, r, Red, REDMASK2, RedMask2, TDest, widTemp, and EdgeAsmFPUTag::X.

Referenced by RenderGouraudPoly().

02971 {
02972         TDest   =Dest;
02973         Red             =Green  =0;
02974         _asm
02975         {
02976                 push    ebx
02977                 push    ecx
02978                 push    esi
02979                 push    edi
02980 
02981                 mov             ebx,pLeft
02982                 mov     ecx,pRight
02983                 mov     eax,[ebx]EdgeAsmFPU.X
02984                 mov     edx,[ecx]EdgeAsmFPU.X
02985                 sub     edx,eax
02986                 jle             GouraudReturnNoZ
02987 
02988                 mov             esi,eax
02989                 inc             edx
02990                 shl             eax,1
02991                 add             TDest,eax
02992                 add             pZBufferPtr,eax
02993                 test    esi,1                                   //dword align left side
02994                 jz              NoSinglePixie
02995 
02996                 //odd sized spans write one pixel to dword align
02997                 fild    dword ptr [ebx]EdgeAsmFPU.B             ; BL
02998                 fmul    dword ptr[BlueMask]
02999                 fadd    qword ptr[Magic]                                ; Bk
03000                 fild    dword ptr [ebx]EdgeAsmFPU.G             ; GL   Bk
03001                 fmul    dword ptr[GreenMask2]
03002                 fadd    qword ptr[Magic]                                ; Gk   Bk
03003                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   Gk   Bk
03004                 fmul    dword ptr[MiniRedMask2]
03005                 fadd    qword ptr[Magic]                                ; Rk   Gk   Bk
03006                 fxch    st(2)                                                   ; Bk   Gk   Rk
03007                 fstp    qword ptr[Bucket]                               ; Gk   Rk
03008                 fstp    qword ptr[Bucket2]                              ; Rk
03009                 fld             dword ptr[ebx]EdgeAsmFPU.z              ; z
03010                 fistp   [z16]                                                   ;
03011 
03012                 mov             esi,dword ptr[Bucket]
03013                 mov             eax,dword ptr[Bucket2]
03014 
03015                 and             esi,BLUEMASK2
03016                 and             eax,GREENMASK2
03017 
03018                 fstp    qword ptr[Bucket]
03019 
03020                 mov             ecx,TDest
03021                 mov             ebx,dword ptr[Bucket]
03022 
03023                 and             ebx,REDMASK2
03024                 or              esi,eax
03025 
03026                 mov             edi,[z16]
03027                 mov             eax,pZBufferPtr
03028 
03029                 add             TDest,2
03030                 or              esi,ebx
03031 
03032                 shr             edi,16
03033                 mov             ebx,pLeft
03034 
03035                 mov             word ptr[eax],di
03036                 mov             word ptr[ecx],si
03037 
03038                 mov             ecx,pRight
03039                 dec             edx
03040 
03041                 jz              GouraudReturnNoZ
03042                 mov             esi,edx
03043                 add             pZBufferPtr,2
03044                 and             esi,1
03045                 sub             edx,esi
03046                 jz              GouraudReturnNoZ
03047 
03048 NoSinglePixie:
03049                 shr             edx,1
03050                 fld1
03051                 mov     [widTemp],edx                 ; just for a temp
03052                 
03053 
03054                 ; try to keep fmul fxch pairs seperated to avoid stalling
03055                 ; calc this scanlines steps                             ; FPU Stack
03056                                                                                                 ; st0  st1  st2  st3  st4  st5  st6  st7
03057                 fidiv   dword ptr [widTemp]                             ; WID
03058                 fild    dword ptr [ecx]EdgeAsmFPU.R             ; RR   WID
03059                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   RR   WID
03060                 fsub    st(1),st                                                ; RL   RD   WID
03061                 fild    [ecx]EdgeAsmFPU.G                               ; GR   RL   RD   WID
03062                 fild    [ebx]EdgeAsmFPU.G                               ; GL   GR   RL   RD   WID
03063                 fsub    st(1),st                                                ; GL   GD   RL   RD   WID
03064                 fild    [ecx]EdgeAsmFPU.B                               ; BR   GL   GD   RL   RD   WID
03065                 fild    [ebx]EdgeAsmFPU.B                               ; BL   BR   GL   GD   RL   RD   WID
03066                 fsub    st(1),st                                                ; BL   BD   GL   GD   RL   RD   WID
03067                 fxch    st(5)                                                   ; RD   BD   GL   GD   RL   BL   WID
03068                 fmul    st,st(6)                                                ; RI   BD   GL   GD   RL   BL   WID
03069                 frndint
03070                 fxch    st(3)                                                   ; GD   BD   GL   RI   RL   BL   WID
03071                 fmul    st,st(6)                                                ; GI   BD   GL   RI   RL   BL   WID
03072                 frndint
03073                 fxch    st(6)                                                   ; WID  BD   GL   RI   RL   BL   GI
03074                 fmulp   st(1),st                                                ; BI   GL   RI   RL   BL   GI
03075                 frndint
03076                 fld             qword ptr[RedMask2]                             ; rm   BI   GL   RI   RL   BL   GI
03077                 fmul    st(3),st                                                ; rm   BI   GL   RI   RL   BL   GI
03078                 fmulp   st(4),st                                                ; BI   GL   RI   RL   BL   GI
03079                 fld             dword ptr[GreenMask2]                   ; gm   BI   GL   RI   RL   BL   GI
03080                 fmul    st(2),st                                                ; gm   BI   GL   RI   RL   BL   GI
03081                 fmulp   st(6),st                                                ; BI   GL   RI   RL   BL   GI
03082                 fld             dword ptr[BlueMask]                             ; bm   BI   GL   RI   RL   BL   GI
03083                 fmul    st(1),st                                                ; bm   BI   GL   RI   RL   BL   GI
03084                 fmulp   st(5),st                                                ; BI   GL   RI   RL   BL   GI
03085                 fld             [ecx]EdgeAsmFPU.z                               ; rz   BI   GL   RI   RL   BL   GI
03086                 fsub    [ebx]EdgeAsmFPU.z                               ; zd   BI   GL   RI   RL   BL   GI
03087                 fld             [ebx]EdgeAsmFPU.z                               ; lz   zd   BI   GL   RI   RL   BL   GI
03088                 fistp   [z16]                                                   ; zd   BI   GL   RI   RL   BL   GI
03089                 fistp   [ZStep]                                                 ; BI   GL   RI   RL   BL   GI
03090 
03091 PixieLoop:
03092 
03093                 fld             st(3)                                                   ; r    BI   GL   RI   RL   BL   GI
03094                 fadd    qword ptr[Magic]                                ; rk   BI   GL   RI   RL   BL   GI
03095                 fld             st(2)                                                   ; g    rk   BI   GL   RI   RL   BL   GI
03096                 fadd    qword ptr[Magic]                                ; gk   rk   BI   GL   RI   RL   BL   GI
03097                 fxch    st(1)                                                   ; rk   gk   BI   GL   RI   RL   BL   GI
03098                 fstp    qword ptr[Bucket]                               ; gk   BI   GL   RI   RL   BL   GI
03099 
03100                 mov             edi,[z16]
03101                 mov             esi,pZBufferPtr
03102 
03103                 shr             edi,16
03104                 mov             ebx,[ZStep]
03105 
03106                 mov             word ptr[esi],di
03107                 add             [z16],ebx
03108 
03109                 fstp    qword ptr[Bucket2]                              ; BI   GL   RI   RL   BL   GI
03110                 fld             st(4)                                                   ; b    BI   GL   RI   RL   BL   GI
03111                 fadd    qword ptr[Magic]                                ; bk   BI   GL   RI   RL   BL   GI
03112 
03113                 mov             word ptr[esi+2],di
03114 
03115                 mov             ecx,dword ptr[Bucket]
03116                 mov             eax,dword ptr[Bucket2]
03117 
03118                 fstp    qword ptr[Bucket]                               ; BI   GL   RI   RL   BL   GI
03119                 fadd    st(4),st                                                ; BI   GL   RI   RL   BL2  GI
03120 
03121                 and             ecx,REDMASK2
03122                 and             eax,GREENMASK2
03123 
03124                 mov             ebx,dword ptr[Bucket]
03125                 or              ecx,eax
03126 
03127                 fstp    qword ptr[Bucket]                               ; GL   RI   RL   BL2  GI
03128                 fadd    st,st(4)                                                ; GL2  RI   RL   BL2  GI
03129                 fstp    qword ptr[Bucket2]                              ; RI   RL   BL2  GI
03130                 fadd    st(1),st                                                ; RI   RL2  BL2  GI
03131                 fld             qword ptr[Bucket2]                              ; GL2  RI   RL2  BL2  GI
03132                 fld             qword ptr[Bucket]                               ; BI   GL2  RI   RL2  BL2  GI
03133 
03134                 and             ebx,BLUEMASK2
03135                 mov             edi,TDest
03136 
03137                 or              ecx,ebx
03138                 add             TDest,4
03139 
03140                 rol             ecx,16
03141 
03142                 mov             [edi],ecx
03143 
03144                 add             pZBufferPtr,4
03145 
03146                 dec             edx
03147 
03148                 jnz             PixieLoop
03149 
03150 
03151                 fstp    [u16]
03152                 fstp    [v16]
03153                 fstp    [u16]
03154                 fstp    [v16]
03155                 fstp    [u16]
03156                 fstp    [v16]
03157 
03158 GouraudReturnNoZ:
03159                 pop             edi
03160                 pop             esi
03161                 pop             ecx
03162                 pop             ebx
03163         }
03164 }

void DrawScanLineGouraudNoZBufferZWriteTrans_Asm555X86FPU EdgeAsmFPU pLeft,
EdgeAsmFPU pRight
 

Definition at line 2448 of file x86span555.c.

References B, Blue, BLUEMASK2, Bucket, Bucket2, Dest, G, GBitPtrHalf, GHMaskShifted, Green, GREENMASK2, GWMask, Magic, or, pZBufferPtr, R, r, Real65536, Red, REDMASK2, TDest, TempPix, Two, VShift, widTemp, and EdgeAsmFPUTag::X.

Referenced by RenderMiscTexturePoly().

02449 {
02450         TDest   =Dest;
02451         Red             =Green  =0;
02452         _asm
02453         {
02454                 push    ebx
02455                 push    ecx
02456                 push    esi
02457                 push    edi
02458 
02459                 mov             ebx,pLeft
02460                 mov     ecx,pRight
02461                 mov     eax,[ebx]EdgeAsmFPU.X
02462                 mov     edx,[ecx]EdgeAsmFPU.X
02463                 sub     edx,eax
02464                 jle             GouraudReturnNoZ
02465 
02466                 mov             esi,eax
02467                 inc             edx
02468                 shl             eax,1
02469                 add             TDest,eax
02470                 add             pZBufferPtr,eax
02471                 test    esi,1           //dword align left
02472                 jz              NoSinglePixie
02473 
02474                 //odd sized spans write one pixel to dword align
02475                 fld     dword ptr [ebx]EdgeAsmFPU.u             ; UL
02476                 fmul    [Real65536]                                             ; UL16
02477                 fld     dword ptr [ebx]EdgeAsmFPU.v             ; VL   UL16
02478                 fmul    [Real65536]                                             ; VL16 UL16
02479                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   VL16 UL16
02480                 fild    dword ptr [ebx]EdgeAsmFPU.G             ; GL   RL   VL16 UL16
02481                 fild    dword ptr [ebx]EdgeAsmFPU.B             ; BL   GL   RL   VL16 UL16
02482                 fxch    st(4)                                                   ; UL16 GL   RL   VL16 BL
02483                 fistp   [u16]                                                   ; GL   RL   VL16 BL
02484                 fxch    st(2)                                                   ; VL16 RL   GL   BL
02485                 fistp   [v16]                                                   ; RL   GL   BL
02486                 fld             dword ptr[ebx]EdgeAsmFPU.z              ; z    RL   GL   BL
02487                 fistp   [z16]                                                   ; RL   GL   BL
02488 
02489                 mov     [widTemp],edx
02490 
02491                 mov             ecx,[VShift]
02492                 mov             ebx,[GHMaskShifted]
02493 
02494                 mov             esi,[GWMask]
02495                 mov             edi,[v16]
02496 
02497                 mov             edx,dword ptr[u16]
02498 
02499                 shr             edi,cl
02500 
02501                 shr             edx,16
02502                 xor             eax,eax
02503 
02504                 and             edi,ebx
02505                 and             edx,esi
02506 
02507                 add             edi,edx
02508 
02509                 add             edi,GBitPtrHalf
02510                 mov             ax,word ptr[edi*2]
02511 
02512                 mov             word ptr[TempPix],ax
02513 
02514                 mov             ebx,eax
02515                 and             eax,REDMASK2
02516 
02517                 mov             ecx,ebx
02518                 and             ebx,GREENMASK2
02519 
02520                 mov             dword ptr[Red],eax
02521                 and             ecx,BLUEMASK2
02522 
02523                 mov             dword ptr[Green],ebx
02524                 mov             dword ptr[Blue],ecx
02525 
02526                 fimul   dword ptr[Red]                                  ; R    GL   BL
02527                 fxch    st(1)                                                   ; GL   R    BL
02528                 fimul   dword ptr[Green]                                ; G    R    BL
02529                 fxch    st(1)                                                   ; R    G    BL
02530                 fadd    qword ptr[Magic]                                ; Rk   G    BL
02531                 fxch    st(2)                                                   ; BL   G    Rk
02532                 fimul   [Blue]                                                  ; B    G    Rk
02533                 fxch    st(1)                                                   ; G    B    Rk
02534                 fadd    qword ptr[Magic]                                ; Gk   B    Rk
02535                 fxch    st(2)                                                   ; Rk   B    Gk
02536                 fstp    qword ptr[Bucket]                               ; B    Gk
02537                 fadd    qword ptr[Magic]                                ; Bk   Gk
02538                 fxch    st(1)                                                   ; Gk   Bk
02539                 fstp    qword ptr[Bucket2]                              ; Bk
02540 
02541                 mov             edx,dword ptr[Bucket]
02542                 mov             eax,dword ptr[Bucket2]
02543 
02544                 and             edx,REDMASK2
02545                 and             eax,GREENMASK2
02546 
02547                 fstp    qword ptr[Bucket]
02548 
02549                 mov             ecx,TDest
02550                 mov             ebx,dword ptr[Bucket]
02551 
02552                 mov             esi,[z16]
02553                 and             ebx,BLUEMASK2
02554 
02555                 shr             esi,16
02556                 or              edx,eax
02557 
02558                 mov             eax,pZBufferPtr
02559                 add             TDest,2
02560 
02561                 cmp             word ptr[TempPix],01h
02562                 je              SkipSinglePixie
02563 
02564                 or              edx,ebx
02565                 mov             word ptr[eax],si
02566 
02567                 mov             word ptr[ecx],dx
02568 
02569 SkipSinglePixie:
02570                 mov             ebx,pLeft
02571                 mov     edx,[widTemp]
02572                 add             pZBufferPtr,2
02573                 mov     ecx,pRight
02574                 dec             edx
02575                 jz              GouraudReturnNoZ
02576                 mov             esi,edx
02577                 and             esi,1
02578                 sub             edx,esi
02579                 jz              GouraudReturnNoZ
02580 
02581 NoSinglePixie:
02582                 mov     [widTemp],edx                 ; just for a temp
02583                 shr             edx,1
02584 
02585                 ; try to keep fmul fxch pairs seperated to avoid stalling
02586                 ; calc this scanlines steps           ; FPU Stack
02587                                                       ; st0  st1  st2  st3  st4  st5  st6  st7
02588                 fild    dword ptr [widTemp]           ; WID
02589 
02590                 mov     [widTemp],edx                 ; Color interps doubled
02591 
02592                 fld     dword ptr [ecx]EdgeAsmFPU.u ; UR   WID
02593                 fld     dword ptr [ebx]EdgeAsmFPU.u ; UL   UR   WID
02594                 fsub    st(1), st                   ; UL   UD   WID
02595                 fld     dword ptr [ecx]EdgeAsmFPU.v ; VR   UL   UD   WID
02596                 fxch    st(1)                       ; UL   VR   UD   WID
02597                 fmul    [Real65536]                 ; UL16 VR   UD   WID
02598                 fld     dword ptr [ebx]EdgeAsmFPU.v ; VL   UL16 VR   UD   WID
02599                 fsub    st(2), st                   ; VL   UL16 VD   UD   WID
02600                 fild    dword ptr [ecx]EdgeAsmFPU.R ; RR   VL   UL16 VD   UD   WID
02601                 fxch    st(3)                       ; VD   VL   UL16 RR   UD   WID
02602                 fmul    [Real65536]                 ; VD16 VL   UL16 RR   UD   WID
02603                 fild    dword ptr [ebx]EdgeAsmFPU.R ; RL   VD16 VL   UL16 RR   UD   WID
02604                 fsub    st(4),st                    ; RL   VD16 VL   UL16 RD   UD   WID
02605                 fxch    st(5)                       ; UD   VD16 VL   UL16 RD   RL   WID
02606                 fmul    [Real65536]                 ; UD16 VD16 VL   UL16 RD   RL   WID
02607                 fxch    st(2)                                           ; VL   VD16 UD16 UL16 RD   RL   WID
02608                 fmul    [Real65536]                 ; VL16 VD16 UD16 UL16 RD   RL   WID
02609                 fxch    st(3)                                           ; UL16 VD16 UD16 VL16 RD   RL   WID
02610                 fistp   [u16]                                           ; VD16 UD16 VL16 RD   RL   WID
02611                 fxch    st(2)                                           ; VL16 UD16 VD16 RD   RL   WID
02612                 fistp   [v16]                                           ; UD16 VD16 RD   RL   WID
02613                 fld1                                                            ; 1    UD16 VD16 RD   RL   WID
02614                 fdivrp  st(5),st                                        ; UD16 VD16 RD   RL   DWID
02615 
02616                 //let that cook
02617 
02618                 fmul    st,st(4)                                                ; USTP VD16 RD   RL   DWID
02619                 fild    [ecx]EdgeAsmFPU.G                               ; RG   USTP VD16 RD   RL   DWID
02620                 fild    [ebx]EdgeAsmFPU.G                               ; LG   RG   USTP VD16 RD   RL   DWID
02621                 fsub    st(1),st                                                ; LG   GD   USTP VD16 RD   RL   DWID
02622                 fxch    st(2)                                                   ; USTP GD   LG   VD16 RD   RL   DWID
02623                 fistp   [UStep]                                                 ; GD   LG   VD16 RD   RL   DWID
02624                 fild    [ecx]EdgeAsmFPU.B                               ; RB   GD   LG   VD16 RD   RL   DWID
02625                 fild    [ebx]EdgeAsmFPU.B                               ; LB   RB   GD   LG   VD16 RD   RL   DWID
02626                 fsub    st(1),st                                                ; LB   BD   GD   LG   VD16 RD   RL   DWID
02627                 fxch    st(4)                                                   ; VD16 BD   GD   LG   LB   RD   RL   DWID
02628                 fmul    st,st(7)                                                ; VSTP BD   GD   LG   LB   RD   RL   DWID
02629                 fxch    st(7)                                                   ; DWID BD   GD   LG   LB   RD   RL   VSTP
02630                 fmul    dword ptr[Two]                                  ; DW2  BD   GD   LG   LB   RD   RL   VSTP
02631                 fxch    st(7)                                                   ; VSTP BD   GD   LG   LB   RD   RL   DW2
02632                 fxch    st(5)                                                   ; RD   BD   GD   LG   LB   VSTP RL   DW2
02633                 fmul    st,st(7)                                                ; RI   BD   GD   LG   LB   VSTP RL   DW2
02634                 frndint
02635                 fxch    st(2)                                                   ; GD   BD   RI   LG   LB   VSTP RL   DW2
02636                 fmul    st,st(7)                                                ; GI   BD   RI   LG   LB   VSTP RL   DW2
02637                 frndint
02638                 fxch    st(1)                                                   ; BD   GI   RI   LG   LB   VSTP RL   DW2
02639                 fmul    st,st(7)                                                ; BD   GI   RI   LG   LB   VSTP RL   DW2
02640                 frndint
02641                 fxch    st(5)                                                   ; VSTP GI   RI   LG   LB   BD   RL   DW2
02642                 fistp   [VStep]                                                 ; GI   RI   LG   LB   BD   RL   DW2
02643                 fld             [ecx]EdgeAsmFPU.z                               ; rz   GI   RI   LG   LB   BD   RL   DW2
02644                 fsub    [ebx]EdgeAsmFPU.z                               ; zd   GI   RI   LG   LB   BD   RL   DW2
02645                 fxch    st(7)                                                   ; DW2  GI   RI   LG   LB   BD   RL   zd
02646                 fmulp   st(7),st                                                ; GI   RI   LG   LB   BD   RL   zd
02647                 fld             [ebx]EdgeAsmFPU.z                               ; lz   GI   RI   LG   LB   BD   RL   zd
02648                 fxch    st(7)                                                   ; zd   GI   RI   LG   LB   BD   RL   lz
02649                 fistp   [ZStep]                                                 ; GI   RI   LG   LB   BD   RL   lz
02650                 fxch    st(6)                                                   ; lz   RI   LG   LB   BD   RL   GI
02651                 fistp   [z16]                                                   ; RI   LG   LB   BD   RL   GI
02652 
02653                 push    ebp
02654 
02655 PixieLoop:
02656                 mov             ebx,[ZStep]
02657 
02658                 add             [z16],ebx
02659                 mov             ecx,[VShift]
02660 
02661                 mov             edi,[z16]
02662 
02663                 shr             edi,16
02664                 mov             ebx,[GHMaskShifted]
02665 
02666                 mov             ebp,[GWMask]
02667                 mov             edx,dword ptr[u16]
02668 
02669                 mov             word ptr[Z32],di
02670                 mov             eax,edx
02671 
02672                 shr             edx,16
02673                 mov             edi,[v16]
02674 
02675                 add             eax,[UStep]
02676                 mov             esi,edi
02677 
02678                 shr             edi,cl
02679                 add             esi,[VStep]
02680 
02681                 and             edi,ebx
02682                 and             edx,ebp
02683 
02684                 add             edi,edx
02685                 mov             edx,eax
02686 
02687                 add             edi,GBitPtrHalf
02688                 add             eax,[UStep]
02689 
02690                 mov             [u16],eax
02691                 mov             ax,word ptr[edi*2]
02692 
02693                 mov             edi,esi
02694                 add             esi,[VStep]
02695 
02696                 shr             edx,16
02697                 mov             [v16],esi
02698 
02699                 shr             edi,cl
02700                 and             edx,ebp
02701 
02702                 mov             esi,GBitPtrHalf
02703                 and             edi,ebx
02704 
02705                 shl             eax,16
02706                 add             esi,edx
02707 
02708                 add             esi,edi
02709 
02710                 mov             ax,word ptr[esi*2]
02711 
02712                 mov             [TempPix],eax
02713 
02714                 mov             ebx,eax
02715                 and             eax,REDMASK2
02716 
02717                 mov             ecx,ebx
02718                 and             ebx,GREENMASK2
02719 
02720                 mov             dword ptr[Red],eax
02721                 and             ecx,BLUEMASK2
02722 
02723                 mov             dword ptr[Green],ebx
02724                 mov             dword ptr[Blue],ecx
02725 
02726                 fild    qword ptr[Red]                                  ; r    RI   LG   LB   BI   RL   GI
02727                 fmul    st,st(5)                                                ; R    RI   LG   LB   BI   RL   GI
02728                 fild    qword ptr[Green]                                ; g    R    RI   LG   LB   BI   RL   GI
02729                 fmul    st,st(3)                                                ; G    R    RI   LG   LB   BI   RL   GI
02730                 fxch    st(6)                                                   ; RL   R    RI   LG   LB   BI   G    GI
02731                 fadd    st,st(2)                                                ; RL2  R    RI   LG   LB   BI   G    GI
02732                 fxch    st(3)                                                   ; LG   R    RI   RL2  LB   BI   G    GI
02733                 fadd    st,st(7)                                                ; LG2  R    RI   RL2  LB   BI   G    GI
02734                 fxch    st(6)                                                   ; G    R    RI   RL2  LB   BI   LG2  GI
02735                 fadd    qword ptr[Magic]                                ; Gk   R    RI   RL2  LB   BI   LG2  GI
02736                 fxch    st(1)                                                   ; R    Gk   RI   RL2  LB   BI   LG2  GI
02737                 fadd    qword ptr[Magic]                                ; Rk   Gk   RI   RL2  LB   BI   LG2  GI
02738                 fxch    st(1)                                                   ; Gk   Rk   RI   RL2  LB   BI   LG2  GI
02739                 fstp    qword ptr[Bucket]                               ; Rk   RI   RL2  LB   BI   LG2  GI
02740                 fstp    qword ptr[Bucket2]                              ; RI   RL2  LB   BI   LG2  GI
02741 
02742                 mov             edx,dword ptr[Bucket]
02743                 mov             eax,dword ptr[Bucket2]
02744 
02745                 fild    dword ptr[Blue]                                 ; b    RI   RL2  LB   BI   LG2  GI
02746                 fmul    st,st(3)                                                ; B    RI   RL2  LB   BI   LG2  GI
02747                 fxch    st(3)                                                   ; LB   RI   RL2  B    BI   LG2  GI
02748                 fadd    st,st(4)                                                ; LB2  RI   RL2  B    BI   LG2  GI
02749                 fxch    st(3)                                                   ; B    RI   RL2  LB2  BI   LG2  GI
02750                 fadd    qword ptr[Magic]                                ; Bk   RI   RL2  LB2  BI   LG2  GI
02751 
02752                 and             edx,GREENMASK2
02753                 and             eax,REDMASK2
02754 
02755                 fstp    qword ptr[Bucket]                               ; RI   RL2  LB2  BI   LG2  GI
02756                 fstp    qword ptr[Bucket2]                              ; RL2  LB2  BI   LG2  GI
02757 
02758                 mov             edi,edx
02759                 mov             ebx,dword ptr[Bucket]
02760                 or              edi,eax
02761                 mov             ebp,TDest
02762                 and             ebx,BLUEMASK2
02763 
02764                 fxch    st(3)                                                   ; LG2  LB2  BI   RL2  GI
02765                 fld             qword ptr[Bucket2]                              ; RI   LG2  LB2  BI   RL2  GI
02766 
02767                 mov             si,word ptr[Z32]
02768                 add             TDest,4
02769 
02770                 mov             ecx,pZBufferPtr
02771                 or              edi,ebx
02772 
02773                 cmp             [TempPix],010001h
02774                 je              SkipPixie
02775 
02776                 mov             [ecx],si
02777                 rol             edi,16
02778 
02779                 mov             dword ptr[ebp],edi
02780                 mov             [ecx+2],si
02781 SkipPixie:
02782                 add             pZBufferPtr,4
02783                 dec             [widTemp]
02784 
02785                 jnz             PixieLoop
02786 
02787                 pop             ebp
02788 
02789                 fstp    [u16]
02790                 fstp    [v16]
02791                 fstp    [u16]
02792                 fstp    [v16]
02793                 fstp    [u16]
02794                 fstp    [v16]
02795 
02796 GouraudReturnNoZ:
02797                 pop             edi
02798                 pop             esi
02799                 pop             ecx
02800                 pop             ebx
02801         }
02802 }

void DrawScanLineGouraudNoZSolid_Asm555X86FPU EdgeAsmFPU pLeft,
EdgeAsmFPU pRight
 

Definition at line 2804 of file x86span555.c.

References BlueMask, BLUEMASK2, Bucket, Bucket2, Dest, Green, GreenMask2, GREENMASK2, Magic, MiniRedMask2, or, r, Red, REDMASK2, RedMask2, TDest, widTemp, and EdgeAsmFPUTag::X.

Referenced by RenderGouraudPoly().

02805 {
02806         TDest   =Dest;
02807         Red             =Green  =0;
02808         _asm
02809         {
02810                 push    ebx
02811                 push    ecx
02812                 push    esi
02813                 push    edi
02814 
02815                 mov             ebx,pLeft
02816                 mov     ecx,pRight
02817                 mov     eax,[ebx]EdgeAsmFPU.X
02818                 mov     edx,[ecx]EdgeAsmFPU.X
02819                 sub     edx,eax
02820                 jle             GouraudReturnNoZ
02821 
02822                 mov             esi,eax
02823                 inc             edx
02824                 shl             eax,1
02825                 add             TDest,eax
02826                 test    esi,1                                   //dword align left side
02827                 jz              NoSinglePixie
02828 
02829                 //odd sized spans write one pixel to dword align
02830                 fild    dword ptr [ebx]EdgeAsmFPU.B             ; BL
02831                 fmul    dword ptr[BlueMask]
02832                 fadd    qword ptr[Magic]                                ; Bk
02833                 fild    dword ptr [ebx]EdgeAsmFPU.G             ; GL   Bk
02834                 fmul    dword ptr[GreenMask2]
02835                 fadd    qword ptr[Magic]                                ; Gk   Bk
02836                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   Gk   Bk
02837                 fmul    dword ptr[MiniRedMask2]
02838                 fadd    qword ptr[Magic]                                ; Rk   Gk   Bk
02839                 fxch    st(2)                                                   ; Bk   Gk   Rk
02840                 fstp    qword ptr[Bucket]                               ; Gk   Rk
02841                 fstp    qword ptr[Bucket2]                              ; Rk
02842 
02843                 mov             esi,dword ptr[Bucket]
02844                 mov             eax,dword ptr[Bucket2]
02845 
02846                 and             esi,BLUEMASK2
02847                 and             eax,GREENMASK2
02848 
02849                 fstp    qword ptr[Bucket]
02850 
02851                 mov             ecx,TDest
02852                 mov             ebx,dword ptr[Bucket]
02853 
02854                 and             ebx,REDMASK2
02855                 or              esi,eax
02856 
02857                 add             TDest,2
02858                 or              esi,ebx
02859 
02860                 mov             ebx,pLeft
02861                 mov             word ptr[ecx],si
02862 
02863                 mov             ecx,pRight
02864                 dec             edx
02865 
02866                 jz              GouraudReturnNoZ
02867                 mov             esi,edx
02868                 and             esi,1
02869                 sub             edx,esi
02870                 jz              GouraudReturnNoZ
02871 
02872 NoSinglePixie:
02873                 shr             edx,1
02874                 fld1
02875                 mov     [widTemp],edx                 ; just for a temp
02876                 
02877 
02878                 ; try to keep fmul fxch pairs seperated to avoid stalling
02879                 ; calc this scanlines steps                             ; FPU Stack
02880                                                                                                 ; st0  st1  st2  st3  st4  st5  st6  st7
02881                 fidiv   dword ptr [widTemp]                             ; WID
02882                 fild    dword ptr [ecx]EdgeAsmFPU.R             ; RR   WID
02883                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   RR   WID
02884                 fsub    st(1),st                                                ; RL   RD   WID
02885                 fild    [ecx]EdgeAsmFPU.G                               ; GR   RL   RD   WID
02886                 fild    [ebx]EdgeAsmFPU.G                               ; GL   GR   RL   RD   WID
02887                 fsub    st(1),st                                                ; GL   GD   RL   RD   WID
02888                 fild    [ecx]EdgeAsmFPU.B                               ; BR   GL   GD   RL   RD   WID
02889                 fild    [ebx]EdgeAsmFPU.B                               ; BL   BR   GL   GD   RL   RD   WID
02890                 fsub    st(1),st                                                ; BL   BD   GL   GD   RL   RD   WID
02891                 fxch    st(5)                                                   ; RD   BD   GL   GD   RL   BL   WID
02892                 fmul    st,st(6)                                                ; RI   BD   GL   GD   RL   BL   WID
02893                 frndint
02894                 fxch    st(3)                                                   ; GD   BD   GL   RI   RL   BL   WID
02895                 fmul    st,st(6)                                                ; GI   BD   GL   RI   RL   BL   WID
02896                 frndint
02897                 fxch    st(6)                                                   ; WID  BD   GL   RI   RL   BL   GI
02898                 fmulp   st(1),st                                                ; BI   GL   RI   RL   BL   GI
02899                 frndint
02900                 fld             qword ptr[RedMask2]                             ; rm   BI   GL   RI   RL   BL   GI
02901                 fmul    st(3),st                                                ; rm   BI   GL   RI   RL   BL   GI
02902                 fmulp   st(4),st                                                ; BI   GL   RI   RL   BL   GI
02903                 fld             dword ptr[GreenMask2]                   ; gm   BI   GL   RI   RL   BL   GI
02904                 fmul    st(2),st                                                ; gm   BI   GL   RI   RL   BL   GI
02905                 fmulp   st(6),st                                                ; BI   GL   RI   RL   BL   GI
02906                 fld             dword ptr[BlueMask]                             ; bm   BI   GL   RI   RL   BL   GI
02907                 fmul    st(1),st                                                ; bm   BI   GL   RI   RL   BL   GI
02908                 fmulp   st(5),st                                                ; BI   GL   RI   RL   BL   GI
02909 
02910 PixieLoop:
02911 
02912                 fld             st(3)                                                   ; r    BI   GL   RI   RL   BL   GI
02913                 fadd    qword ptr[Magic]                                ; rk   BI   GL   RI   RL   BL   GI
02914                 fld             st(2)                                                   ; g    rk   BI   GL   RI   RL   BL   GI
02915                 fadd    qword ptr[Magic]                                ; gk   rk   BI   GL   RI   RL   BL   GI
02916                 fxch    st(1)                                                   ; rk   gk   BI   GL   RI   RL   BL   GI
02917                 fstp    qword ptr[Bucket]                               ; gk   BI   GL   RI   RL   BL   GI
02918                 fstp    qword ptr[Bucket2]                              ; BI   GL   RI   RL   BL   GI
02919                 fld             st(4)                                                   ; b    BI   GL   RI   RL   BL   GI
02920                 fadd    qword ptr[Magic]                                ; bk   BI   GL   RI   RL   BL   GI
02921 
02922                 mov             ecx,dword ptr[Bucket]
02923                 mov             eax,dword ptr[Bucket2]
02924 
02925                 fstp    qword ptr[Bucket]                               ; BI   GL   RI   RL   BL   GI
02926                 fadd    st(4),st                                                ; BI   GL   RI   RL   BL2  GI
02927 
02928                 and             ecx,REDMASK2
02929                 and             eax,GREENMASK2
02930 
02931                 mov             ebx,dword ptr[Bucket]
02932                 or              ecx,eax
02933 
02934                 fstp    qword ptr[Bucket]                               ; GL   RI   RL   BL2  GI
02935                 fadd    st,st(4)                                                ; GL2  RI   RL   BL2  GI
02936                 fstp    qword ptr[Bucket2]                              ; RI   RL   BL2  GI
02937                 fadd    st(1),st                                                ; RI   RL2  BL2  GI
02938                 fld             qword ptr[Bucket2]                              ; GL2  RI   RL2  BL2  GI
02939                 fld             qword ptr[Bucket]                               ; BI   GL2  RI   RL2  BL2  GI
02940 
02941                 and             ebx,BLUEMASK2
02942                 mov             edi,TDest
02943 
02944                 or              ecx,ebx
02945                 add             TDest,4
02946 
02947                 rol             ecx,16
02948 
02949                 mov             [edi],ecx
02950                 dec             edx
02951 
02952                 jnz             PixieLoop
02953 
02954 
02955                 fstp    [u16]
02956                 fstp    [v16]
02957                 fstp    [u16]
02958                 fstp    [v16]
02959                 fstp    [u16]
02960                 fstp    [v16]
02961 
02962 GouraudReturnNoZ:
02963                 pop             edi
02964                 pop             esi
02965                 pop             ecx
02966                 pop             ebx
02967         }
02968 }

void DrawScanLineGouraudNoZTrans_Asm555X86FPU EdgeAsmFPU pLeft,
EdgeAsmFPU pRight
 

Definition at line 357 of file x86span555.c.

References B, Blue, BLUEMASK2, Bucket, Bucket2, Dest, G, GBitPtrHalf, GHMaskShifted, Green, GREENMASK2, GWMask, Magic, or, R, r, Real65536, Red, REDMASK2, TDest, TempPix, Two, VShift, widTemp, and EdgeAsmFPUTag::X.

Referenced by RenderMiscTexturePoly().

00358 {
00359         TDest   =Dest;
00360         Red             =Green  =0;
00361         _asm
00362         {
00363                 push    ebx
00364                 push    ecx
00365                 push    esi
00366                 push    edi
00367 
00368                 mov             ebx,pLeft
00369                 mov     ecx,pRight
00370                 mov     eax,[ebx]EdgeAsmFPU.X
00371                 mov     edx,[ecx]EdgeAsmFPU.X
00372                 sub     edx,eax
00373                 jle             GouraudReturnNoZ
00374 
00375                 mov             esi,eax
00376                 inc             edx
00377                 shl             eax,1
00378                 add             TDest,eax
00379                 test    esi,1           //dword align left side
00380                 jz              NoSinglePixie
00381 
00382                 //odd sized spans write one pixel to dword align
00383                 fld     dword ptr [ebx]EdgeAsmFPU.u             ; UL
00384                 fmul    [Real65536]                                             ; UL16
00385                 fld     dword ptr [ebx]EdgeAsmFPU.v             ; VL   UL16
00386                 fmul    [Real65536]                                             ; VL16 UL16
00387                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   VL16 UL16
00388                 fild    dword ptr [ebx]EdgeAsmFPU.G             ; GL   RL   VL16 UL16
00389                 fild    dword ptr [ebx]EdgeAsmFPU.B             ; BL   GL   RL   VL16 UL16
00390                 fxch    st(4)                                                   ; UL16 GL   RL   VL16 BL
00391                 fistp   [u16]                                                   ; GL   RL   VL16 BL
00392                 fxch    st(2)                                                   ; VL16 RL   GL   BL
00393                 fistp   [v16]                                                   ; RL   GL   BL
00394 
00395                 mov     [widTemp],edx
00396 
00397                 mov             ecx,[VShift]
00398                 mov             ebx,[GHMaskShifted]
00399 
00400                 mov             esi,[GWMask]
00401                 mov             edi,[v16]
00402 
00403                 mov             edx,dword ptr[u16]
00404 
00405                 shr             edi,cl
00406 
00407                 shr             edx,16
00408                 xor             eax,eax
00409 
00410                 and             edi,ebx
00411                 and             edx,esi
00412 
00413                 add             edi,edx
00414 
00415                 add             edi,GBitPtrHalf
00416                 mov             ax,word ptr[edi*2]
00417 
00418                 mov             word ptr[TempPix],ax
00419 
00420                 mov             ebx,eax
00421                 and             eax,REDMASK2
00422 
00423                 mov             ecx,ebx
00424                 and             ebx,GREENMASK2
00425 
00426                 mov             dword ptr[Red],eax
00427                 and             ecx,BLUEMASK2
00428 
00429                 mov             dword ptr[Green],ebx
00430                 mov             dword ptr[Blue],ecx
00431 
00432                 fimul   dword ptr[Red]                                  ; R    GL   BL
00433                 fxch    st(1)                                                   ; GL   R    BL
00434                 fimul   dword ptr[Green]                                ; G    R    BL
00435                 fxch    st(1)                                                   ; R    G    BL
00436                 fadd    qword ptr[Magic]                                ; Rk   G    BL
00437                 fxch    st(2)                                                   ; BL   G    Rk
00438                 fimul   [Blue]                                                  ; B    G    Rk
00439                 fxch    st(1)                                                   ; G    B    Rk
00440                 fadd    qword ptr[Magic]                                ; Gk   B    Rk
00441                 fxch    st(2)                                                   ; Rk   B    Gk
00442                 fstp    qword ptr[Bucket]                               ; B    Gk
00443                 fadd    qword ptr[Magic]                                ; Bk   Gk
00444                 fxch    st(1)                                                   ; Gk   Bk
00445                 fstp    qword ptr[Bucket2]                              ; Bk
00446 
00447                 mov             edx,dword ptr[Bucket]
00448                 mov             eax,dword ptr[Bucket2]
00449 
00450                 and             edx,REDMASK2
00451                 and             eax,GREENMASK2
00452 
00453                 fstp    qword ptr[Bucket]
00454 
00455                 mov             ecx,TDest
00456                 mov             ebx,dword ptr[Bucket]
00457 
00458                 and             ebx,BLUEMASK2
00459                 or              edx,eax
00460 
00461                 add             TDest,2
00462                 or              edx,ebx
00463 
00464                 mov             ebx,pLeft
00465                 cmp             word ptr[TempPix],01h
00466                 je              SkipSinglePixie
00467 
00468                 mov             word ptr[ecx],dx
00469 
00470 SkipSinglePixie:
00471                 mov     edx,[widTemp]
00472                 mov     ecx,pRight
00473                 dec             edx
00474                 jz              GouraudReturnNoZ
00475                 mov             esi,edx
00476                 and             esi,1
00477                 sub             edx,esi
00478                 jz              GouraudReturnNoZ
00479 
00480 NoSinglePixie:
00481                 mov     [widTemp],edx                 ; just for a temp
00482                 shr             edx,1
00483 
00484                 ; try to keep fmul fxch pairs seperated to avoid stalling
00485                 ; calc this scanlines steps           ; FPU Stack
00486                                                       ; st0  st1  st2  st3  st4  st5  st6  st7
00487                 fild    dword ptr [widTemp]           ; WID
00488 
00489                 mov     [widTemp],edx                 ; Color interps doubled
00490 
00491                 fld     dword ptr [ecx]EdgeAsmFPU.u      ; UR   WID
00492                 fld     dword ptr [ebx]EdgeAsmFPU.u      ; UL   UR   WID
00493                 fsub    st(1), st                     ; UL   UD   WID
00494                 fld     dword ptr [ecx]EdgeAsmFPU.v      ; VR   UL   UD   WID
00495                 fxch    st(1)                         ; UL   VR   UD   WID
00496                 fmul    [Real65536]                   ; UL16 VR   UD   WID
00497                 fld     dword ptr [ebx]EdgeAsmFPU.v      ; VL   UL16 VR   UD   WID
00498                 fsub    st(2), st                     ; VL   UL16 VD   UD   WID
00499                 fild    dword ptr [ecx]EdgeAsmFPU.R      ; RR   VL   UL16 VD   UD   WID
00500                 fxch    st(3)                         ; VD   VL   UL16 RR   UD   WID
00501                 fmul    [Real65536]                   ; VD16 VL   UL16 RR   UD   WID
00502                 fild    dword ptr [ebx]EdgeAsmFPU.R      ; RL   VD16 VL   UL16 RR   UD   WID
00503                 fsub    st(4),st                      ; RL   VD16 VL   UL16 RD   UD   WID
00504                 fxch    st(5)                         ; UD   VD16 VL   UL16 RD   RL   WID
00505                 fmul    [Real65536]                   ; UD16 VD16 VL   UL16 RD   RL   WID
00506                 fxch    st(2)                                             ; VL   VD16 UD16 UL16 RD   RL   WID
00507                 fmul    [Real65536]                   ; VL16 VD16 UD16 UL16 RD   RL   WID
00508                 fxch    st(3)                                                   ; UL16 VD16 UD16 VL16 RD   RL   WID
00509                 fistp   [u16]                                                   ; VD16 UD16 VL16 RD   RL   WID
00510                 fxch    st(2)                                                   ; VL16 UD16 VD16 RD   RL   WID
00511                 fistp   [v16]                                                   ; UD16 VD16 RD   RL   WID
00512                 fld1                                                                    ; 1    UD16 VD16 RD   RL   WID
00513                 fdivrp  st(5),st                                                ; UD16 VD16 RD   RL   DWID
00514 
00515                 //let that cook
00516 
00517                 fmul    st,st(4)                                                ; USTP VD16 RD   RL   DWID
00518                 fild    [ecx]EdgeAsmFPU.G                                       ; RG   USTP VD16 RD   RL   DWID
00519                 fild    [ebx]EdgeAsmFPU.G                                       ; LG   RG   USTP VD16 RD   RL   DWID
00520                 fsub    st(1),st                                                ; LG   GD   USTP VD16 RD   RL   DWID
00521                 fxch    st(2)                                                   ; USTP GD   LG   VD16 RD   RL   DWID
00522                 fistp   [UStep]                                                 ; GD   LG   VD16 RD   RL   DWID
00523                 fild    [ecx]EdgeAsmFPU.B                                       ; RB   GD   LG   VD16 RD   RL   DWID
00524                 fild    [ebx]EdgeAsmFPU.B                                       ; LB   RB   GD   LG   VD16 RD   RL   DWID
00525                 fsub    st(1),st                                                ; LB   BD   GD   LG   VD16 RD   RL   DWID
00526                 fxch    st(4)                                                   ; VD16 BD   GD   LG   LB   RD   RL   DWID
00527                 fmul    st,st(7)                                                ; VSTP BD   GD   LG   LB   RD   RL   DWID
00528                 fxch    st(7)                                                   ; DWID BD   GD   LG   LB   RD   RL   VSTP
00529                 fmul    dword ptr[Two]                                  ; DW2  BD   GD   LG   LB   RD   RL   VSTP
00530                 fxch    st(7)                                                   ; VSTP BD   GD   LG   LB   RD   RL   DW2
00531                 fxch    st(5)                                                   ; RD   BD   GD   LG   LB   VSTP RL   DW2
00532                 fmul    st,st(7)                                                ; RI   BD   GD   LG   LB   VSTP RL   DW2
00533                 frndint
00534                 fxch    st(2)                                                   ; GD   BD   RI   LG   LB   VSTP RL   DW2
00535                 fmul    st,st(7)                                                ; GI   BD   RI   LG   LB   VSTP RL   DW2
00536                 frndint
00537                 fxch    st(7)                                                   ; DW2  BD   RI   LG   LB   VSTP RL   GI
00538                 fmulp   st(1),st                                                ; BI   RI   LG   LB   VSTP RL   GI
00539                 frndint
00540                 fxch    st(4)                                                   ; VSTP RI   LG   LB   BI   RL   GI
00541                 fistp   [VStep]                                                 ; RI   LG   LB   BI   RL   GI
00542 
00543                 push    ebp
00544 
00545 PixieLoop:
00546                 mov             ecx,[VShift]
00547                 mov             ebx,[GHMaskShifted]
00548 
00549                 mov             ebp,[GWMask]
00550                 mov             edi,[v16]
00551 
00552                 mov             edx,dword ptr[u16]
00553                 mov             esi,edi
00554 
00555                 mov             eax,edx
00556 
00557                 shr             edi,cl
00558                 add             esi,[VStep]
00559 
00560                 shr             edx,16
00561                 add             eax,[UStep]
00562 
00563                 and             edi,ebx
00564                 and             edx,ebp
00565 
00566                 add             edi,edx
00567                 mov             edx,eax
00568 
00569                 add             edi,GBitPtrHalf
00570                 add             eax,[UStep]
00571 
00572                 mov             [u16],eax
00573                 mov             ax,word ptr[edi*2]
00574 
00575                 mov             edi,esi
00576                 add             esi,[VStep]
00577 
00578                 shr             edx,16
00579                 mov             [v16],esi
00580 
00581                 shr             edi,cl
00582                 and             edx,ebp
00583 
00584                 mov             esi,GBitPtrHalf
00585                 and             edi,ebx
00586 
00587                 shl             eax,16
00588                 add             esi,edx
00589 
00590                 add             esi,edi
00591 
00592                 mov             ax,word ptr[esi*2]
00593 
00594                 mov             [TempPix],eax
00595 
00596                 mov             ebx,eax
00597                 and             eax,REDMASK2
00598 
00599                 mov             ecx,ebx
00600                 and             ebx,GREENMASK2
00601 
00602                 mov             dword ptr[Red],eax
00603                 and             ecx,BLUEMASK2
00604 
00605                 mov             dword ptr[Green],ebx
00606                 mov             dword ptr[Blue],ecx
00607 
00608                 fild    qword ptr[Red]                                  ; r    RI   LG   LB   BI   RL   GI
00609                 fmul    st,st(5)                                                ; R    RI   LG   LB   BI   RL   GI
00610                 fild    qword ptr[Green]                                ; g    R    RI   LG   LB   BI   RL   GI
00611                 fmul    st,st(3)                                                ; G    R    RI   LG   LB   BI   RL   GI
00612                 fxch    st(6)                                                   ; RL   R    RI   LG   LB   BI   G    GI
00613                 fadd    st,st(2)                                                ; RL2  R    RI   LG   LB   BI   G    GI
00614                 fxch    st(3)                                                   ; LG   R    RI   RL2  LB   BI   G    GI
00615                 fadd    st,st(7)                                                ; LG2  R    RI   RL2  LB   BI   G    GI
00616                 fxch    st(6)                                                   ; G    R    RI   RL2  LB   BI   LG2  GI
00617                 fadd    qword ptr[Magic]                                ; Gk   R    RI   RL2  LB   BI   LG2  GI
00618                 fxch    st(1)                                                   ; R    Gk   RI   RL2  LB   BI   LG2  GI
00619                 fadd    qword ptr[Magic]                                ; Rk   Gk   RI   RL2  LB   BI   LG2  GI
00620                 fxch    st(1)                                                   ; Gk   Rk   RI   RL2  LB   BI   LG2  GI
00621                 fstp    qword ptr[Bucket]                               ; Rk   RI   RL2  LB   BI   LG2  GI
00622                 fstp    qword ptr[Bucket2]                              ; RI   RL2  LB   BI   LG2  GI
00623 
00624                 mov             edx,dword ptr[Bucket]
00625                 mov             eax,dword ptr[Bucket2]
00626 
00627                 fild    dword ptr[Blue]                                 ; b    RI   RL2  LB   BI   LG2  GI
00628                 fmul    st,st(3)                                                ; B    RI   RL2  LB   BI   LG2  GI
00629                 fxch    st(3)                                                   ; LB   RI   RL2  B    BI   LG2  GI
00630                 fadd    st,st(4)                                                ; LB2  RI   RL2  B    BI   LG2  GI
00631                 fxch    st(3)                                                   ; B    RI   RL2  LB2  BI   LG2  GI
00632                 fadd    qword ptr[Magic]                                ; Bk   RI   RL2  LB2  BI   LG2  GI
00633 
00634                 and             edx,GREENMASK2
00635                 and             eax,REDMASK2
00636 
00637                 fstp    qword ptr[Bucket]                               ; RI   RL2  LB2  BI   LG2  GI
00638                 fstp    qword ptr[Bucket2]                              ; RL2  LB2  BI   LG2  GI
00639 
00640                 mov             edi,edx
00641                 mov             ebx,dword ptr[Bucket]
00642                 or              edi,eax
00643                 mov             ebp,TDest
00644                 and             ebx,BLUEMASK2
00645 
00646                 fxch    st(3)                                                   ; LG2  LB2  BI   RL2  GI
00647                 fld             qword ptr[Bucket2]                              ; RI   LG2  LB2  BI   RL2  GI
00648 
00649                 or              edi,ebx
00650                 add             TDest,4
00651 
00652                 cmp             [TempPix],010001h
00653                 je              SkipPixie
00654 
00655                 mov             [ebp],edi
00656 
00657 SkipPixie:
00658                 dec             [widTemp]
00659 
00660                 jnz             PixieLoop
00661 
00662                 pop             ebp
00663 
00664                 fstp    [u16]
00665                 fstp    [v16]
00666                 fstp    [u16]
00667                 fstp    [v16]
00668                 fstp    [u16]
00669                 fstp    [v16]
00670 
00671 GouraudReturnNoZ:
00672                 pop             edi
00673                 pop             esi
00674                 pop             ecx
00675                 pop             ebx
00676         }
00677 }

void DrawScanLineGouraudZBuffer_Asm555X86FPU EdgeAsmFPU pLeft,
EdgeAsmFPU pRight
 

(DRV_RENDER_NO_ZMASK | DRV_RENDER_NO_ZWRITE)

Definition at line 679 of file x86span555.c.

References B, Blue, BLUEMASK2, Bucket, Bucket2, Dest, G, GBitPtrHalf, GHMaskShifted, Green, GREENMASK2, GWMask, Magic, or, pZBufferPtr, R, r, Real65536, Red, REDMASK2, TDest, Two, VShift, widTemp, and EdgeAsmFPUTag::X.

Referenced by RenderMiscTexturePoly().

00680 {
00681         TDest   =Dest;
00682         Red             =Green  =0;
00683         _asm
00684         {
00685                 push    ebx
00686                 push    ecx
00687                 push    esi
00688                 push    edi
00689 
00690                 mov             ebx,pLeft
00691                 mov     ecx,pRight
00692                 mov     eax,[ebx]EdgeAsmFPU.X
00693                 mov     edx,[ecx]EdgeAsmFPU.X
00694                 sub     edx,eax
00695                 jle             GouraudReturnNoZ
00696 
00697                 mov             esi,eax
00698                 inc             edx
00699                 shl             eax,1
00700                 add             TDest,eax
00701                 add             pZBufferPtr,eax
00702                 test    esi,1           //dword align left
00703                 jz              NoSinglePixie
00704 
00705                 //odd sized spans write one pixel to dword align
00706                 fld     dword ptr [ebx]EdgeAsmFPU.u             ; UL
00707                 fmul    [Real65536]                                             ; UL16
00708                 fld     dword ptr [ebx]EdgeAsmFPU.v             ; VL   UL16
00709                 fmul    [Real65536]                                             ; VL16 UL16
00710                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   VL16 UL16
00711                 fild    dword ptr [ebx]EdgeAsmFPU.G             ; GL   RL   VL16 UL16
00712                 fild    dword ptr [ebx]EdgeAsmFPU.B             ; BL   GL   RL   VL16 UL16
00713                 fxch    st(4)                                                   ; UL16 GL   RL   VL16 BL
00714                 fistp   [u16]                                                   ; GL   RL   VL16 BL
00715                 fxch    st(2)                                                   ; VL16 RL   GL   BL
00716                 fistp   [v16]                                                   ; RL   GL   BL
00717                 fld             dword ptr[ebx]EdgeAsmFPU.z              ; z    RL   GL   BL
00718                 fistp   [z16]                                                   ; RL   GL   BL
00719 
00720                 mov     [widTemp],edx
00721 
00722                 mov             ecx,[VShift]
00723                 mov             ebx,[GHMaskShifted]
00724 
00725                 mov             esi,[GWMask]
00726                 mov             edi,[v16]
00727 
00728                 mov             edx,dword ptr[u16]
00729 
00730                 shr             edi,cl
00731 
00732                 shr             edx,16
00733                 xor             eax,eax
00734 
00735                 and             edi,ebx
00736                 and             edx,esi
00737 
00738                 add             edi,edx
00739 
00740                 add             edi,GBitPtrHalf
00741                 mov             ax,word ptr[edi*2]
00742 
00743                 mov             ebx,eax
00744                 and             eax,REDMASK2
00745 
00746                 mov             ecx,ebx
00747                 and             ebx,GREENMASK2
00748 
00749                 mov             dword ptr[Red],eax
00750                 and             ecx,BLUEMASK2
00751 
00752                 mov             dword ptr[Green],ebx
00753                 mov             dword ptr[Blue],ecx
00754 
00755                 fimul   dword ptr[Red]                                  ; R    GL   BL
00756                 fxch    st(1)                                                   ; GL   R    BL
00757                 fimul   dword ptr[Green]                                ; G    R    BL
00758                 fxch    st(1)                                                   ; R    G    BL
00759                 fadd    qword ptr[Magic]                                ; Rk   G    BL
00760                 fxch    st(2)                                                   ; BL   G    Rk
00761                 fimul   [Blue]                                                  ; B    G    Rk
00762                 fxch    st(1)                                                   ; G    B    Rk
00763                 fadd    qword ptr[Magic]                                ; Gk   B    Rk
00764                 fxch    st(2)                                                   ; Rk   B    Gk
00765                 fstp    qword ptr[Bucket]                               ; B    Gk
00766                 fadd    qword ptr[Magic]                                ; Bk   Gk
00767                 fxch    st(1)                                                   ; Gk   Bk
00768                 fstp    qword ptr[Bucket2]                              ; Bk
00769 
00770                 mov             edx,dword ptr[Bucket]
00771                 mov             eax,dword ptr[Bucket2]
00772 
00773                 and             edx,REDMASK2
00774                 and             eax,GREENMASK2
00775 
00776                 fstp    qword ptr[Bucket]
00777 
00778                 mov             ecx,TDest
00779                 mov             ebx,dword ptr[Bucket]
00780 
00781                 mov             esi,[z16]
00782                 and             ebx,BLUEMASK2
00783 
00784                 shr             esi,16
00785                 or              edx,eax
00786 
00787                 mov             eax,pZBufferPtr
00788                 add             TDest,2
00789 
00790                 cmp             word ptr[eax],si
00791                 jg              SkipSinglePixie
00792 
00793                 or              edx,ebx
00794                 mov             word ptr[eax],si
00795 
00796                 mov             word ptr[ecx],dx
00797 
00798 SkipSinglePixie:
00799                 mov             ebx,pLeft
00800                 mov     edx,[widTemp]
00801                 add             pZBufferPtr,2
00802                 mov     ecx,pRight
00803                 dec             edx
00804                 jz              GouraudReturnNoZ
00805                 mov             esi,edx
00806                 and             esi,1
00807                 sub             edx,esi
00808                 jz              GouraudReturnNoZ
00809 
00810 NoSinglePixie:
00811                 mov     [widTemp],edx                 ; just for a temp
00812                 shr             edx,1
00813 
00814                 ; try to keep fmul fxch pairs seperated to avoid stalling
00815                 ; calc this scanlines steps           ; FPU Stack
00816                                                       ; st0  st1  st2  st3  st4  st5  st6  st7
00817                 fild    dword ptr [widTemp]           ; WID
00818 
00819                 mov     [widTemp],edx                 ; Color interps doubled
00820 
00821                 fld     dword ptr [ecx]EdgeAsmFPU.u ; UR   WID
00822                 fld     dword ptr [ebx]EdgeAsmFPU.u ; UL   UR   WID
00823                 fsub    st(1), st                   ; UL   UD   WID
00824                 fld     dword ptr [ecx]EdgeAsmFPU.v ; VR   UL   UD   WID
00825                 fxch    st(1)                       ; UL   VR   UD   WID
00826                 fmul    [Real65536]                 ; UL16 VR   UD   WID
00827                 fld     dword ptr [ebx]EdgeAsmFPU.v ; VL   UL16 VR   UD   WID
00828                 fsub    st(2), st                   ; VL   UL16 VD   UD   WID
00829                 fild    dword ptr [ecx]EdgeAsmFPU.R ; RR   VL   UL16 VD   UD   WID
00830                 fxch    st(3)                       ; VD   VL   UL16 RR   UD   WID
00831                 fmul    [Real65536]                 ; VD16 VL   UL16 RR   UD   WID
00832                 fild    dword ptr [ebx]EdgeAsmFPU.R ; RL   VD16 VL   UL16 RR   UD   WID
00833                 fsub    st(4),st                    ; RL   VD16 VL   UL16 RD   UD   WID
00834                 fxch    st(5)                       ; UD   VD16 VL   UL16 RD   RL   WID
00835                 fmul    [Real65536]                 ; UD16 VD16 VL   UL16 RD   RL   WID
00836                 fxch    st(2)                                           ; VL   VD16 UD16 UL16 RD   RL   WID
00837                 fmul    [Real65536]                 ; VL16 VD16 UD16 UL16 RD   RL   WID
00838                 fxch    st(3)                                           ; UL16 VD16 UD16 VL16 RD   RL   WID
00839                 fistp   [u16]                                           ; VD16 UD16 VL16 RD   RL   WID
00840                 fxch    st(2)                                           ; VL16 UD16 VD16 RD   RL   WID
00841                 fistp   [v16]                                           ; UD16 VD16 RD   RL   WID
00842                 fld1                                                            ; 1    UD16 VD16 RD   RL   WID
00843                 fdivrp  st(5),st                                        ; UD16 VD16 RD   RL   DWID
00844 
00845                 //let that cook
00846 
00847                 fmul    st,st(4)                                                ; USTP VD16 RD   RL   DWID
00848                 fild    [ecx]EdgeAsmFPU.G                               ; RG   USTP VD16 RD   RL   DWID
00849                 fild    [ebx]EdgeAsmFPU.G                               ; LG   RG   USTP VD16 RD   RL   DWID
00850                 fsub    st(1),st                                                ; LG   GD   USTP VD16 RD   RL   DWID
00851                 fxch    st(2)                                                   ; USTP GD   LG   VD16 RD   RL   DWID
00852                 fistp   [UStep]                                                 ; GD   LG   VD16 RD   RL   DWID
00853                 fild    [ecx]EdgeAsmFPU.B                               ; RB   GD   LG   VD16 RD   RL   DWID
00854                 fild    [ebx]EdgeAsmFPU.B                               ; LB   RB   GD   LG   VD16 RD   RL   DWID
00855                 fsub    st(1),st                                                ; LB   BD   GD   LG   VD16 RD   RL   DWID
00856                 fxch    st(4)                                                   ; VD16 BD   GD   LG   LB   RD   RL   DWID
00857                 fmul    st,st(7)                                                ; VSTP BD   GD   LG   LB   RD   RL   DWID
00858                 fxch    st(7)                                                   ; DWID BD   GD   LG   LB   RD   RL   VSTP
00859                 fmul    dword ptr[Two]                                  ; DW2  BD   GD   LG   LB   RD   RL   VSTP
00860                 fxch    st(7)                                                   ; VSTP BD   GD   LG   LB   RD   RL   DW2
00861                 fxch    st(5)                                                   ; RD   BD   GD   LG   LB   VSTP RL   DW2
00862                 fmul    st,st(7)                                                ; RI   BD   GD   LG   LB   VSTP RL   DW2
00863                 frndint
00864                 fxch    st(2)                                                   ; GD   BD   RI   LG   LB   VSTP RL   DW2
00865                 fmul    st,st(7)                                                ; GI   BD   RI   LG   LB   VSTP RL   DW2
00866                 frndint
00867                 fxch    st(1)                                                   ; BD   GI   RI   LG   LB   VSTP RL   DW2
00868                 fmul    st,st(7)                                                ; BD   GI   RI   LG   LB   VSTP RL   DW2
00869                 frndint
00870                 fxch    st(5)                                                   ; VSTP GI   RI   LG   LB   BD   RL   DW2
00871                 fistp   [VStep]                                                 ; GI   RI   LG   LB   BD   RL   DW2
00872                 fld             [ecx]EdgeAsmFPU.z                               ; rz   GI   RI   LG   LB   BD   RL   DW2
00873                 fsub    [ebx]EdgeAsmFPU.z                               ; zd   GI   RI   LG   LB   BD   RL   DW2
00874                 fxch    st(7)                                                   ; DW2  GI   RI   LG   LB   BD   RL   zd
00875                 fmulp   st(7),st                                                ; GI   RI   LG   LB   BD   RL   zd
00876                 fld             [ebx]EdgeAsmFPU.z                               ; lz   GI   RI   LG   LB   BD   RL   zd
00877                 fxch    st(7)                                                   ; zd   GI   RI   LG   LB   BD   RL   lz
00878                 fistp   [ZStep]                                                 ; GI   RI   LG   LB   BD   RL   lz
00879                 fxch    st(6)                                                   ; lz   RI   LG   LB   BD   RL   GI
00880                 fistp   [z16]                                                   ; RI   LG   LB   BD   RL   GI
00881 
00882                 push    ebp
00883 
00884 PixieLoop:
00885                 mov             ebx,[ZStep]
00886 
00887                 add             [z16],ebx
00888                 mov             ecx,[VShift]
00889 
00890                 mov             edi,[z16]
00891 
00892                 shr             edi,16
00893                 mov             ebx,[GHMaskShifted]
00894 
00895                 mov             ebp,[GWMask]
00896                 mov             edx,dword ptr[u16]
00897 
00898                 mov             word ptr[Z32],di
00899                 mov             eax,edx
00900 
00901                 shr             edx,16
00902                 mov             edi,[v16]
00903 
00904                 add             eax,[UStep]
00905                 mov             esi,edi
00906 
00907                 shr             edi,cl
00908                 add             esi,[VStep]
00909 
00910                 and             edi,ebx
00911                 and             edx,ebp
00912 
00913                 add             edi,edx
00914                 mov             edx,eax
00915 
00916                 add             edi,GBitPtrHalf
00917                 add             eax,[UStep]
00918 
00919                 mov             [u16],eax
00920                 mov             ax,word ptr[edi*2]
00921 
00922                 mov             edi,esi
00923                 add             esi,[VStep]
00924 
00925                 shr             edx,16
00926                 mov             [v16],esi
00927 
00928                 shr             edi,cl
00929                 and             edx,ebp
00930 
00931                 mov             esi,GBitPtrHalf
00932                 and             edi,ebx
00933 
00934                 shl             eax,16
00935                 add             esi,edx
00936 
00937                 add             esi,edi
00938 
00939                 mov             ax,word ptr[esi*2]
00940 
00941                 mov             ebx,eax
00942                 and             eax,REDMASK2
00943 
00944                 mov             ecx,ebx
00945                 and             ebx,GREENMASK2
00946 
00947                 mov             dword ptr[Red],eax
00948                 and             ecx,BLUEMASK2
00949 
00950                 mov             dword ptr[Green],ebx
00951                 mov             dword ptr[Blue],ecx
00952 
00953                 fild    qword ptr[Red]                                  ; r    RI   LG   LB   BI   RL   GI
00954                 fmul    st,st(5)                                                ; R    RI   LG   LB   BI   RL   GI
00955                 fild    qword ptr[Green]                                ; g    R    RI   LG   LB   BI   RL   GI
00956                 fmul    st,st(3)                                                ; G    R    RI   LG   LB   BI   RL   GI
00957                 fxch    st(6)                                                   ; RL   R    RI   LG   LB   BI   G    GI
00958                 fadd    st,st(2)                                                ; RL2  R    RI   LG   LB   BI   G    GI
00959                 fxch    st(3)                                                   ; LG   R    RI   RL2  LB   BI   G    GI
00960                 fadd    st,st(7)                                                ; LG2  R    RI   RL2  LB   BI   G    GI
00961                 fxch    st(6)                                                   ; G    R    RI   RL2  LB   BI   LG2  GI
00962                 fadd    qword ptr[Magic]                                ; Gk   R    RI   RL2  LB   BI   LG2  GI
00963                 fxch    st(1)                                                   ; R    Gk   RI   RL2  LB   BI   LG2  GI
00964                 fadd    qword ptr[Magic]                                ; Rk   Gk   RI   RL2  LB   BI   LG2  GI
00965                 fxch    st(1)                                                   ; Gk   Rk   RI   RL2  LB   BI   LG2  GI
00966                 fstp    qword ptr[Bucket]                               ; Rk   RI   RL2  LB   BI   LG2  GI
00967                 fstp    qword ptr[Bucket2]                              ; RI   RL2  LB   BI   LG2  GI
00968 
00969                 mov             edx,dword ptr[Bucket]
00970                 mov             eax,dword ptr[Bucket2]
00971 
00972                 fild    dword ptr[Blue]                                 ; b    RI   RL2  LB   BI   LG2  GI
00973                 fmul    st,st(3)                                                ; B    RI   RL2  LB   BI   LG2  GI
00974                 fxch    st(3)                                                   ; LB   RI   RL2  B    BI   LG2  GI
00975                 fadd    st,st(4)                                                ; LB2  RI   RL2  B    BI   LG2  GI
00976                 fxch    st(3)                                                   ; B    RI   RL2  LB2  BI   LG2  GI
00977                 fadd    qword ptr[Magic]                                ; Bk   RI   RL2  LB2  BI   LG2  GI
00978 
00979                 and             edx,GREENMASK2
00980                 and             eax,REDMASK2
00981 
00982                 fstp    qword ptr[Bucket]                               ; RI   RL2  LB2  BI   LG2  GI
00983                 fstp    qword ptr[Bucket2]                              ; RL2  LB2  BI   LG2  GI
00984 
00985                 mov             edi,edx
00986                 mov             ebx,dword ptr[Bucket]
00987                 or              edi,eax
00988                 mov             ebp,TDest
00989                 and             ebx,BLUEMASK2
00990 
00991                 fxch    st(3)                                                   ; LG2  LB2  BI   RL2  GI
00992                 fld             qword ptr[Bucket2]                              ; RI   LG2  LB2  BI   RL2  GI
00993 
00994                 mov             si,word ptr[Z32]
00995                 add             TDest,4
00996 
00997                 mov             ecx,pZBufferPtr
00998                 or              edi,ebx
00999 
01000                 cmp             word ptr[ecx],si
01001                 jg              SkipPixie
01002 
01003                 rol             edi,16
01004 
01005                 mov             [ecx],si
01006                 mov             dword ptr[ebp],edi
01007                 mov             [ecx+2],si
01008 SkipPixie:
01009                 add             pZBufferPtr,4
01010                 dec             [widTemp]
01011 
01012                 jnz             PixieLoop
01013 //              mov             dword ptr[ebp],0ffffffffh
01014 
01015                 pop             ebp
01016 
01017                 fstp    [u16]
01018                 fstp    [v16]
01019                 fstp    [u16]
01020                 fstp    [v16]
01021                 fstp    [u16]
01022                 fstp    [v16]
01023 
01024 GouraudReturnNoZ:
01025                 pop             edi
01026                 pop             esi
01027                 pop             ecx
01028                 pop             ebx
01029         }
01030 }

void DrawScanLineGouraudZBufferNoZWrite_Asm555X86FPU EdgeAsmFPU pLeft,
EdgeAsmFPU pRight
 

Definition at line 1032 of file x86span555.c.

References B, Blue, BLUEMASK2, Bucket, Bucket2, Dest, G, GBitPtrHalf, GHMaskShifted, Green, GREENMASK2, GWMask, Magic, or, pZBufferPtr, R, r, Real65536, Red, REDMASK2, TDest, Two, VShift, widTemp, and EdgeAsmFPUTag::X.

Referenced by RenderMiscTexturePoly().

01033 {
01034         TDest   =Dest;
01035         Red             =Green  =0;
01036         _asm
01037         {
01038                 push    ebx
01039                 push    ecx
01040                 push    esi
01041                 push    edi
01042 
01043                 mov             ebx,pLeft
01044                 mov     ecx,pRight
01045                 mov     eax,[ebx]EdgeAsmFPU.X
01046                 mov     edx,[ecx]EdgeAsmFPU.X
01047                 sub     edx,eax
01048                 jle             GouraudReturnNoZ
01049 
01050                 mov             esi,eax
01051                 inc             edx
01052                 shl             eax,1
01053                 add             TDest,eax
01054                 add             pZBufferPtr,eax
01055                 test    esi,1           //dword align left
01056                 jz              NoSinglePixie
01057 
01058                 //odd sized spans write one pixel to dword align
01059                 fld     dword ptr [ebx]EdgeAsmFPU.u             ; UL
01060                 fmul    [Real65536]                                             ; UL16
01061                 fld     dword ptr [ebx]EdgeAsmFPU.v             ; VL   UL16
01062                 fmul    [Real65536]                                             ; VL16 UL16
01063                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   VL16 UL16
01064                 fild    dword ptr [ebx]EdgeAsmFPU.G             ; GL   RL   VL16 UL16
01065                 fild    dword ptr [ebx]EdgeAsmFPU.B             ; BL   GL   RL   VL16 UL16
01066                 fxch    st(4)                                                   ; UL16 GL   RL   VL16 BL
01067                 fistp   [u16]                                                   ; GL   RL   VL16 BL
01068                 fxch    st(2)                                                   ; VL16 RL   GL   BL
01069                 fistp   [v16]                                                   ; RL   GL   BL
01070                 fld             dword ptr[ebx]EdgeAsmFPU.z              ; z    RL   GL   BL
01071                 fistp   [z16]                                                   ; RL   GL   BL
01072 
01073                 mov     [widTemp],edx
01074 
01075                 mov             ecx,[VShift]
01076                 mov             ebx,[GHMaskShifted]
01077 
01078                 mov             esi,[GWMask]
01079                 mov             edi,[v16]
01080 
01081                 mov             edx,dword ptr[u16]
01082 
01083                 shr             edi,cl
01084 
01085                 shr             edx,16
01086                 xor             eax,eax
01087 
01088                 and             edi,ebx
01089                 and             edx,esi
01090 
01091                 add             edi,edx
01092 
01093                 add             edi,GBitPtrHalf
01094                 mov             ax,word ptr[edi*2]
01095 
01096                 mov             ebx,eax
01097                 and             eax,REDMASK2
01098 
01099                 mov             ecx,ebx
01100                 and             ebx,GREENMASK2
01101 
01102                 mov             dword ptr[Red],eax
01103                 and             ecx,BLUEMASK2
01104 
01105                 mov             dword ptr[Green],ebx
01106                 mov             dword ptr[Blue],ecx
01107 
01108                 fimul   dword ptr[Red]                                  ; R    GL   BL
01109                 fxch    st(1)                                                   ; GL   R    BL
01110                 fimul   dword ptr[Green]                                ; G    R    BL
01111                 fxch    st(1)                                                   ; R    G    BL
01112                 fadd    qword ptr[Magic]                                ; Rk   G    BL
01113                 fxch    st(2)                                                   ; BL   G    Rk
01114                 fimul   [Blue]                                                  ; B    G    Rk
01115                 fxch    st(1)                                                   ; G    B    Rk
01116                 fadd    qword ptr[Magic]                                ; Gk   B    Rk
01117                 fxch    st(2)                                                   ; Rk   B    Gk
01118                 fstp    qword ptr[Bucket]                               ; B    Gk
01119                 fadd    qword ptr[Magic]                                ; Bk   Gk
01120                 fxch    st(1)                                                   ; Gk   Bk
01121                 fstp    qword ptr[Bucket2]                              ; Bk
01122 
01123                 mov             edx,dword ptr[Bucket]
01124                 mov             eax,dword ptr[Bucket2]
01125 
01126                 and             edx,REDMASK2
01127                 and             eax,GREENMASK2
01128 
01129                 fstp    qword ptr[Bucket]
01130 
01131                 mov             ecx,TDest
01132                 mov             ebx,dword ptr[Bucket]
01133 
01134                 mov             esi,[z16]
01135                 and             ebx,BLUEMASK2
01136 
01137                 shr             esi,16
01138                 or              edx,eax
01139 
01140                 mov             eax,pZBufferPtr
01141                 add             TDest,2
01142 
01143                 cmp             word ptr[eax],si
01144                 jg              SkipSinglePixie
01145 
01146                 or              edx,ebx
01147 
01148                 mov             word ptr[ecx],dx
01149 
01150 SkipSinglePixie:
01151                 mov             ebx,pLeft
01152                 mov     edx,[widTemp]
01153                 add             pZBufferPtr,2
01154                 mov     ecx,pRight
01155                 dec             edx
01156                 jz              GouraudReturnNoZ
01157                 mov             esi,edx
01158                 and             esi,1
01159                 sub             edx,esi
01160                 jz              GouraudReturnNoZ
01161 
01162 NoSinglePixie:
01163                 mov     [widTemp],edx                 ; just for a temp
01164                 shr             edx,1
01165 
01166                 ; try to keep fmul fxch pairs seperated to avoid stalling
01167                 ; calc this scanlines steps           ; FPU Stack
01168                                                       ; st0  st1  st2  st3  st4  st5  st6  st7
01169                 fild    dword ptr [widTemp]           ; WID
01170 
01171                 mov     [widTemp],edx                 ; Color interps doubled
01172 
01173                 fld     dword ptr [ecx]EdgeAsmFPU.u ; UR   WID
01174                 fld     dword ptr [ebx]EdgeAsmFPU.u ; UL   UR   WID
01175                 fsub    st(1), st                   ; UL   UD   WID
01176                 fld     dword ptr [ecx]EdgeAsmFPU.v ; VR   UL   UD   WID
01177                 fxch    st(1)                       ; UL   VR   UD   WID
01178                 fmul    [Real65536]                 ; UL16 VR   UD   WID
01179                 fld     dword ptr [ebx]EdgeAsmFPU.v ; VL   UL16 VR   UD   WID
01180                 fsub    st(2), st                   ; VL   UL16 VD   UD   WID
01181                 fild    dword ptr [ecx]EdgeAsmFPU.R ; RR   VL   UL16 VD   UD   WID
01182                 fxch    st(3)                       ; VD   VL   UL16 RR   UD   WID
01183                 fmul    [Real65536]                 ; VD16 VL   UL16 RR   UD   WID
01184                 fild    dword ptr [ebx]EdgeAsmFPU.R ; RL   VD16 VL   UL16 RR   UD   WID
01185                 fsub    st(4),st                    ; RL   VD16 VL   UL16 RD   UD   WID
01186                 fxch    st(5)                       ; UD   VD16 VL   UL16 RD   RL   WID
01187                 fmul    [Real65536]                 ; UD16 VD16 VL   UL16 RD   RL   WID
01188                 fxch    st(2)                                           ; VL   VD16 UD16 UL16 RD   RL   WID
01189                 fmul    [Real65536]                 ; VL16 VD16 UD16 UL16 RD   RL   WID
01190                 fxch    st(3)                                           ; UL16 VD16 UD16 VL16 RD   RL   WID
01191                 fistp   [u16]                                           ; VD16 UD16 VL16 RD   RL   WID
01192                 fxch    st(2)                                           ; VL16 UD16 VD16 RD   RL   WID
01193                 fistp   [v16]                                           ; UD16 VD16 RD   RL   WID
01194                 fld1                                                            ; 1    UD16 VD16 RD   RL   WID
01195                 fdivrp  st(5),st                                        ; UD16 VD16 RD   RL   DWID
01196 
01197                 //let that cook
01198 
01199                 fmul    st,st(4)                                                ; USTP VD16 RD   RL   DWID
01200                 fild    [ecx]EdgeAsmFPU.G                               ; RG   USTP VD16 RD   RL   DWID
01201                 fild    [ebx]EdgeAsmFPU.G                               ; LG   RG   USTP VD16 RD   RL   DWID
01202                 fsub    st(1),st                                                ; LG   GD   USTP VD16 RD   RL   DWID
01203                 fxch    st(2)                                                   ; USTP GD   LG   VD16 RD   RL   DWID
01204                 fistp   [UStep]                                                 ; GD   LG   VD16 RD   RL   DWID
01205                 fild    [ecx]EdgeAsmFPU.B                               ; RB   GD   LG   VD16 RD   RL   DWID
01206                 fild    [ebx]EdgeAsmFPU.B                               ; LB   RB   GD   LG   VD16 RD   RL   DWID
01207                 fsub    st(1),st                                                ; LB   BD   GD   LG   VD16 RD   RL   DWID
01208                 fxch    st(4)                                                   ; VD16 BD   GD   LG   LB   RD   RL   DWID
01209                 fmul    st,st(7)                                                ; VSTP BD   GD   LG   LB   RD   RL   DWID
01210                 fxch    st(7)                                                   ; DWID BD   GD   LG   LB   RD   RL   VSTP
01211                 fmul    dword ptr[Two]                                  ; DW2  BD   GD   LG   LB   RD   RL   VSTP
01212                 fxch    st(7)                                                   ; VSTP BD   GD   LG   LB   RD   RL   DW2
01213                 fxch    st(5)                                                   ; RD   BD   GD   LG   LB   VSTP RL   DW2
01214                 fmul    st,st(7)                                                ; RI   BD   GD   LG   LB   VSTP RL   DW2
01215                 frndint
01216                 fxch    st(2)                                                   ; GD   BD   RI   LG   LB   VSTP RL   DW2
01217                 fmul    st,st(7)                                                ; GI   BD   RI   LG   LB   VSTP RL   DW2
01218                 frndint
01219                 fxch    st(1)                                                   ; BD   GI   RI   LG   LB   VSTP RL   DW2
01220                 fmul    st,st(7)                                                ; BD   GI   RI   LG   LB   VSTP RL   DW2
01221                 frndint
01222                 fxch    st(5)                                                   ; VSTP GI   RI   LG   LB   BD   RL   DW2
01223                 fistp   [VStep]                                                 ; GI   RI   LG   LB   BD   RL   DW2
01224                 fld             [ecx]EdgeAsmFPU.z                               ; rz   GI   RI   LG   LB   BD   RL   DW2
01225                 fsub    [ebx]EdgeAsmFPU.z                               ; zd   GI   RI   LG   LB   BD   RL   DW2
01226                 fxch    st(7)                                                   ; DW2  GI   RI   LG   LB   BD   RL   zd
01227                 fmulp   st(7),st                                                ; GI   RI   LG   LB   BD   RL   zd
01228                 fld             [ebx]EdgeAsmFPU.z                               ; lz   GI   RI   LG   LB   BD   RL   zd
01229                 fxch    st(7)                                                   ; zd   GI   RI   LG   LB   BD   RL   lz
01230                 fistp   [ZStep]                                                 ; GI   RI   LG   LB   BD   RL   lz
01231                 fxch    st(6)                                                   ; lz   RI   LG   LB   BD   RL   GI
01232                 fistp   [z16]                                                   ; RI   LG   LB   BD   RL   GI
01233 
01234                 push    ebp
01235 
01236 PixieLoop:
01237                 mov             ebx,[ZStep]
01238 
01239                 add             [z16],ebx
01240                 mov             ecx,[VShift]
01241 
01242                 mov             edi,[z16]
01243 
01244                 shr             edi,16
01245                 mov             ebx,[GHMaskShifted]
01246 
01247                 mov             ebp,[GWMask]
01248                 mov             edx,dword ptr[u16]
01249 
01250                 mov             word ptr[Z32],di
01251                 mov             eax,edx
01252 
01253                 shr             edx,16
01254                 mov             edi,[v16]
01255 
01256                 add             eax,[UStep]
01257                 mov             esi,edi
01258 
01259                 shr             edi,cl
01260                 add             esi,[VStep]
01261 
01262                 and             edi,ebx
01263                 and             edx,ebp
01264 
01265                 add             edi,edx
01266                 mov             edx,eax
01267 
01268                 add             edi,GBitPtrHalf
01269                 add             eax,[UStep]
01270 
01271                 mov             [u16],eax
01272                 mov             ax,word ptr[edi*2]
01273 
01274                 mov             edi,esi
01275                 add             esi,[VStep]
01276 
01277                 shr             edx,16
01278                 mov             [v16],esi
01279 
01280                 shr             edi,cl
01281                 and             edx,ebp
01282 
01283                 mov             esi,GBitPtrHalf
01284                 and             edi,ebx
01285 
01286                 shl             eax,16
01287                 add             esi,edx
01288 
01289                 add             esi,edi
01290 
01291                 mov             ax,word ptr[esi*2]
01292 
01293                 mov             ebx,eax
01294                 and             eax,REDMASK2
01295 
01296                 mov             ecx,ebx
01297                 and             ebx,GREENMASK2
01298 
01299                 mov             dword ptr[Red],eax
01300                 and             ecx,BLUEMASK2
01301 
01302                 mov             dword ptr[Green],ebx
01303                 mov             dword ptr[Blue],ecx
01304 
01305                 fild    qword ptr[Red]                                  ; r    RI   LG   LB   BI   RL   GI
01306                 fmul    st,st(5)                                                ; R    RI   LG   LB   BI   RL   GI
01307                 fild    qword ptr[Green]                                ; g    R    RI   LG   LB   BI   RL   GI
01308                 fmul    st,st(3)                                                ; G    R    RI   LG   LB   BI   RL   GI
01309                 fxch    st(6)                                                   ; RL   R    RI   LG   LB   BI   G    GI
01310                 fadd    st,st(2)                                                ; RL2  R    RI   LG   LB   BI   G    GI
01311                 fxch    st(3)                                                   ; LG   R    RI   RL2  LB   BI   G    GI
01312                 fadd    st,st(7)                                                ; LG2  R    RI   RL2  LB   BI   G    GI
01313                 fxch    st(6)                                                   ; G    R    RI   RL2  LB   BI   LG2  GI
01314                 fadd    qword ptr[Magic]                                ; Gk   R    RI   RL2  LB   BI   LG2  GI
01315                 fxch    st(1)                                                   ; R    Gk   RI   RL2  LB   BI   LG2  GI
01316                 fadd    qword ptr[Magic]                                ; Rk   Gk   RI   RL2  LB   BI   LG2  GI
01317                 fxch    st(1)                                                   ; Gk   Rk   RI   RL2  LB   BI   LG2  GI
01318                 fstp    qword ptr[Bucket]                               ; Rk   RI   RL2  LB   BI   LG2  GI
01319                 fstp    qword ptr[Bucket2]                              ; RI   RL2  LB   BI   LG2  GI
01320 
01321                 mov             edx,dword ptr[Bucket]
01322                 mov             eax,dword ptr[Bucket2]
01323 
01324                 fild    dword ptr[Blue]                                 ; b    RI   RL2  LB   BI   LG2  GI
01325                 fmul    st,st(3)                                                ; B    RI   RL2  LB   BI   LG2  GI
01326                 fxch    st(3)                                                   ; LB   RI   RL2  B    BI   LG2  GI
01327                 fadd    st,st(4)                                                ; LB2  RI   RL2  B    BI   LG2  GI
01328                 fxch    st(3)                                                   ; B    RI   RL2  LB2  BI   LG2  GI
01329                 fadd    qword ptr[Magic]                                ; Bk   RI   RL2  LB2  BI   LG2  GI
01330 
01331                 and             edx,GREENMASK2
01332                 and             eax,REDMASK2
01333 
01334                 fstp    qword ptr[Bucket]                               ; RI   RL2  LB2  BI   LG2  GI
01335                 fstp    qword ptr[Bucket2]                              ; RL2  LB2  BI   LG2  GI
01336 
01337                 mov             edi,edx
01338                 mov             ebx,dword ptr[Bucket]
01339                 or              edi,eax
01340                 mov             ebp,TDest
01341                 and             ebx,BLUEMASK2
01342 
01343                 fxch    st(3)                                                   ; LG2  LB2  BI   RL2  GI
01344                 fld             qword ptr[Bucket2]                              ; RI   LG2  LB2  BI   RL2  GI
01345 
01346                 mov             si,word ptr[Z32]
01347                 add             TDest,4
01348 
01349                 mov             ecx,pZBufferPtr
01350                 or              edi,ebx
01351 
01352                 cmp             word ptr[ecx],si
01353                 jg              SkipPixie
01354 
01355                 rol             edi,16
01356 
01357                 mov             dword ptr[ebp],edi
01358 SkipPixie:
01359                 add             pZBufferPtr,4
01360                 dec             [widTemp]
01361 
01362                 jnz             PixieLoop
01363 
01364                 pop             ebp
01365 
01366                 fstp    [u16]
01367                 fstp    [v16]
01368                 fstp    [u16]
01369                 fstp    [v16]
01370                 fstp    [u16]
01371                 fstp    [v16]
01372 
01373 GouraudReturnNoZ:
01374                 pop             edi
01375                 pop             esi
01376                 pop             ecx
01377                 pop             ebx
01378         }
01379 }

void DrawScanLineGouraudZBufferNoZWriteSolid_Asm555X86FPU EdgeAsmFPU pLeft,
EdgeAsmFPU pRight
 

Definition at line 3366 of file x86span555.c.

References BlueMask, BLUEMASK2, Bucket, Bucket2, Dest, Green, GreenMask2, GREENMASK2, Magic, MiniRedMask2, or, pZBufferPtr, r, Red, REDMASK2, RedMask2, TDest, widTemp, and EdgeAsmFPUTag::X.

Referenced by RenderGouraudPoly().

03367 {
03368         TDest   =Dest;
03369         Red             =Green  =0;
03370         _asm
03371         {
03372                 push    ebx
03373                 push    ecx
03374                 push    esi
03375                 push    edi
03376 
03377                 mov             ebx,pLeft
03378                 mov     ecx,pRight
03379                 mov     eax,[ebx]EdgeAsmFPU.X
03380                 mov     edx,[ecx]EdgeAsmFPU.X
03381                 sub     edx,eax
03382                 jle             GouraudReturnNoZ
03383 
03384                 mov             esi,eax
03385                 inc             edx
03386                 shl             eax,1
03387                 add             TDest,eax
03388                 add             pZBufferPtr,eax
03389                 test    esi,1                                   //dword align left side
03390                 jz              NoSinglePixie
03391 
03392                 //odd sized spans write one pixel to dword align
03393                 fild    dword ptr [ebx]EdgeAsmFPU.B             ; BL
03394                 fmul    dword ptr[BlueMask]
03395                 fadd    qword ptr[Magic]                                ; Bk
03396                 fild    dword ptr [ebx]EdgeAsmFPU.G             ; GL   Bk
03397                 fmul    dword ptr[GreenMask2]
03398                 fadd    qword ptr[Magic]                                ; Gk   Bk
03399                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   Gk   Bk
03400                 fmul    dword ptr[MiniRedMask2]
03401                 fadd    qword ptr[Magic]                                ; Rk   Gk   Bk
03402                 fxch    st(2)                                                   ; Bk   Gk   Rk
03403                 fstp    qword ptr[Bucket]                               ; Gk   Rk
03404                 fstp    qword ptr[Bucket2]                              ; Rk
03405                 fld             dword ptr[ebx]EdgeAsmFPU.z              ; z
03406                 fistp   [z16]                                                   ;
03407 
03408                 mov             esi,dword ptr[Bucket]
03409                 mov             eax,dword ptr[Bucket2]
03410 
03411                 and             esi,BLUEMASK2
03412                 and             eax,GREENMASK2
03413 
03414                 fstp    qword ptr[Bucket]
03415 
03416                 mov             ecx,TDest
03417                 mov             ebx,dword ptr[Bucket]
03418 
03419                 and             ebx,REDMASK2
03420                 or              esi,eax
03421 
03422                 mov             edi,[z16]
03423                 mov             eax,pZBufferPtr
03424 
03425                 add             TDest,2
03426                 or              esi,ebx
03427 
03428                 shr             edi,16
03429                 mov             ebx,pLeft
03430 
03431                 cmp             word ptr[eax],di
03432                 jg              SkipSinglePixie
03433 
03434                 mov             word ptr[ecx],si
03435 
03436 SkipSinglePixie:
03437                 mov             ecx,pRight
03438                 add             pZBufferPtr,2
03439                 dec             edx
03440 
03441                 jz              GouraudReturnNoZ
03442                 mov             esi,edx
03443                 and             esi,1
03444                 sub             edx,esi
03445                 jz              GouraudReturnNoZ
03446 
03447 NoSinglePixie:
03448                 shr             edx,1
03449                 fld1
03450                 mov     [widTemp],edx                 ; just for a temp
03451                 
03452 
03453                 ; try to keep fmul fxch pairs seperated to avoid stalling
03454                 ; calc this scanlines steps                             ; FPU Stack
03455                                                                                                 ; st0  st1  st2  st3  st4  st5  st6  st7
03456                 fidiv   dword ptr [widTemp]                             ; WID
03457                 fild    dword ptr [ecx]EdgeAsmFPU.R             ; RR   WID
03458                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   RR   WID
03459                 fsub    st(1),st                                                ; RL   RD   WID
03460                 fild    [ecx]EdgeAsmFPU.G                               ; GR   RL   RD   WID
03461                 fild    [ebx]EdgeAsmFPU.G                               ; GL   GR   RL   RD   WID
03462                 fsub    st(1),st                                                ; GL   GD   RL   RD   WID
03463                 fild    [ecx]EdgeAsmFPU.B                               ; BR   GL   GD   RL   RD   WID
03464                 fild    [ebx]EdgeAsmFPU.B                               ; BL   BR   GL   GD   RL   RD   WID
03465                 fsub    st(1),st                                                ; BL   BD   GL   GD   RL   RD   WID
03466                 fxch    st(5)                                                   ; RD   BD   GL   GD   RL   BL   WID
03467                 fmul    st,st(6)                                                ; RI   BD   GL   GD   RL   BL   WID
03468                 frndint
03469                 fxch    st(3)                                                   ; GD   BD   GL   RI   RL   BL   WID
03470                 fmul    st,st(6)                                                ; GI   BD   GL   RI   RL   BL   WID
03471                 frndint
03472                 fxch    st(6)                                                   ; WID  BD   GL   RI   RL   BL   GI
03473                 fmulp   st(1),st                                                ; BI   GL   RI   RL   BL   GI
03474                 frndint
03475                 fld             qword ptr[RedMask2]                             ; rm   BI   GL   RI   RL   BL   GI
03476                 fmul    st(3),st                                                ; rm   BI   GL   RI   RL   BL   GI
03477                 fmulp   st(4),st                                                ; BI   GL   RI   RL   BL   GI
03478                 fld             dword ptr[GreenMask2]                   ; gm   BI   GL   RI   RL   BL   GI
03479                 fmul    st(2),st                                                ; gm   BI   GL   RI   RL   BL   GI
03480                 fmulp   st(6),st                                                ; BI   GL   RI   RL   BL   GI
03481                 fld             dword ptr[BlueMask]                             ; bm   BI   GL   RI   RL   BL   GI
03482                 fmul    st(1),st                                                ; bm   BI   GL   RI   RL   BL   GI
03483                 fmulp   st(5),st                                                ; BI   GL   RI   RL   BL   GI
03484                 fld             [ecx]EdgeAsmFPU.z                               ; rz   BI   GL   RI   RL   BL   GI
03485                 fsub    [ebx]EdgeAsmFPU.z                               ; zd   BI   GL   RI   RL   BL   GI
03486                 fld             [ebx]EdgeAsmFPU.z                               ; lz   zd   BI   GL   RI   RL   BL   GI
03487                 fistp   [z16]                                                   ; zd   BI   GL   RI   RL   BL   GI
03488                 fistp   [ZStep]                                                 ; BI   GL   RI   RL   BL   GI
03489 
03490 PixieLoop:
03491 
03492                 fld             st(3)                                                   ; r    BI   GL   RI   RL   BL   GI
03493                 fadd    qword ptr[Magic]                                ; rk   BI   GL   RI   RL   BL   GI
03494                 fld             st(2)                                                   ; g    rk   BI   GL   RI   RL   BL   GI
03495                 fadd    qword ptr[Magic]                                ; gk   rk   BI   GL   RI   RL   BL   GI
03496                 fxch    st(1)                                                   ; rk   gk   BI   GL   RI   RL   BL   GI
03497                 fstp    qword ptr[Bucket]                               ; gk   BI   GL   RI   RL   BL   GI
03498                 fstp    qword ptr[Bucket2]                              ; BI   GL   RI   RL   BL   GI
03499                 fld             st(4)                                                   ; b    BI   GL   RI   RL   BL   GI
03500                 fadd    qword ptr[Magic]                                ; bk   BI   GL   RI   RL   BL   GI
03501 
03502                 mov             ecx,dword ptr[Bucket]
03503                 mov             eax,dword ptr[Bucket2]
03504 
03505                 fstp    qword ptr[Bucket]                               ; BI   GL   RI   RL   BL   GI
03506                 fadd    st(4),st                                                ; BI   GL   RI   RL   BL2  GI
03507 
03508                 and             ecx,REDMASK2
03509                 and             eax,GREENMASK2
03510 
03511                 mov             ebx,dword ptr[Bucket]
03512                 or              ecx,eax
03513 
03514                 fstp    qword ptr[Bucket]                               ; GL   RI   RL   BL2  GI
03515                 fadd    st,st(4)                                                ; GL2  RI   RL   BL2  GI
03516                 fstp    qword ptr[Bucket2]                              ; RI   RL   BL2  GI
03517                 fadd    st(1),st                                                ; RI   RL2  BL2  GI
03518                 fld             qword ptr[Bucket2]                              ; GL2  RI   RL2  BL2  GI
03519                 fld             qword ptr[Bucket]                               ; BI   GL2  RI   RL2  BL2  GI
03520 
03521                 and             ebx,BLUEMASK2
03522                 mov             edi,TDest
03523 
03524                 or              ecx,ebx
03525                 add             TDest,4
03526 
03527                 mov             eax,[z16]
03528                 mov             esi,pZBufferPtr
03529 
03530                 shr             eax,16
03531                 mov             ebx,[ZStep]
03532 
03533                 cmp             word ptr[esi],ax
03534                 jg              SkipPixie
03535 
03536                 rol             ecx,16
03537                 add             [z16],ebx
03538 
03539                 mov             [edi],ecx
03540 SkipPixie:
03541                 add             pZBufferPtr,4
03542                 dec             edx
03543 
03544                 jnz             PixieLoop
03545 
03546 
03547                 fstp    [u16]
03548                 fstp    [v16]
03549                 fstp    [u16]
03550                 fstp    [v16]
03551                 fstp    [u16]
03552                 fstp    [v16]
03553 
03554 GouraudReturnNoZ:
03555                 pop             edi
03556                 pop             esi
03557                 pop             ecx
03558                 pop             ebx
03559         }
03560 }

void DrawScanLineGouraudZBufferNoZWriteTrans_Asm555X86FPU EdgeAsmFPU pLeft,
EdgeAsmFPU pRight
 

Definition at line 2089 of file x86span555.c.

References B, Blue, BLUEMASK2, Bucket, Bucket2, Dest, G, GBitPtrHalf, GHMaskShifted, Green, GREENMASK2, GWMask, Magic, or, pZBufferPtr, R, r, Real65536, Red, REDMASK2, TDest, TempPix, Two, VShift, widTemp, and EdgeAsmFPUTag::X.

Referenced by RenderMiscTexturePoly().

02090 {
02091         TDest   =Dest;
02092         Red             =Green  =0;
02093         _asm
02094         {
02095                 push    ebx
02096                 push    ecx
02097                 push    esi
02098                 push    edi
02099 
02100                 mov             ebx,pLeft
02101                 mov     ecx,pRight
02102                 mov     eax,[ebx]EdgeAsmFPU.X
02103                 mov     edx,[ecx]EdgeAsmFPU.X
02104                 sub     edx,eax
02105                 jle             GouraudReturnNoZ
02106 
02107                 mov             esi,eax
02108                 inc             edx
02109                 shl             eax,1
02110                 add             TDest,eax
02111                 add             pZBufferPtr,eax
02112                 test    esi,1           //dword align left
02113                 jz              NoSinglePixie
02114 
02115                 //odd sized spans write one pixel to dword align
02116                 fld     dword ptr [ebx]EdgeAsmFPU.u             ; UL
02117                 fmul    [Real65536]                                             ; UL16
02118                 fld     dword ptr [ebx]EdgeAsmFPU.v             ; VL   UL16
02119                 fmul    [Real65536]                                             ; VL16 UL16
02120                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   VL16 UL16
02121                 fild    dword ptr [ebx]EdgeAsmFPU.G             ; GL   RL   VL16 UL16
02122                 fild    dword ptr [ebx]EdgeAsmFPU.B             ; BL   GL   RL   VL16 UL16
02123                 fxch    st(4)                                                   ; UL16 GL   RL   VL16 BL
02124                 fistp   [u16]                                                   ; GL   RL   VL16 BL
02125                 fxch    st(2)                                                   ; VL16 RL   GL   BL
02126                 fistp   [v16]                                                   ; RL   GL   BL
02127                 fld             dword ptr[ebx]EdgeAsmFPU.z              ; z    RL   GL   BL
02128                 fistp   [z16]                                                   ; RL   GL   BL
02129 
02130                 mov     [widTemp],edx
02131 
02132                 mov             ecx,[VShift]
02133                 mov             ebx,[GHMaskShifted]
02134 
02135                 mov             esi,[GWMask]
02136                 mov             edi,[v16]
02137 
02138                 mov             edx,dword ptr[u16]
02139 
02140                 shr             edi,cl
02141 
02142                 shr             edx,16
02143                 xor             eax,eax
02144 
02145                 and             edi,ebx
02146                 and             edx,esi
02147 
02148                 add             edi,edx
02149 
02150                 add             edi,GBitPtrHalf
02151                 mov             ax,word ptr[edi*2]
02152 
02153                 mov             word ptr[TempPix],ax
02154 
02155                 mov             ebx,eax
02156                 and             eax,REDMASK2
02157 
02158                 mov             ecx,ebx
02159                 and             ebx,GREENMASK2
02160 
02161                 mov             dword ptr[Red],eax
02162                 and             ecx,BLUEMASK2
02163 
02164                 mov             dword ptr[Green],ebx
02165                 mov             dword ptr[Blue],ecx
02166 
02167                 fimul   dword ptr[Red]                                  ; R    GL   BL
02168                 fxch    st(1)                                                   ; GL   R    BL
02169                 fimul   dword ptr[Green]                                ; G    R    BL
02170                 fxch    st(1)                                                   ; R    G    BL
02171                 fadd    qword ptr[Magic]                                ; Rk   G    BL
02172                 fxch    st(2)                                                   ; BL   G    Rk
02173                 fimul   [Blue]                                                  ; B    G    Rk
02174                 fxch    st(1)                                                   ; G    B    Rk
02175                 fadd    qword ptr[Magic]                                ; Gk   B    Rk
02176                 fxch    st(2)                                                   ; Rk   B    Gk
02177                 fstp    qword ptr[Bucket]                               ; B    Gk
02178                 fadd    qword ptr[Magic]                                ; Bk   Gk
02179                 fxch    st(1)                                                   ; Gk   Bk
02180                 fstp    qword ptr[Bucket2]                              ; Bk
02181 
02182                 mov             edx,dword ptr[Bucket]
02183                 mov             eax,dword ptr[Bucket2]
02184 
02185                 and             edx,REDMASK2
02186                 and             eax,GREENMASK2
02187 
02188                 fstp    qword ptr[Bucket]
02189 
02190                 mov             ecx,TDest
02191                 mov             ebx,dword ptr[Bucket]
02192 
02193                 mov             esi,[z16]
02194                 and             ebx,BLUEMASK2
02195 
02196                 shr             esi,16
02197                 or              edx,eax
02198 
02199                 mov             eax,pZBufferPtr
02200                 add             TDest,2
02201 
02202                 cmp             word ptr[TempPix],01h
02203                 je              SkipSinglePixie
02204 
02205                 cmp             word ptr[eax],si
02206                 jg              SkipSinglePixie
02207 
02208                 or              edx,ebx
02209 
02210                 mov             word ptr[ecx],dx
02211 
02212 SkipSinglePixie:
02213                 mov             ebx,pLeft
02214                 mov     edx,[widTemp]
02215                 add             pZBufferPtr,2
02216                 mov     ecx,pRight
02217                 dec             edx
02218                 jz              GouraudReturnNoZ
02219                 mov             esi,edx
02220                 and             esi,1
02221                 sub             edx,esi
02222                 jz              GouraudReturnNoZ
02223 
02224 NoSinglePixie:
02225                 mov     [widTemp],edx                 ; just for a temp
02226                 shr             edx,1
02227 
02228                 ; try to keep fmul fxch pairs seperated to avoid stalling
02229                 ; calc this scanlines steps           ; FPU Stack
02230                                                       ; st0  st1  st2  st3  st4  st5  st6  st7
02231                 fild    dword ptr [widTemp]           ; WID
02232 
02233                 mov     [widTemp],edx                 ; Color interps doubled
02234 
02235                 fld     dword ptr [ecx]EdgeAsmFPU.u ; UR   WID
02236                 fld     dword ptr [ebx]EdgeAsmFPU.u ; UL   UR   WID
02237                 fsub    st(1), st                   ; UL   UD   WID
02238                 fld     dword ptr [ecx]EdgeAsmFPU.v ; VR   UL   UD   WID
02239                 fxch    st(1)                       ; UL   VR   UD   WID
02240                 fmul    [Real65536]                 ; UL16 VR   UD   WID
02241                 fld     dword ptr [ebx]EdgeAsmFPU.v ; VL   UL16 VR   UD   WID
02242                 fsub    st(2), st                   ; VL   UL16 VD   UD   WID
02243                 fild    dword ptr [ecx]EdgeAsmFPU.R ; RR   VL   UL16 VD   UD   WID
02244                 fxch    st(3)                       ; VD   VL   UL16 RR   UD   WID
02245                 fmul    [Real65536]                 ; VD16 VL   UL16 RR   UD   WID
02246                 fild    dword ptr [ebx]EdgeAsmFPU.R ; RL   VD16 VL   UL16 RR   UD   WID
02247                 fsub    st(4),st                    ; RL   VD16 VL   UL16 RD   UD   WID
02248                 fxch    st(5)                       ; UD   VD16 VL   UL16 RD   RL   WID
02249                 fmul    [Real65536]                 ; UD16 VD16 VL   UL16 RD   RL   WID
02250                 fxch    st(2)                                           ; VL   VD16 UD16 UL16 RD   RL   WID
02251                 fmul    [Real65536]                 ; VL16 VD16 UD16 UL16 RD   RL   WID
02252                 fxch    st(3)                                           ; UL16 VD16 UD16 VL16 RD   RL   WID
02253                 fistp   [u16]                                           ; VD16 UD16 VL16 RD   RL   WID
02254                 fxch    st(2)                                           ; VL16 UD16 VD16 RD   RL   WID
02255                 fistp   [v16]                                           ; UD16 VD16 RD   RL   WID
02256                 fld1                                                            ; 1    UD16 VD16 RD   RL   WID
02257                 fdivrp  st(5),st                                        ; UD16 VD16 RD   RL   DWID
02258 
02259                 //let that cook
02260 
02261                 fmul    st,st(4)                                                ; USTP VD16 RD   RL   DWID
02262                 fild    [ecx]EdgeAsmFPU.G                               ; RG   USTP VD16 RD   RL   DWID
02263                 fild    [ebx]EdgeAsmFPU.G                               ; LG   RG   USTP VD16 RD   RL   DWID
02264                 fsub    st(1),st                                                ; LG   GD   USTP VD16 RD   RL   DWID
02265                 fxch    st(2)                                                   ; USTP GD   LG   VD16 RD   RL   DWID
02266                 fistp   [UStep]                                                 ; GD   LG   VD16 RD   RL   DWID
02267                 fild    [ecx]EdgeAsmFPU.B                               ; RB   GD   LG   VD16 RD   RL   DWID
02268                 fild    [ebx]EdgeAsmFPU.B                               ; LB   RB   GD   LG   VD16 RD   RL   DWID
02269                 fsub    st(1),st                                                ; LB   BD   GD   LG   VD16 RD   RL   DWID
02270                 fxch    st(4)                                                   ; VD16 BD   GD   LG   LB   RD   RL   DWID
02271                 fmul    st,st(7)                                                ; VSTP BD   GD   LG   LB   RD   RL   DWID
02272                 fxch    st(7)                                                   ; DWID BD   GD   LG   LB   RD   RL   VSTP
02273                 fmul    dword ptr[Two]                                  ; DW2  BD   GD   LG   LB   RD   RL   VSTP
02274                 fxch    st(7)                                                   ; VSTP BD   GD   LG   LB   RD   RL   DW2
02275                 fxch    st(5)                                                   ; RD   BD   GD   LG   LB   VSTP RL   DW2
02276                 fmul    st,st(7)                                                ; RI   BD   GD   LG   LB   VSTP RL   DW2
02277                 frndint
02278                 fxch    st(2)                                                   ; GD   BD   RI   LG   LB   VSTP RL   DW2
02279                 fmul    st,st(7)                                                ; GI   BD   RI   LG   LB   VSTP RL   DW2
02280                 frndint
02281                 fxch    st(1)                                                   ; BD   GI   RI   LG   LB   VSTP RL   DW2
02282                 fmul    st,st(7)                                                ; BD   GI   RI   LG   LB   VSTP RL   DW2
02283                 frndint
02284                 fxch    st(5)                                                   ; VSTP GI   RI   LG   LB   BD   RL   DW2
02285                 fistp   [VStep]                                                 ; GI   RI   LG   LB   BD   RL   DW2
02286                 fld             [ecx]EdgeAsmFPU.z                               ; rz   GI   RI   LG   LB   BD   RL   DW2
02287                 fsub    [ebx]EdgeAsmFPU.z                               ; zd   GI   RI   LG   LB   BD   RL   DW2
02288                 fxch    st(7)                                                   ; DW2  GI   RI   LG   LB   BD   RL   zd
02289                 fmulp   st(7),st                                                ; GI   RI   LG   LB   BD   RL   zd
02290                 fld             [ebx]EdgeAsmFPU.z                               ; lz   GI   RI   LG   LB   BD   RL   zd
02291                 fxch    st(7)                                                   ; zd   GI   RI   LG   LB   BD   RL   lz
02292                 fistp   [ZStep]                                                 ; GI   RI   LG   LB   BD   RL   lz
02293                 fxch    st(6)                                                   ; lz   RI   LG   LB   BD   RL   GI
02294                 fistp   [z16]                                                   ; RI   LG   LB   BD   RL   GI
02295 
02296                 push    ebp
02297 
02298 PixieLoop:
02299                 mov             ebx,[ZStep]
02300 
02301                 add             [z16],ebx
02302                 mov             ecx,[VShift]
02303 
02304                 mov             edi,[z16]
02305 
02306                 shr             edi,16
02307                 mov             ebx,[GHMaskShifted]
02308 
02309                 mov             ebp,[GWMask]
02310                 mov             edx,dword ptr[u16]
02311 
02312                 mov             word ptr[Z32],di
02313                 mov             eax,edx
02314 
02315                 shr             edx,16
02316                 mov             edi,[v16]
02317 
02318                 add             eax,[UStep]
02319                 mov             esi,edi
02320 
02321                 shr             edi,cl
02322                 add             esi,[VStep]
02323 
02324                 and             edi,ebx
02325                 and             edx,ebp
02326 
02327                 add             edi,edx
02328                 mov             edx,eax
02329 
02330                 add             edi,GBitPtrHalf
02331                 add             eax,[UStep]
02332 
02333                 mov             [u16],eax
02334                 mov             ax,word ptr[edi*2]
02335 
02336                 mov             edi,esi
02337                 add             esi,[VStep]
02338 
02339                 shr             edx,16
02340                 mov             [v16],esi
02341 
02342                 shr             edi,cl
02343                 and             edx,ebp
02344 
02345                 mov             esi,GBitPtrHalf
02346                 and             edi,ebx
02347 
02348                 shl             eax,16
02349                 add             esi,edx
02350 
02351                 add             esi,edi
02352 
02353                 mov             ax,word ptr[esi*2]
02354 
02355                 mov             [TempPix],eax
02356 
02357                 mov             ebx,eax
02358                 and             eax,REDMASK2
02359 
02360                 mov             ecx,ebx
02361                 and             ebx,GREENMASK2
02362 
02363                 mov             dword ptr[Red],eax
02364                 and             ecx,BLUEMASK2
02365 
02366                 mov             dword ptr[Green],ebx
02367                 mov             dword ptr[Blue],ecx
02368 
02369                 fild    qword ptr[Red]                                  ; r    RI   LG   LB   BI   RL   GI
02370                 fmul    st,st(5)                                                ; R    RI   LG   LB   BI   RL   GI
02371                 fild    qword ptr[Green]                                ; g    R    RI   LG   LB   BI   RL   GI
02372                 fmul    st,st(3)                                                ; G    R    RI   LG   LB   BI   RL   GI
02373                 fxch    st(6)                                                   ; RL   R    RI   LG   LB   BI   G    GI
02374                 fadd    st,st(2)                                                ; RL2  R    RI   LG   LB   BI   G    GI
02375                 fxch    st(3)                                                   ; LG   R    RI   RL2  LB   BI   G    GI
02376                 fadd    st,st(7)                                                ; LG2  R    RI   RL2  LB   BI   G    GI
02377                 fxch    st(6)                                                   ; G    R    RI   RL2  LB   BI   LG2  GI
02378                 fadd    qword ptr[Magic]                                ; Gk   R    RI   RL2  LB   BI   LG2  GI
02379                 fxch    st(1)                                                   ; R    Gk   RI   RL2  LB   BI   LG2  GI
02380                 fadd    qword ptr[Magic]                                ; Rk   Gk   RI   RL2  LB   BI   LG2  GI
02381                 fxch    st(1)                                                   ; Gk   Rk   RI   RL2  LB   BI   LG2  GI
02382                 fstp    qword ptr[Bucket]                               ; Rk   RI   RL2  LB   BI   LG2  GI
02383                 fstp    qword ptr[Bucket2]                              ; RI   RL2  LB   BI   LG2  GI
02384 
02385                 mov             edx,dword ptr[Bucket]
02386                 mov             eax,dword ptr[Bucket2]
02387 
02388                 fild    dword ptr[Blue]                                 ; b    RI   RL2  LB   BI   LG2  GI
02389                 fmul    st,st(3)                                                ; B    RI   RL2  LB   BI   LG2  GI
02390                 fxch    st(3)                                                   ; LB   RI   RL2  B    BI   LG2  GI
02391                 fadd    st,st(4)                                                ; LB2  RI   RL2  B    BI   LG2  GI
02392                 fxch    st(3)                                                   ; B    RI   RL2  LB2  BI   LG2  GI
02393                 fadd    qword ptr[Magic]                                ; Bk   RI   RL2  LB2  BI   LG2  GI
02394 
02395                 and             edx,GREENMASK2
02396                 and             eax,REDMASK2
02397 
02398                 fstp    qword ptr[Bucket]                               ; RI   RL2  LB2  BI   LG2  GI
02399                 fstp    qword ptr[Bucket2]                              ; RL2  LB2  BI   LG2  GI
02400 
02401                 mov             edi,edx
02402                 mov             ebx,dword ptr[Bucket]
02403                 or              edi,eax
02404                 mov             ebp,TDest
02405                 and             ebx,BLUEMASK2
02406 
02407                 fxch    st(3)                                                   ; LG2  LB2  BI   RL2  GI
02408                 fld             qword ptr[Bucket2]                              ; RI   LG2  LB2  BI   RL2  GI
02409 
02410                 mov             si,word ptr[Z32]
02411                 add             TDest,4
02412 
02413                 mov             ecx,pZBufferPtr
02414                 or              edi,ebx
02415 
02416                 cmp             [TempPix],010001h
02417                 je              SkipPixie
02418 
02419                 rol             edi,16
02420 
02421                 cmp             word ptr[ecx],si
02422                 jg              SkipPixie
02423 
02424                 mov             dword ptr[ebp],edi
02425 SkipPixie:
02426                 add             pZBufferPtr,4
02427                 dec             [widTemp]
02428 
02429                 jnz             PixieLoop
02430 
02431                 pop             ebp
02432 
02433                 fstp    [u16]
02434                 fstp    [v16]
02435                 fstp    [u16]
02436                 fstp    [v16]
02437                 fstp    [u16]
02438                 fstp    [v16]
02439 
02440 GouraudReturnNoZ:
02441                 pop             edi
02442                 pop             esi
02443                 pop             ecx
02444                 pop             ebx
02445         }
02446 }

void DrawScanLineGouraudZBufferSolid_Asm555X86FPU EdgeAsmFPU pLeft,
EdgeAsmFPU pRight
 

Definition at line 3166 of file x86span555.c.

References BlueMask, BLUEMASK2, Bucket, Bucket2, Dest, Green, GreenMask2, GREENMASK2, Magic, MiniRedMask2, or, pZBufferPtr, r, Red, REDMASK2, RedMask2, TDest, widTemp, and EdgeAsmFPUTag::X.

Referenced by RenderGouraudPoly().

03167 {
03168         TDest   =Dest;
03169         Red             =Green  =0;
03170         _asm
03171         {
03172                 push    ebx
03173                 push    ecx
03174                 push    esi
03175                 push    edi
03176 
03177                 mov             ebx,pLeft
03178                 mov     ecx,pRight
03179                 mov     eax,[ebx]EdgeAsmFPU.X
03180                 mov     edx,[ecx]EdgeAsmFPU.X
03181                 sub     edx,eax
03182                 jle             GouraudReturnNoZ
03183 
03184                 mov             esi,eax
03185                 inc             edx
03186                 shl             eax,1
03187                 add             TDest,eax
03188                 add             pZBufferPtr,eax
03189                 test    esi,1                                   //dword align left side
03190                 jz              NoSinglePixie
03191 
03192                 //odd sized spans write one pixel to dword align
03193                 fild    dword ptr [ebx]EdgeAsmFPU.B             ; BL
03194                 fmul    dword ptr[BlueMask]
03195                 fadd    qword ptr[Magic]                                ; Bk
03196                 fild    dword ptr [ebx]EdgeAsmFPU.G             ; GL   Bk
03197                 fmul    dword ptr[GreenMask2]
03198                 fadd    qword ptr[Magic]                                ; Gk   Bk
03199                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   Gk   Bk
03200                 fmul    dword ptr[MiniRedMask2]
03201                 fadd    qword ptr[Magic]                                ; Rk   Gk   Bk
03202                 fxch    st(2)                                                   ; Bk   Gk   Rk
03203                 fstp    qword ptr[Bucket]                               ; Gk   Rk
03204                 fstp    qword ptr[Bucket2]                              ; Rk
03205                 fld             dword ptr[ebx]EdgeAsmFPU.z              ; z
03206                 fistp   [z16]                                                   ;
03207 
03208                 mov             esi,dword ptr[Bucket]
03209                 mov             eax,dword ptr[Bucket2]
03210 
03211                 and             esi,BLUEMASK2
03212                 and             eax,GREENMASK2
03213 
03214                 fstp    qword ptr[Bucket]
03215 
03216                 mov             ecx,TDest
03217                 mov             ebx,dword ptr[Bucket]
03218 
03219                 and             ebx,REDMASK2
03220                 or              esi,eax
03221 
03222                 mov             edi,[z16]
03223                 mov             eax,pZBufferPtr
03224 
03225                 add             TDest,2
03226                 or              esi,ebx
03227 
03228                 shr             edi,16
03229                 mov             ebx,pLeft
03230 
03231                 cmp             word ptr[eax],di
03232                 jg              SkipSinglePixie
03233 
03234                 mov             word ptr[eax],di
03235                 mov             word ptr[ecx],si
03236 
03237 SkipSinglePixie:
03238                 mov             ecx,pRight
03239                 add             pZBufferPtr,2
03240                 dec             edx
03241 
03242                 jz              GouraudReturnNoZ
03243                 mov             esi,edx
03244                 and             esi,1
03245                 sub             edx,esi
03246                 jz              GouraudReturnNoZ
03247 
03248 NoSinglePixie:
03249                 shr             edx,1
03250                 fld1
03251                 mov     [widTemp],edx                 ; just for a temp
03252                 
03253 
03254                 ; try to keep fmul fxch pairs seperated to avoid stalling
03255                 ; calc this scanlines steps                             ; FPU Stack
03256                                                                                                 ; st0  st1  st2  st3  st4  st5  st6  st7
03257                 fidiv   dword ptr [widTemp]                             ; WID
03258                 fild    dword ptr [ecx]EdgeAsmFPU.R             ; RR   WID
03259                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   RR   WID
03260                 fsub    st(1),st                                                ; RL   RD   WID
03261                 fild    [ecx]EdgeAsmFPU.G                               ; GR   RL   RD   WID
03262                 fild    [ebx]EdgeAsmFPU.G                               ; GL   GR   RL   RD   WID
03263                 fsub    st(1),st                                                ; GL   GD   RL   RD   WID
03264                 fild    [ecx]EdgeAsmFPU.B                               ; BR   GL   GD   RL   RD   WID
03265                 fild    [ebx]EdgeAsmFPU.B                               ; BL   BR   GL   GD   RL   RD   WID
03266                 fsub    st(1),st                                                ; BL   BD   GL   GD   RL   RD   WID
03267                 fxch    st(5)                                                   ; RD   BD   GL   GD   RL   BL   WID
03268                 fmul    st,st(6)                                                ; RI   BD   GL   GD   RL   BL   WID
03269                 frndint
03270                 fxch    st(3)                                                   ; GD   BD   GL   RI   RL   BL   WID
03271                 fmul    st,st(6)                                                ; GI   BD   GL   RI   RL   BL   WID
03272                 frndint
03273                 fxch    st(6)                                                   ; WID  BD   GL   RI   RL   BL   GI
03274                 fmulp   st(1),st                                                ; BI   GL   RI   RL   BL   GI
03275                 frndint
03276                 fld             qword ptr[RedMask2]                             ; rm   BI   GL   RI   RL   BL   GI
03277                 fmul    st(3),st                                                ; rm   BI   GL   RI   RL   BL   GI
03278                 fmulp   st(4),st                                                ; BI   GL   RI   RL   BL   GI
03279                 fld             dword ptr[GreenMask2]                   ; gm   BI   GL   RI   RL   BL   GI
03280                 fmul    st(2),st                                                ; gm   BI   GL   RI   RL   BL   GI
03281                 fmulp   st(6),st                                                ; BI   GL   RI   RL   BL   GI
03282                 fld             dword ptr[BlueMask]                             ; bm   BI   GL   RI   RL   BL   GI
03283                 fmul    st(1),st                                                ; bm   BI   GL   RI   RL   BL   GI
03284                 fmulp   st(5),st                                                ; BI   GL   RI   RL   BL   GI
03285                 fld             [ecx]EdgeAsmFPU.z                               ; rz   BI   GL   RI   RL   BL   GI
03286                 fsub    [ebx]EdgeAsmFPU.z                               ; zd   BI   GL   RI   RL   BL   GI
03287                 fld             [ebx]EdgeAsmFPU.z                               ; lz   zd   BI   GL   RI   RL   BL   GI
03288                 fistp   [z16]                                                   ; zd   BI   GL   RI   RL   BL   GI
03289                 fistp   [ZStep]                                                 ; BI   GL   RI   RL   BL   GI
03290 
03291 PixieLoop:
03292 
03293                 fld             st(3)                                                   ; r    BI   GL   RI   RL   BL   GI
03294                 fadd    qword ptr[Magic]                                ; rk   BI   GL   RI   RL   BL   GI
03295                 fld             st(2)                                                   ; g    rk   BI   GL   RI   RL   BL   GI
03296                 fadd    qword ptr[Magic]                                ; gk   rk   BI   GL   RI   RL   BL   GI
03297                 fxch    st(1)                                                   ; rk   gk   BI   GL   RI   RL   BL   GI
03298                 fstp    qword ptr[Bucket]                               ; gk   BI   GL   RI   RL   BL   GI
03299                 fstp    qword ptr[Bucket2]                              ; BI   GL   RI   RL   BL   GI
03300                 fld             st(4)                                                   ; b    BI   GL   RI   RL   BL   GI
03301                 fadd    qword ptr[Magic]                                ; bk   BI   GL   RI   RL   BL   GI
03302 
03303                 mov             ecx,dword ptr[Bucket]
03304                 mov             eax,dword ptr[Bucket2]
03305 
03306                 fstp    qword ptr[Bucket]                               ; BI   GL   RI   RL   BL   GI
03307                 fadd    st(4),st                                                ; BI   GL   RI   RL   BL2  GI
03308 
03309                 and             ecx,REDMASK2
03310                 and             eax,GREENMASK2
03311 
03312                 mov             ebx,dword ptr[Bucket]
03313                 or              ecx,eax
03314 
03315                 fstp    qword ptr[Bucket]                               ; GL   RI   RL   BL2  GI
03316                 fadd    st,st(4)                                                ; GL2  RI   RL   BL2  GI
03317                 fstp    qword ptr[Bucket2]                              ; RI   RL   BL2  GI
03318                 fadd    st(1),st                                                ; RI   RL2  BL2  GI
03319                 fld             qword ptr[Bucket2]                              ; GL2  RI   RL2  BL2  GI
03320                 fld             qword ptr[Bucket]                               ; BI   GL2  RI   RL2  BL2  GI
03321 
03322                 and             ebx,BLUEMASK2
03323                 mov             edi,TDest
03324 
03325                 or              ecx,ebx
03326                 add             TDest,4
03327 
03328                 mov             eax,[z16]
03329                 mov             esi,pZBufferPtr
03330 
03331                 shr             eax,16
03332                 mov             ebx,[ZStep]
03333 
03334                 cmp             word ptr[esi],ax
03335                 jg              SkipPixie
03336 
03337                 mov             word ptr[esi],ax
03338                 rol             ecx,16
03339 
03340                 add             [z16],ebx
03341                 mov             word ptr[esi+2],ax
03342 
03343                 mov             [edi],ecx
03344 SkipPixie:
03345                 add             pZBufferPtr,4
03346                 dec             edx
03347 
03348                 jnz             PixieLoop
03349 
03350 
03351                 fstp    [u16]
03352                 fstp    [v16]
03353                 fstp    [u16]
03354                 fstp    [v16]
03355                 fstp    [u16]
03356                 fstp    [v16]
03357 
03358 GouraudReturnNoZ:
03359                 pop             edi
03360                 pop             esi
03361                 pop             ecx
03362                 pop             ebx
03363         }
03364 }

void DrawScanLineGouraudZBufferTrans_Asm555X86FPU EdgeAsmFPU pLeft,
EdgeAsmFPU pRight
 

Definition at line 1726 of file x86span555.c.

References B, Blue, BLUEMASK2, Bucket, Bucket2, Dest, G, GBitPtrHalf, GHMaskShifted, Green, GREENMASK2, GWMask, Magic, or, pZBufferPtr, R, r, Real65536, Red, REDMASK2, TDest, TempPix, Two, VShift, widTemp, and EdgeAsmFPUTag::X.

Referenced by RenderMiscTexturePoly().

01727 {
01728         TDest   =Dest;
01729         Red             =Green  =0;
01730         _asm
01731         {
01732                 push    ebx
01733                 push    ecx
01734                 push    esi
01735                 push    edi
01736 
01737                 mov             ebx,pLeft
01738                 mov     ecx,pRight
01739                 mov     eax,[ebx]EdgeAsmFPU.X
01740                 mov     edx,[ecx]EdgeAsmFPU.X
01741                 sub     edx,eax
01742                 jle             GouraudReturnNoZ
01743 
01744                 mov             esi,eax
01745                 inc             edx
01746                 shl             eax,1
01747                 add             TDest,eax
01748                 add             pZBufferPtr,eax
01749                 test    esi,1           //dword align left
01750                 jz              NoSinglePixie
01751 
01752                 //odd sized spans write one pixel to dword align
01753                 fld     dword ptr [ebx]EdgeAsmFPU.u             ; UL
01754                 fmul    [Real65536]                                             ; UL16
01755                 fld     dword ptr [ebx]EdgeAsmFPU.v             ; VL   UL16
01756                 fmul    [Real65536]                                             ; VL16 UL16
01757                 fild    dword ptr [ebx]EdgeAsmFPU.R             ; RL   VL16 UL16
01758                 fild    dword ptr [ebx]EdgeAsmFPU.G             ; GL   RL   VL16 UL16
01759                 fild    dword ptr [ebx]EdgeAsmFPU.B             ; BL   GL   RL   VL16 UL16
01760                 fxch    st(4)                                                   ; UL16 GL   RL   VL16 BL
01761                 fistp   [u16]                                                   ; GL   RL   VL16 BL
01762                 fxch    st(2)                                                   ; VL16 RL   GL   BL
01763                 fistp   [v16]                                                   ; RL   GL   BL
01764                 fld             dword ptr[ebx]EdgeAsmFPU.z              ; z    RL   GL   BL
01765                 fistp   [z16]                                                   ; RL   GL   BL
01766 
01767                 mov     [widTemp],edx
01768 
01769                 mov             ecx,[VShift]
01770                 mov             ebx,[GHMaskShifted]
01771 
01772                 mov             esi,[GWMask]
01773                 mov             edi,[v16]
01774 
01775                 mov             edx,dword ptr[u16]
01776 
01777                 shr             edi,cl
01778 
01779                 shr             edx,16
01780                 xor             eax,eax
01781 
01782                 and             edi,ebx
01783                 and             edx,esi
01784 
01785                 add             edi,edx
01786 
01787                 add             edi,GBitPtrHalf
01788                 mov             ax,word ptr[edi*2]
01789 
01790                 mov             word ptr[TempPix],ax
01791 
01792                 mov             ebx,eax
01793                 and             eax,REDMASK2
01794 
01795                 mov             ecx,ebx
01796                 and             ebx,GREENMASK2
01797 
01798                 mov             dword ptr[Red],eax
01799                 and             ecx,BLUEMASK2
01800 
01801                 mov             dword ptr[Green],ebx
01802                 mov             dword ptr[Blue],ecx
01803 
01804                 fimul   dword ptr[Red]                                  ; R    GL   BL
01805                 fxch    st(1)                                                   ; GL   R    BL
01806                 fimul   dword ptr[Green]                                ; G    R    BL
01807                 fxch    st(1)                                                   ; R    G    BL
01808                 fadd    qword ptr[Magic]                                ; Rk   G    BL
01809                 fxch    st(2)                                                   ; BL   G    Rk
01810                 fimul   [Blue]                                                  ; B    G    Rk
01811                 fxch    st(1)                                                   ; G    B    Rk
01812                 fadd    qword ptr[Magic]                                ; Gk   B    Rk
01813                 fxch    st(2)                                                   ; Rk   B    Gk
01814                 fstp    qword ptr[Bucket]                               ; B    Gk
01815                 fadd    qword ptr[Magic]                                ; Bk   Gk
01816                 fxch    st(1)                                                   ; Gk   Bk
01817                 fstp    qword ptr[Bucket2]                              ; Bk
01818 
01819                 mov             edx,dword ptr[Bucket]
01820                 mov             eax,dword ptr[Bucket2]
01821 
01822                 and             edx,REDMASK2
01823                 and             eax,GREENMASK2
01824 
01825                 fstp    qword ptr[Bucket]
01826 
01827                 mov             ecx,TDest
01828                 mov             ebx,dword ptr[Bucket]
01829 
01830                 mov             esi,[z16]
01831                 and             ebx,BLUEMASK2
01832 
01833                 shr             esi,16
01834                 or              edx,eax
01835 
01836                 mov             eax,pZBufferPtr
01837                 add             TDest,2
01838 
01839                 cmp             word ptr[TempPix],01h
01840                 je              SkipSinglePixie
01841 
01842                 cmp             word ptr[eax],si
01843                 jg              SkipSinglePixie
01844 
01845                 or              edx,ebx
01846                 mov             word ptr[eax],si
01847 
01848                 mov             word ptr[ecx],dx
01849 
01850 SkipSinglePixie:
01851                 mov             ebx,pLeft
01852                 mov     edx,[widTemp]
01853                 add             pZBufferPtr,2
01854                 mov     ecx,pRight
01855                 dec             edx
01856                 jz              GouraudReturnNoZ
01857                 mov             esi,edx
01858                 and             esi,1
01859                 sub             edx,esi
01860                 jz              GouraudReturnNoZ
01861 
01862 NoSinglePixie:
01863                 mov     [widTemp],edx                 ; just for a temp
01864                 shr             edx,1
01865 
01866                 ; try to keep fmul fxch pairs seperated to avoid stalling
01867                 ; calc this scanlines steps           ; FPU Stack
01868                                                       ; st0  st1  st2  st3  st4  st5  st6  st7
01869                 fild    dword ptr [widTemp]           ; WID
01870 
01871                 mov     [widTemp],edx                 ; Color interps doubled
01872 
01873                 fld     dword ptr [ecx]EdgeAsmFPU.u ; UR   WID
01874                 fld     dword ptr [ebx]EdgeAsmFPU.u ; UL   UR   WID
01875                 fsub    st(1), st                   ; UL   UD   WID
01876                 fld     dword ptr [ecx]EdgeAsmFPU.v ; VR   UL   UD   WID
01877                 fxch    st(1)                       ; UL   VR   UD   WID
01878                 fmul    [Real65536]                 ; UL16 VR   UD   WID
01879                 fld     dword ptr [ebx]EdgeAsmFPU.v ; VL   UL16 VR   UD   WID
01880                 fsub    st(2), st                   ; VL   UL16 VD   UD   WID
01881                 fild    dword ptr [ecx]EdgeAsmFPU.R ; RR   VL   UL16 VD   UD   WID
01882                 fxch    st(3)                       ; VD   VL   UL16 RR   UD   WID
01883                 fmul    [Real65536]                 ; VD16 VL   UL16 RR   UD   WID
01884                 fild    dword ptr [ebx]EdgeAsmFPU.R ; RL   VD16 VL   UL16 RR   UD   WID
01885                 fsub    st(4),st                    ; RL   VD16 VL   UL16 RD   UD   WID
01886                 fxch    st(5)                       ; UD   VD16 VL   UL16 RD   RL   WID
01887                 fmul    [Real65536]                 ; UD16 VD16 VL   UL16 RD   RL   WID
01888                 fxch    st(2)                                           ; VL   VD16 UD16 UL16 RD   RL   WID
01889                 fmul    [Real65536]                 ; VL16 VD16 UD16 UL16 RD   RL   WID
01890                 fxch    st(3)                                           ; UL16 VD16 UD16 VL16 RD   RL   WID
01891                 fistp   [u16]                                           ; VD16 UD16 VL16 RD   RL   WID
01892                 fxch    st(2)                                           ; VL16 UD16 VD16 RD   RL   WID
01893                 fistp   [v16]                                           ; UD16 VD16 RD   RL   WID
01894                 fld1                                                            ; 1    UD16 VD16 RD   RL   WID
01895                 fdivrp  st(5),st                                        ; UD16 VD16 RD   RL   DWID
01896 
01897                 //let that cook
01898 
01899                 fmul    st,st(4)                                                ; USTP VD16 RD   RL   DWID
01900                 fild    [ecx]EdgeAsmFPU.G                               ; RG   USTP VD16 RD   RL   DWID
01901                 fild    [ebx]EdgeAsmFPU.G                               ; LG   RG   USTP VD16 RD   RL   DWID
01902                 fsub    st(1),st                                                ; LG   GD   USTP VD16 RD   RL   DWID
01903                 fxch    st(2)                                                   ; USTP GD   LG   VD16 RD   RL   DWID
01904                 fistp   [UStep]                                                 ; GD   LG   VD16 RD   RL   DWID
01905                 fild    [ecx]EdgeAsmFPU.B                               ; RB   GD   LG   VD16 RD   RL   DWID
01906                 fild    [ebx]EdgeAsmFPU.B                               ; LB   RB   GD   LG   VD16 RD   RL   DWID
01907                 fsub    st(1),st                                                ; LB   BD   GD   LG   VD16 RD   RL   DWID
01908                 fxch    st(4)                                                   ; VD16 BD   GD   LG   LB   RD   RL   DWID
01909                 fmul    st,st(7)                                                ; VSTP BD   GD   LG   LB   RD   RL   DWID
01910                 fxch    st(7)                                                   ; DWID BD   GD   LG   LB   RD   RL   VSTP
01911                 fmul    dword ptr[Two]                                  ; DW2  BD   GD   LG   LB   RD   RL   VSTP
01912                 fxch    st(7)                                                   ; VSTP BD   GD   LG   LB   RD   RL   DW2
01913                 fxch    st(5)                                                   ; RD   BD   GD   LG   LB   VSTP RL   DW2
01914                 fmul    st,st(7)                                                ; RI   BD   GD   LG   LB   VSTP RL   DW2
01915                 frndint
01916                 fxch    st(2)                                                   ; GD   BD   RI   LG   LB   VSTP RL   DW2
01917                 fmul    st,st(7)                                                ; GI   BD   RI   LG   LB   VSTP RL   DW2
01918                 frndint
01919                 fxch    st(1)                                                   ; BD   GI   RI   LG   LB   VSTP RL   DW2
01920                 fmul    st,st(7)                                                ; BD   GI   RI   LG   LB   VSTP RL   DW2
01921                 frndint
01922                 fxch    st(5)                                                   ; VSTP GI   RI   LG   LB   BD   RL   DW2
01923                 fistp   [VStep]                                                 ; GI   RI   LG   LB   BD   RL   DW2
01924                 fld             [ecx]EdgeAsmFPU.z                               ; rz   GI   RI   LG   LB   BD   RL   DW2
01925                 fsub    [ebx]EdgeAsmFPU.z                               ; zd   GI   RI   LG   LB   BD   RL   DW2
01926                 fxch    st(7)                                                   ; DW2  GI   RI   LG   LB   BD   RL   zd
01927                 fmulp   st(7),st                                                ; GI   RI   LG   LB   BD   RL   zd
01928                 fld             [ebx]EdgeAsmFPU.z                               ; lz   GI   RI   LG   LB   BD   RL   zd
01929                 fxch    st(7)                                                   ; zd   GI   RI   LG   LB   BD   RL   lz
01930                 fistp   [ZStep]                                                 ; GI   RI   LG   LB   BD   RL   lz
01931                 fxch    st(6)                                                   ; lz   RI   LG   LB   BD   RL   GI
01932                 fistp   [z16]                                                   ; RI   LG   LB   BD   RL   GI
01933 
01934                 push    ebp
01935 
01936 PixieLoop:
01937                 mov             ebx,[ZStep]
01938 
01939                 add             [z16],ebx
01940                 mov             ecx,[VShift]
01941 
01942                 mov             edi,[z16]
01943 
01944                 shr             edi,16
01945                 mov             ebx,[GHMaskShifted]
01946 
01947                 mov             ebp,[GWMask]
01948                 mov             edx,dword ptr[u16]
01949 
01950                 mov             word ptr[Z32],di
01951                 mov             eax,edx
01952 
01953                 shr             edx,16
01954                 mov             edi,[v16]
01955 
01956                 add             eax,[UStep]
01957                 mov             esi,edi
01958 
01959                 shr             edi,cl
01960                 add             esi,[VStep]
01961 
01962                 and             edi,ebx
01963                 and             edx,ebp
01964 
01965                 add             edi,edx
01966                 mov             edx,eax
01967 
01968                 add             edi,GBitPtrHalf
01969                 add             eax,[UStep]
01970 
01971                 mov             [u16],eax
01972                 mov             ax,word ptr[edi*2]
01973 
01974                 mov             edi,esi
01975                 add             esi,[VStep]
01976 
01977                 shr             edx,16
01978                 mov             [v16],esi
01979 
01980                 shr             edi,cl
01981                 and             edx,ebp
01982 
01983                 mov             esi,GBitPtrHalf
01984                 and             edi,ebx
01985 
01986                 shl             eax,16
01987                 add             esi,edx
01988 
01989                 add             esi,edi
01990 
01991                 mov             ax,word ptr[esi*2]
01992 
01993                 mov             [TempPix],eax
01994 
01995                 mov             ebx,eax
01996                 and             eax,REDMASK2
01997 
01998                 mov             ecx,ebx
01999                 and             ebx,GREENMASK2
02000 
02001                 mov             dword ptr[Red],eax
02002                 and             ecx,BLUEMASK2
02003 
02004                 mov             dword ptr[Green],ebx
02005                 mov             dword ptr[Blue],ecx
02006 
02007                 fild    qword ptr[Red]                                  ; r    RI   LG   LB   BI   RL   GI
02008                 fmul    st,st(5)                                                ; R    RI   LG   LB   BI   RL   GI
02009                 fild    qword ptr[Green]                                ; g    R    RI   LG   LB   BI   RL   GI
02010                 fmul    st,st(3)                                                ; G    R    RI   LG   LB   BI   RL   GI
02011                 fxch    st(6)                                                   ; RL   R    RI   LG   LB   BI   G    GI
02012                 fadd    st,st(2)                                                ; RL2  R    RI   LG   LB   BI   G    GI
02013                 fxch    st(3)                                                   ; LG   R    RI   RL2  LB   BI   G    GI
02014                 fadd    st,st(7)                                                ; LG2  R    RI   RL2  LB   BI   G    GI
02015                 fxch    st(6)                                                   ; G    R    RI   RL2  LB   BI   LG2  GI
02016                 fadd    qword ptr[Magic]                                ; Gk   R    RI   RL2  LB   BI   LG2  GI
02017                 fxch    st(1)                                                   ; R    Gk   RI   RL2  LB   BI   LG2  GI
02018                 fadd    qword ptr[Magic]                                ; Rk   Gk   RI   RL2  LB   BI   LG2  GI
02019                 fxch    st(1)                                                   ; Gk   Rk   RI   RL2  LB   BI   LG2  GI
02020                 fstp    qword ptr[Bucket]                               ; Rk   RI   RL2  LB   BI   LG2  GI
02021                 fstp    qword ptr[Bucket2]                              ; RI   RL2  LB   BI   LG2  GI
02022 
02023                 mov             edx,dword ptr[Bucket]
02024                 mov             eax,dword ptr[Bucket2]
02025 
02026                 fild    dword ptr[Blue]                                 ; b    RI   RL2  LB   BI   LG2  GI
02027                 fmul    st,st(3)                                                ; B    RI   RL2  LB   BI   LG2  GI
02028                 fxch    st(3)                                                   ; LB   RI   RL2  B    BI   LG2  GI
02029                 fadd    st,st(4)                                                ; LB2  RI   RL2  B    BI   LG2  GI
02030                 fxch    st(3)                                                   ; B    RI   RL2  LB2  BI   LG2  GI
02031                 fadd    qword ptr[Magic]                                ; Bk   RI   RL2  LB2  BI   LG2  GI
02032 
02033                 and             edx,GREENMASK2
02034                 and             eax,REDMASK2
02035 
02036                 fstp    qword ptr[Bucket]                               ; RI   RL2  LB2  BI   LG2  GI
02037                 fstp    qword ptr[Bucket2]                              ; RL2  LB2  BI   LG2  GI
02038 
02039                 mov             edi,edx
02040                 mov             ebx,dword ptr[Bucket]
02041                 or              edi,eax
02042                 mov             ebp,TDest
02043                 and             ebx,BLUEMASK2
02044 
02045                 fxch    st(3)                                                   ; LG2  LB2  BI   RL2  GI
02046                 fld             qword ptr[Bucket2]                              ; RI   LG2  LB2  BI   RL2  GI
02047 
02048                 mov             si,word ptr[Z32]
02049                 add             TDest,4
02050 
02051                 mov             ecx,pZBufferPtr
02052                 or              edi,ebx
02053 
02054                 cmp             [TempPix],010001h
02055                 je              SkipPixie
02056 
02057                 rol             edi,16
02058 
02059                 cmp             word ptr[ecx],si
02060                 jg              SkipPixie
02061 
02062                 mov             [ecx],si
02063                 mov             dword ptr[ebp],edi
02064                 mov             [ecx+2],si
02065 SkipPixie:
02066                 add             pZBufferPtr,4
02067                 dec             [widTemp]
02068 
02069                 jnz             PixieLoop
02070 //              mov             dword ptr[ebp],0ffffffffh
02071 
02072                 pop             ebp
02073 
02074                 fstp    [u16]
02075                 fstp    [v16]
02076                 fstp    [u16]
02077                 fstp    [v16]
02078                 fstp    [u16]
02079                 fstp    [v16]
02080 
02081 GouraudReturnNoZ:
02082                 pop             edi
02083                 pop             esi
02084                 pop             ecx
02085                 pop             ebx
02086         }
02087 }

void DrawSpan16_AsmGouraudZBuffer555X86FPU int32  x1,
int32  x2,
int32  y,
int32  r1,
int32  g1,
int32  b1,
int32  r2,
int32  g2,
int32  b2
 

Definition at line 6731 of file x86span555.c.

References B, BB1, Blue, BlueDelta, BLUEMASK, Bucket, Bucket2, DeltaU, DeltaV, Dest, FloatTemp, FTemp0, FTemp1, FTemp2, FTemp3, FTemp4, FTemp5, G, GBitPtr16, GG1, GHMaskShifted16, GLMapMulU, GLMapMulV, Green, GreenDelta, GREENMASK2, GWMaskShifted, Magic, MaxU, MaxV, MipMagic, MipMagic2, NumASpans, or, pointer, pTex, pZBufferPtr, r, R, Red, RedDelta, REDMASK2, RemainingCount, RR1, TDest, Two, U1, UAdjust, UAdjust2, UAdjustL, UDivZ16StepX, UDivZOrigin, UDivZStepX, UDivZStepY, UFixed, V1, VAdjust, VAdjust2, VAdjustL, VDivZ16StepX, VDivZOrigin, VDivZStepX, VDivZStepY, VFixed, VShift, widTemp, y, ZBufferPrec, ZDelta, Zi, Zi16StepX, ZiOrigin, ZiStepX, ZiStepY, and ZVal.

Referenced by AddSpanDraw(), and RenderWorldPoly().

06732 {
06733         RR1     =r1;
06734         GG1     =g1;
06735         BB1     =b1;
06736         TDest   =Dest;
06737         _asm
06738         {
06739                 push    ebx
06740                 push    ecx
06741                 push    esi
06742                 push    edi
06743 
06744                 mov             eax,x1
06745                 mov             ecx,x2
06746                 sub             ecx,eax
06747                 jle             Return16
06748 
06749                 mov             edi,[GBitPtr16]
06750                 mov             pTex,edi
06751 
06752                 fild    [y]                                             ; y
06753                 mov             [widTemp],ecx
06754 
06755                 fild    [x1]                                            ; x    y
06756                 fild    [widTemp]
06757 
06758                 fld1
06759                 fdivrp  st(1),st
06760 
06761                 mov             esi,x1
06762                 mov             edi,[TDest]
06763 
06764                 shl             esi,1
06765                 mov             eax,ecx
06766 
06767                 add             edi,esi
06768                 add             pZBufferPtr,esi
06769 
06770                 mov             eax,ecx
06771                 shr             ecx,4
06772                 and             eax,15
06773                 _emit 75h
06774                 _emit 06h
06775                 dec             ecx
06776                 mov             eax,16
06777 
06778                 mov             [NumASpans],ecx
06779                 mov             [RemainingCount],eax
06780 
06781                 fild    [r2]
06782                 fisub   [r1]
06783                 fild    [g2]
06784                 fisub   [g1]
06785                 fild    [b2]
06786                 fisub   [b1]
06787                 fxch    st(2)
06788                 fmul    st,st(3)
06789                 fxch    st(1)
06790                 fmul    st,st(3)
06791                 fxch    st(2)
06792                 fmul    st,st(3)
06793                 frndint
06794                 fstp    qword ptr[BlueDelta]
06795                 frndint
06796                 fstp    qword ptr[RedDelta]
06797                 frndint
06798                 fstp    qword ptr[GreenDelta]
06799                 fstp    qword ptr[FTemp0]
06800 
06801 
06802                 //decoder won't keep up with these huge instructions
06803                 //need to find some int instructions to cram in here somewhere
06804                 fld             [UDivZStepY]                    ; UZdY x    y
06805                 fld             [UDivZStepX]                    ; UZdX UZdY x    y
06806                 fmul    st,st(2)                                ; UZX  UZdY x    y
06807                 fld             [VDivZStepY]                    ; VZdY UZX  UZdY x    y
06808                 fld             [VDivZStepX]                    ; VZdX VZdY UZX  UZdY x    y
06809                 fxch    st(3)                                   ; UZdy VZdY UZX  VZdX x    y
06810                 fmul    st,st(5)                                ; UZY  VZdY UZX  VZdX x    y
06811                 fxch    st(2)                                   ; UZX  VZdY UZY  VZdX x    y
06812                 fadd    [UDivZOrigin]                   ; UZXS VZdY UZY  VZdX x    y
06813                 fxch    st(3)                                   ; VZdX VZdY UZY  UZXS x    y
06814                 fmul    st,st(4)                                ; VZX  VZdY UZY  UZXS x    y
06815                 fxch    st(2)                                   ; UZY  VZdY VZX  UZXS x    y
06816                 faddp   st(3),st                                ; VZdY VZX  UZ   x    y
06817                 fmul    st,st(4)                                ; VZY  VZX  UZ   x    y
06818                 fxch    st(1)                                   ; VZX  VZY  UZ   x    y
06819                 fadd    [VDivZOrigin]                   ; VZXS VZY  UZ   x    y
06820                 fld             [ZiStepX]                               ; ZdX  VZXS VZY  UZ   x    y
06821 
06822                 //zbuffer step action
06823                 fld             [ZiStepX]
06824                 fmul    dword ptr[ZBufferPrec]
06825                 fmul    dword ptr[Two]
06826                 fistp   dword ptr[ZDelta]
06827 
06828                 fmulp   st(4),st                                ; VZXS VZY  UZ   ZX   y
06829                 faddp   st(1),st                                ; VZ   UZ   ZX   y
06830                 fld             [ZiStepY]                               ; ZdY  VZ   UZ   ZX   y
06831                 fmulp   st(4),st                                ; VZ   UZ   ZX   ZY
06832                 fxch    st(2)                                   ; ZX   UZ   VZ   ZY
06833                 fadd    [ZiOrigin]                              ; ZXS  UZ   VZ   ZY
06834 
06835                 //room for two cycles of int instructions here
06836 
06837                 faddp   st(3),st                                ; UZ   VZ   Zi
06838                 fld1                                                    ; 1    UZ   VZ   Zi
06839                 fdiv    st,st(3)                                ; ZL   UZ   VZ   Zi
06840 
06841                 //room for 18 cycles of int instructions here
06842 
06843                 fld             st                                              ; ZL   ZL   UZ   VZ   Zi
06844                 fmul    st,st(3)                                ; VL   ZL   UZ   VZ   Zi
06845                 fxch    st(4)                                   ; Zi   ZL   UZ   VZ   VL
06846 
06847                 //zbuffer action
06848                 fld             st
06849                 fmul    dword ptr[ZBufferPrec]
06850                 fistp   dword ptr[ZVal]
06851 
06852                 fadd    [Zi16StepX]                             ; ZRi  ZL   UZ   VZ   VL
06853                 fxch    st(1)                                   ; ZL   ZRi  UZ   VZ   VL
06854                 fmul    st,st(2)                                ; UL   ZRi  UZ   VZ   VL
06855                 fxch    st(3)                                   ; VZ   ZRi  UZ   UL   VL
06856                 fadd    [VDivZ16StepX]                  ; VZR  ZRi  UZ   UL   VL
06857                 fxch    st(2)                                   ; UZ   ZRi  VZR  UL   VL
06858                 fadd    [UDivZ16StepX]                  ; UZR  ZRi  VZR  UL   VL
06859                 fld1                                                    ; 1    UZR  ZRi  VZR  UL   VL
06860                 fdiv    st,st(2)                                ; ZR   UZR  ZRi  VZR  UL   VL
06861 
06862                 //room for 18 cycles of int stuff here
06863 
06864                 fld             st                                              ; ZR   ZR   UZR  ZRi  VZR  UL   VL
06865                 fmul    st,st(4)                                ; VR   ZR   UZR  ZRi  VZR  UL   VL
06866                 fxch    st(1)                                   ; ZR   VR   UZR  ZRi  VZR  UL   VL
06867                 //fmul stall one cycle
06868                 fmul    st,st(2)                                ; UR   VR   UZR  ZRi  VZR  UL   VL
06869 
06870                 test    ecx,ecx
06871                 jz              HandleLeftoverPixels16
06872 
06873 SpanLoop16:
06874                 //need one more stack spot
06875                 fstp    dword ptr[FloatTemp]    ; VR   UZR  ZRi  VZR  UL   VL
06876                 fld             st(4)                                   ; UL   VR   UZR  ZRi  VZR  UL   VL
06877                 fmul    [GLMapMulU]                             ; ULL  VR   UZR  ZRi  VZR  UL   VL
06878                 fld             st(5)                                   ; UL   ULL  VR   UZR  ZRi  VZR  UL   VL
06879                 fadd    qword ptr[MipMagic]             ; ULk  ULL  VR   UZR  ZRi  VZR  UL   VL
06880                 fxch    st(1)                                   ; ULL  ULk  VR   UZR  ZRi  VZR  UL   VL
06881                 fadd    qword ptr[MipMagic]             ; ULLk ULk  VR   UZR  ZRi  VZR  UL   VL
06882                 fxch    st(1)                                   ; ULk  ULLk VR   UZR  ZRi  VZR  UL   VL
06883                 fstp    qword ptr[Bucket]               ; ULLk VR   UZR  ZRi  VZR  UL   VL
06884                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
06885 
06886                 mov             ebx,dword ptr[Bucket]
06887                 mov             eax,dword ptr[Bucket2]
06888 
06889                 fld             st(5)                                   ; VL   VR   UZR  ZRi  VZR  UL   VL
06890                 fmul    [GLMapMulV]                             ; VLL  VR   UZR  ZRi  VZR  UL   VL
06891 
06892                 add             ebx,dword ptr[UAdjust]
06893                 add             eax,dword ptr[UAdjustL]
06894 
06895                 mov             [U1],ebx
06896                 mov             [UFixed],eax
06897 
06898                 fld             st(6)                                   ; VL   VLL  VR   UZR  ZRi  VZR  UL   VL
06899                 fadd    qword ptr[MipMagic]             ; VLk  VLL  VR   UZR  ZRi  VZR  UL   VL
06900                 fxch    st(1)                                   ; VLL  VLk  VR   UZR  ZRi  VZR  UL   VL
06901                 fadd    qword ptr[MipMagic]             ; VLLk VLk  VR   UZR  ZRi  VZR  UL   VL
06902                 fxch    st(1)                                   ; VLk  VLLk VR   UZR  ZRi  VZR  UL   VL
06903                 fstp    qword ptr[Bucket]               ; VLLk VR   UZR  ZRi  VZR  UL   VL
06904                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
06905                 fsubr   st(5),st                                ; VR   UZR  ZRi  VZR  UL   dV
06906 
06907                 mov             ebx,dword ptr[Bucket]
06908                 mov             eax,dword ptr[Bucket2]
06909 
06910                 fld             dword ptr[FloatTemp]    ; UR   VR   UZR  ZRi  VZR  UL   dV
06911 
06912                 add             ebx,dword ptr[VAdjust]
06913                 add             eax,dword ptr[VAdjustL]
06914 
06915                 mov             [V1],ebx
06916                 mov             [VFixed],eax
06917 
06918                 fsubr   st(5),st                                ; UR   VR   UZR  ZRi  VZR  dU   dV
06919                 fxch    st(6)                                   ; dV   VR   UZR  ZRi  VZR  dU   UR
06920                 fadd    qword ptr[MipMagic2]    ; dVk  VR   UZR  ZRi  VZR  dU   UR
06921                 fxch    st(5)                                   ; dU   VR   UZR  ZRi  VZR  dVk  UR
06922                 fadd    qword ptr[MipMagic2]    ; dUk  VR   UZR  ZRi  VZR  dVk  UR
06923                 fxch    st(5)                                   ; dVk  VR   UZR  ZRi  VZR  dUk  UR
06924                 fstp    qword ptr[DeltaV]               ; VR   UZR  ZRi  VZR  dUk  UR
06925                 fxch    st(5)                                   ; UR   UZR  ZRi  VZR  dUk  VR
06926                 //gotta do this to get em lined back up right
06927                 fxch    st(4)                                   ; dUk  UZR  ZRi  VZR  UR   VR
06928                 fstp    qword ptr[DeltaU]               ; UZR  ZRi  VZR  UR   VR
06929 
06930                 //right becomes left                    ; UZL  ZLi  VZL  UL   VL
06931                 fadd    [UDivZ16StepX]                  ; UZR  ZLi  VZL  UL   VL
06932                 fxch    st(1)                                   ; ZLi  UZR  VZL  UL   VL
06933                 fadd    [Zi16StepX]                             ; ZRi  UZR  VZL  UL   VL
06934                 fxch    st(2)                                   ; VZL  UZR  ZRi  UL   VL
06935                 fadd    [VDivZ16StepX]                  ; VZR  UZR  ZRi  UL   VL
06936                 fxch    st(2)                                   ; ZRi  UZR  VZR  UL   VL
06937                 fxch    st(1)                                   ; UZR  ZRi  VZR  UL   VL
06938                 fld1                                                    ; 1    UZR  ZRi  VZR  UL   VL
06939                 fdiv    st,st(2)                                ; ZR   UZR  ZRi  VZR  UL   VL
06940 
06941                 // Clamp U/V
06942                 mov             ebx,[UFixed]
06943                 cmp             ebx,MaxU
06944                 jle             TryClampU016
06945                 mov             ecx,MaxU
06946                 mov             dword ptr[UFixed],ecx
06947                 jmp             NoClampU016
06948 
06949 TryClampU016:
06950                 cmp             ebx,0
06951                 jge             NoClampU016
06952                 mov             dword ptr[UFixed],0
06953 NoClampU016:
06954                 mov             eax,[VFixed]
06955                 cmp             eax,MaxV
06956                 jle             TryClampV016
06957                 mov             ecx,MaxV
06958                 mov             dword ptr[VFixed],ecx
06959                 jmp             NoClampV016
06960 
06961 TryClampV016:
06962                 cmp             eax,0
06963                 jge             NoClampV016
06964                 mov             dword ptr[VFixed],0
06965 
06966 NoClampV016:
06967 
06968                 fstp    [FTemp0]                                ; UZR  ZRi  VZR  UL   VL
06969                 fstp    [FTemp1]                                ; ZRi  VZR  UL   VL
06970                 fstp    [FTemp2]                                ; VZR  UL   VL
06971                 fstp    [FTemp3]                                ; UL   VL
06972                 fstp    [FTemp4]                                ; VL
06973                 fstp    [FTemp5]                                ; 
06974 
06975 
06976                 fild    [RR1]                                   ; LR
06977                 fild    [GG1]                                   ; LG   LR
06978                 fild    [BB1]                                   ; LB   LG   LR
06979                 
06980                 
06981                 mov             ebx,dword ptr[U1]
06982                 mov             eax,dword ptr[V1]
06983 
06984                 add             ebx,dword ptr[UAdjust2]
06985                 add             eax,dword ptr[VAdjust2]
06986 
06987                 mov             ecx,[VShift]
06988                 mov             dword ptr[Bucket],ebx
06989 
06990                 shl             eax,cl
06991 
06992                 push    ebp
06993 
06994                 mov             dword ptr[Bucket2],eax
06995                 mov             ebp,dword ptr[DeltaV]
06996 
06997                 and             eax,[GHMaskShifted16]
06998                 and             ebx,[GWMaskShifted]
06999 
07000                 shl             ebp,cl
07001                 add             eax,ebx
07002 
07003                 mov             edx,dword ptr[Bucket2]
07004                 mov             esi,pTex
07005 
07006                 shr             eax,16
07007                 mov             dword ptr[DeltaV],ebp
07008 
07009                 mov             ebx,dword ptr[Bucket]
07010 
07011                 mov             ax,word ptr[2*eax+esi]
07012                 add             edx,dword ptr[DeltaV]
07013 
07014                 xor             eax,0
07015                 mov             ecx,edx
07016 
07017                 add             ebx,dword ptr[DeltaU]
07018                 and             ecx,[GHMaskShifted16]
07019 
07020                 rol             eax,16
07021                 and             ebx,[GWMaskShifted]
07022 
07023                 xor             eax,0
07024                 add             ecx,ebx
07025 
07026                 add             edx,dword ptr[DeltaV]
07027                 mov             esi,pTex
07028 
07029                 shr             ecx,16
07030                 add             ebx,dword ptr[DeltaU]
07031 
07032                 mov             ax,word ptr[2*ecx+esi]
07033                 mov             ecx,edx
07034 
07035                 xor             eax,0
07036                 and             ecx,[GHMaskShifted16]
07037 
07038                 mov             esi,eax
07039                 mov             ebp,eax
07040 
07041                 and             esi,REDMASK2
07042                 and             ebp,GREENMASK2
07043 
07044                 mov             dword ptr[Red],esi
07045                 mov             dword ptr[Green],ebp
07046 
07047                 fild    qword ptr[Red]                  ; r    LB   LG   LR
07048 
07049                 mov             ebp,eax
07050 
07051                 fmul    st,st(3)                                ; R    LB   LG   LR
07052                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
07053 
07054                 and             ebp,BLUEMASK
07055                 and             ebx,[GWMaskShifted]
07056 
07057                 mov             dword ptr[Blue],ebp
07058 
07059                 fmul    st,st(3)                                ; G    R    LB   LG   LR
07060                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
07061                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
07062                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
07063                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
07064                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
07065                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
07066                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
07067                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
07068                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
07069                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
07070                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
07071 
07072                 mov             eax,dword ptr[Bucket]
07073                 mov             ebp,dword ptr[Bucket2]
07074 
07075                 fstp    qword ptr[Bucket]               ; LB   LG   LR
07076                 fxch    st(1)
07077                 fadd    qword ptr[GreenDelta]
07078                 fxch    st(1)
07079                 fadd    qword ptr[BlueDelta]
07080                 fxch    st(2)
07081                 fadd    qword ptr[RedDelta]
07082                 fxch    st(2)
07083 
07084                 and             eax,REDMASK2
07085                 and             ebp,BLUEMASK
07086                 
07087                 mov             esi,dword ptr[Bucket]
07088                 or              ebp,eax
07089 
07090                 add             ecx,ebx
07091                 and             esi,GREENMASK2
07092 
07093                 shr             ecx,16
07094                 or              ebp,esi
07095 
07096                 xor             eax,0
07097                 mov             esi,pTex
07098 
07099                 rol             ebp,16
07100                 add             edx,dword ptr[DeltaV]
07101 
07102                 mov             ax,word ptr[2*ecx+esi]
07103                 mov             ecx,[ZVal]
07104 
07105                 mov             esi,[ZVal]
07106                 add             ecx,[ZDelta]
07107 
07108                 shr             esi,16
07109                 mov             [ZVal],ecx
07110 
07111                 mov             ecx,pZBufferPtr
07112 
07113                 cmp             si,word ptr[ecx+0]
07114                 jle             Skip0
07115 
07116                 mov             [edi+0],ebp
07117                 mov             word ptr[ecx+0],si
07118                 mov             word ptr[ecx+2],si
07119 
07120 Skip0:
07121                 mov             ecx,edx
07122                 mov             esi,pTex
07123 
07124                 add             ebx,dword ptr[DeltaU]
07125                 and             ecx,[GHMaskShifted16]
07126 
07127                 and             ebx,[GWMaskShifted]
07128                 xor             eax,0
07129 
07130                 add             ecx,ebx
07131 
07132                 rol             eax,16
07133                 add             edx,dword ptr[DeltaV]
07134 
07135                 shr             ecx,16
07136                 add             ebx,dword ptr[DeltaU]
07137 
07138                 mov             ax,word ptr[2*ecx+esi]
07139 
07140                 mov             ecx,edx
07141                 xor             eax,0
07142 
07143                 and             ecx,[GHMaskShifted16]
07144                 mov             esi,eax
07145 
07146                 mov             ebp,eax
07147                 and             esi,REDMASK2
07148 
07149                 and             ebp,GREENMASK2
07150                 mov             dword ptr[Red],esi
07151 
07152                 mov             dword ptr[Green],ebp
07154 
07155 
07156                 fild    qword ptr[Red]                  ; r    LB   LG   LR
07157 
07158                 mov             ebp,eax
07159 
07160                 fmul    st,st(3)                                ; R    LB   LG   LR
07161                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
07162 
07163                 and             ebp,BLUEMASK
07164                 and             ebx,[GWMaskShifted]
07165 
07166                 mov             dword ptr[Blue],ebp
07167 
07168                 fmul    st,st(3)                                ; G    R    LB   LG   LR
07169                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
07170                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
07171                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
07172                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
07173                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
07174                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
07175                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
07176                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
07177                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
07178                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
07179                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
07180 
07181                 mov             eax,dword ptr[Bucket]
07182                 mov             ebp,dword ptr[Bucket2]
07183 
07184                 fstp    qword ptr[Bucket]               ; LB   LG   LR
07185                 fxch    st(1)
07186                 fadd    qword ptr[GreenDelta]
07187                 fxch    st(1)
07188                 fadd    qword ptr[BlueDelta]
07189                 fxch    st(2)
07190                 fadd    qword ptr[RedDelta]
07191                 fxch    st(2)
07192 
07193                 and             eax,REDMASK2
07194                 and             ebp,BLUEMASK
07195                 
07196                 mov             esi,dword ptr[Bucket]
07197                 or              ebp,eax
07198 
07199                 add             ecx,ebx
07200                 and             esi,GREENMASK2
07201 
07202                 shr             ecx,16
07203                 or              ebp,esi
07204 
07205                 xor             eax,0
07206                 mov             esi,pTex
07207 
07208                 rol             ebp,16
07209                 add             edx,dword ptr[DeltaV]
07210 
07211                 mov             ax,word ptr[2*ecx+esi]
07212                 mov             ecx,[ZVal]
07213 
07214                 mov             esi,[ZVal]
07215                 add             ecx,[ZDelta]
07216 
07217                 shr             esi,16
07218                 mov             [ZVal],ecx
07219 
07220                 mov             ecx,pZBufferPtr
07221 
07222                 cmp             si,word ptr[ecx+4]
07223                 jle             Skip1
07224 
07225                 mov             [edi+4],ebp
07226                 mov             word ptr[ecx+4],si
07227                 mov             word ptr[ecx+6],si
07228 
07229 Skip1:
07230                 mov             ecx,edx
07231                 mov             esi,pTex
07232 
07233                 add             ebx,dword ptr[DeltaU]
07234                 and             ecx,[GHMaskShifted16]
07235 
07236                 and             ebx,[GWMaskShifted]
07237                 xor             eax,0
07238 
07239                 add             ecx,ebx
07240 
07241                 rol             eax,16
07242                 add             edx,dword ptr[DeltaV]
07243 
07244                 shr             ecx,16
07245                 add             ebx,dword ptr[DeltaU]
07246 
07247                 mov             ax,word ptr[2*ecx+esi]
07248 
07249                 mov             ecx,edx
07250                 xor             eax,0
07251 
07252                 and             ecx,[GHMaskShifted16]
07253                 mov             esi,eax
07254 
07255                 mov             ebp,eax
07256                 and             esi,REDMASK2
07257 
07258                 and             ebp,GREENMASK2
07259                 mov             dword ptr[Red],esi
07260 
07261                 mov             dword ptr[Green],ebp
07263 
07264 
07265                 fild    qword ptr[Red]                  ; r    LB   LG   LR
07266 
07267                 mov             ebp,eax
07268 
07269                 fmul    st,st(3)                                ; R    LB   LG   LR
07270                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
07271 
07272                 and             ebp,BLUEMASK
07273                 and             ebx,[GWMaskShifted]
07274 
07275                 mov             dword ptr[Blue],ebp
07276 
07277                 fmul    st,st(3)                                ; G    R    LB   LG   LR
07278                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
07279                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
07280                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
07281                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
07282                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
07283                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
07284                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
07285                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
07286                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
07287                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
07288                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
07289 
07290                 mov             eax,dword ptr[Bucket]
07291                 mov             ebp,dword ptr[Bucket2]
07292 
07293                 fstp    qword ptr[Bucket]               ; LB   LG   LR
07294                 fxch    st(1)
07295                 fadd    qword ptr[GreenDelta]
07296                 fxch    st(1)
07297                 fadd    qword ptr[BlueDelta]
07298                 fxch    st(2)
07299                 fadd    qword ptr[RedDelta]
07300                 fxch    st(2)
07301 
07302                 and             eax,REDMASK2
07303                 and             ebp,BLUEMASK
07304                 
07305                 mov             esi,dword ptr[Bucket]
07306                 or              ebp,eax
07307 
07308                 add             ecx,ebx
07309                 and             esi,GREENMASK2
07310 
07311                 shr             ecx,16
07312                 or              ebp,esi
07313 
07314                 xor             eax,0
07315                 mov             esi,pTex
07316 
07317                 rol             ebp,16
07318                 add             edx,dword ptr[DeltaV]
07319 
07320                 mov             ax,word ptr[2*ecx+esi]
07321                 mov             ecx,[ZVal]
07322 
07323                 mov             esi,[ZVal]
07324                 add             ecx,[ZDelta]
07325 
07326                 shr             esi,16
07327                 mov             [ZVal],ecx
07328 
07329                 mov             ecx,pZBufferPtr
07330 
07331                 cmp             si,word ptr[ecx+8]
07332                 jle             Skip2
07333 
07334                 mov             [edi+8],ebp
07335                 mov             word ptr[ecx+8],si
07336                 mov             word ptr[ecx+10],si
07337 
07338 Skip2:
07339                 mov             ecx,edx
07340                 mov             esi,pTex
07341 
07342                 add             ebx,dword ptr[DeltaU]
07343                 and             ecx,[GHMaskShifted16]
07344 
07345                 and             ebx,[GWMaskShifted]
07346                 xor             eax,0
07347 
07348                 add             ecx,ebx
07349 
07350                 shr             ecx,16
07351                 add             edx,dword ptr[DeltaV]
07352 
07353                 rol             eax,16
07354                 mov             ax,word ptr[2*ecx+esi]
07355 
07356                 mov             ecx,edx
07357                 xor             eax,0
07358 
07359                 and             ecx,[GHMaskShifted16]
07360                 mov             esi,eax
07361 
07362                 mov             ebp,eax
07363                 and             esi,REDMASK2
07364 
07365                 and             ebp,GREENMASK2
07366                 mov             dword ptr[Red],esi
07367 
07368                 mov             dword ptr[Green],ebp
07369                 add             ebx,dword ptr[DeltaU]
07371 
07372 
07373                 fild    qword ptr[Red]                  ; r    LB   LG   LR
07374 
07375                 mov             ebp,eax
07376 
07377                 fmul    st,st(3)                                ; R    LB   LG   LR
07378                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
07379 
07380                 and             ebp,BLUEMASK
07381                 and             ebx,[GWMaskShifted]
07382 
07383                 mov             dword ptr[Blue],ebp
07384 
07385                 fmul    st,st(3)                                ; G    R    LB   LG   LR
07386                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
07387                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
07388                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
07389                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
07390                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
07391                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
07392                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
07393                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
07394                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
07395                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
07396                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
07397 
07398                 mov             eax,dword ptr[Bucket]
07399                 mov             ebp,dword ptr[Bucket2]
07400 
07401                 fstp    qword ptr[Bucket]               ; LB   LG   LR
07402                 fxch    st(1)
07403                 fadd    qword ptr[GreenDelta]
07404                 fxch    st(1)
07405                 fadd    qword ptr[BlueDelta]
07406                 fxch    st(2)
07407                 fadd    qword ptr[RedDelta]
07408                 fxch    st(2)
07409 
07410                 and             eax,REDMASK2
07411                 and             ebp,BLUEMASK
07412                 
07413                 mov             esi,dword ptr[Bucket]
07414                 or              ebp,eax
07415 
07416                 add             ecx,ebx
07417                 and             esi,GREENMASK2
07418 
07419                 shr             ecx,16
07420                 or              ebp,esi
07421 
07422                 xor             eax,0
07423                 mov             esi,pTex
07424 
07425                 rol             ebp,16
07426                 add             edx,dword ptr[DeltaV]
07427 
07428                 mov             ax,word ptr[2*ecx+esi]
07429                 mov             ecx,[ZVal]
07430 
07431                 mov             esi,[ZVal]
07432                 add             ecx,[ZDelta]
07433 
07434                 shr             esi,16
07435                 mov             [ZVal],ecx
07436 
07437                 mov             ecx,pZBufferPtr
07438 
07439                 cmp             si,word ptr[ecx+12]
07440                 jle             Skip3
07441 
07442                 mov             [edi+12],ebp
07443                 mov             word ptr[ecx+12],si
07444                 mov             word ptr[ecx+14],si
07445 
07446 Skip3:
07447                 mov             ecx,edx
07448                 mov             esi,pTex
07449 
07450                 add             ebx,dword ptr[DeltaU]
07451                 and             ecx,[GHMaskShifted16]
07452 
07453                 and             ebx,[GWMaskShifted]
07454                 xor             eax,0
07455 
07456                 add             ecx,ebx
07457 
07458                 shr             ecx,16
07459                 add             edx,dword ptr[DeltaV]
07460 
07461                 rol             eax,16
07462                 mov             ax,word ptr[2*ecx+esi]
07463 
07464                 mov             ecx,edx
07465                 xor             eax,0
07466 
07467                 and             ecx,[GHMaskShifted16]
07468                 mov             esi,eax
07469 
07470                 mov             ebp,eax
07471                 and             esi,REDMASK2
07472 
07473                 and             ebp,GREENMASK2
07474                 mov             dword ptr[Red],esi
07475 
07476                 mov             dword ptr[Green],ebp
07477                 add             ebx,dword ptr[DeltaU]
07479 
07480 
07481                 fild    qword ptr[Red]                  ; r    LB   LG   LR
07482 
07483                 mov             ebp,eax
07484 
07485                 fmul    st,st(3)                                ; R    LB   LG   LR
07486                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
07487 
07488                 and             ebp,BLUEMASK
07489                 and             ebx,[GWMaskShifted]
07490 
07491                 mov             dword ptr[Blue],ebp
07492 
07493                 fmul    st,st(3)                                ; G    R    LB   LG   LR
07494                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
07495                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
07496                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
07497                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
07498                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
07499                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
07500                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
07501                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
07502                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
07503                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
07504                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
07505 
07506                 mov             eax,dword ptr[Bucket]
07507                 mov             ebp,dword ptr[Bucket2]
07508 
07509                 fstp    qword ptr[Bucket]               ; LB   LG   LR
07510                 fxch    st(1)
07511                 fadd    qword ptr[GreenDelta]
07512                 fxch    st(1)
07513                 fadd    qword ptr[BlueDelta]
07514                 fxch    st(2)
07515                 fadd    qword ptr[RedDelta]
07516                 fxch    st(2)
07517 
07518                 and             eax,REDMASK2
07519                 and             ebp,BLUEMASK
07520                 
07521                 mov             esi,dword ptr[Bucket]
07522                 or              ebp,eax
07523 
07524                 add             ecx,ebx
07525                 and             esi,GREENMASK2
07526 
07527                 shr             ecx,16
07528                 or              ebp,esi
07529 
07530                 xor             eax,0
07531                 mov             esi,pTex
07532 
07533                 rol             ebp,16
07534                 add             edx,dword ptr[DeltaV]
07535 
07536                 mov             ax,word ptr[2*ecx+esi]
07537                 mov             ecx,[ZVal]
07538 
07539                 mov             esi,[ZVal]
07540                 add             ecx,[ZDelta]
07541 
07542                 shr             esi,16
07543                 mov             [ZVal],ecx
07544 
07545                 mov             ecx,pZBufferPtr
07546 
07547                 cmp             si,word ptr[ecx+16]
07548                 jle             Skip4
07549 
07550                 mov             [edi+16],ebp
07551                 mov             word ptr[ecx+16],si
07552                 mov             word ptr[ecx+18],si
07553 
07554 Skip4:
07555                 mov             ecx,edx
07556                 mov             esi,pTex
07557 
07558                 add             ebx,dword ptr[DeltaU]
07559                 and             ecx,[GHMaskShifted16]
07560 
07561                 and             ebx,[GWMaskShifted]
07562                 xor             eax,0
07563 
07564                 add             ecx,ebx
07565 
07566                 shr             ecx,16
07567                 add             edx,dword ptr[DeltaV]
07568 
07569                 rol             eax,16
07570                 mov             ax,word ptr[2*ecx+esi]
07571 
07572                 mov             ecx,edx
07573                 xor             eax,0
07574 
07575                 and             ecx,[GHMaskShifted16]
07576                 mov             esi,eax
07577 
07578                 mov             ebp,eax
07579                 and             esi,REDMASK2
07580 
07581                 and             ebp,GREENMASK2
07582                 mov             dword ptr[Red],esi
07583 
07584                 mov             dword ptr[Green],ebp
07585                 add             ebx,dword ptr[DeltaU]
07587 
07588 
07589                 fild    qword ptr[Red]                  ; r    LB   LG   LR
07590 
07591                 mov             ebp,eax
07592 
07593                 fmul    st,st(3)                                ; R    LB   LG   LR
07594                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
07595 
07596                 and             ebp,BLUEMASK
07597                 and             ebx,[GWMaskShifted]
07598 
07599                 mov             dword ptr[Blue],ebp
07600 
07601                 fmul    st,st(3)                                ; G    R    LB   LG   LR
07602                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
07603                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
07604                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
07605                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
07606                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
07607                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
07608                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
07609                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
07610                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
07611                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
07612                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
07613 
07614                 mov             eax,dword ptr[Bucket]
07615                 mov             ebp,dword ptr[Bucket2]
07616 
07617                 fstp    qword ptr[Bucket]               ; LB   LG   LR
07618                 fxch    st(1)
07619                 fadd    qword ptr[GreenDelta]
07620                 fxch    st(1)
07621                 fadd    qword ptr[BlueDelta]
07622                 fxch    st(2)
07623                 fadd    qword ptr[RedDelta]
07624                 fxch    st(2)
07625 
07626                 and             eax,REDMASK2
07627                 and             ebp,BLUEMASK
07628                 
07629                 mov             esi,dword ptr[Bucket]
07630                 or              ebp,eax
07631 
07632                 add             ecx,ebx
07633                 and             esi,GREENMASK2
07634 
07635                 shr             ecx,16
07636                 or              ebp,esi
07637 
07638                 xor             eax,0
07639                 mov             esi,pTex
07640 
07641                 rol             ebp,16
07642                 add             edx,dword ptr[DeltaV]
07643 
07644                 mov             ax,word ptr[2*ecx+esi]
07645                 mov             ecx,[ZVal]
07646 
07647                 mov             esi,[ZVal]
07648                 add             ecx,[ZDelta]
07649 
07650                 shr             esi,16
07651                 mov             [ZVal],ecx
07652 
07653                 mov             ecx,pZBufferPtr
07654 
07655                 cmp             si,word ptr[ecx+20]
07656                 jle             Skip5
07657 
07658                 mov             [edi+20],ebp
07659                 mov             word ptr[ecx+20],si
07660                 mov             word ptr[ecx+22],si
07661 
07662 Skip5:
07663                 mov             ecx,edx
07664                 mov             esi,pTex
07665 
07666                 add             ebx,dword ptr[DeltaU]
07667                 and             ecx,[GHMaskShifted16]
07668 
07669                 and             ebx,[GWMaskShifted]
07670                 xor             eax,0
07671 
07672                 add             ecx,ebx
07673 
07674                 shr             ecx,16
07675                 add             edx,dword ptr[DeltaV]
07676 
07677                 rol             eax,16
07678                 mov             ax,word ptr[2*ecx+esi]
07679 
07680                 mov             ecx,edx
07681                 xor             eax,0
07682 
07683                 and             ecx,[GHMaskShifted16]
07684                 mov             esi,eax
07685 
07686                 mov             ebp,eax
07687                 and             esi,REDMASK2
07688 
07689                 and             ebp,GREENMASK2
07690                 mov             dword ptr[Red],esi
07691 
07692                 mov             dword ptr[Green],ebp
07693                 add             ebx,dword ptr[DeltaU]
07695 
07696 
07697                 fild    qword ptr[Red]                  ; r    LB   LG   LR
07698 
07699                 mov             ebp,eax
07700 
07701                 fmul    st,st(3)                                ; R    LB   LG   LR
07702                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
07703 
07704                 and             ebp,BLUEMASK
07705                 and             ebx,[GWMaskShifted]
07706 
07707                 mov             dword ptr[Blue],ebp
07708 
07709                 fmul    st,st(3)                                ; G    R    LB   LG   LR
07710                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
07711                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
07712                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
07713                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
07714                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
07715                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
07716                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
07717                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
07718                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
07719                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
07720                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
07721 
07722                 mov             eax,dword ptr[Bucket]
07723                 mov             ebp,dword ptr[Bucket2]
07724 
07725                 fstp    qword ptr[Bucket]               ; LB   LG   LR
07726                 fxch    st(1)
07727                 fadd    qword ptr[GreenDelta]
07728                 fxch    st(1)
07729                 fadd    qword ptr[BlueDelta]
07730                 fxch    st(2)
07731                 fadd    qword ptr[RedDelta]
07732                 fxch    st(2)
07733 
07734                 and             eax,REDMASK2
07735                 and             ebp,BLUEMASK
07736                 
07737                 mov             esi,dword ptr[Bucket]
07738                 or              ebp,eax
07739 
07740                 add             ecx,ebx
07741                 and             esi,GREENMASK2
07742 
07743                 shr             ecx,16
07744                 or              ebp,esi
07745 
07746                 xor             eax,0
07747                 mov             esi,pTex
07748 
07749                 rol             ebp,16
07750                 add             edx,dword ptr[DeltaV]
07751 
07752                 mov             ax,word ptr[2*ecx+esi]
07753                 mov             ecx,[ZVal]
07754 
07755                 mov             esi,[ZVal]
07756                 add             ecx,[ZDelta]
07757 
07758                 shr             esi,16
07759                 mov             [ZVal],ecx
07760 
07761                 mov             ecx,pZBufferPtr
07762 
07763                 cmp             si,word ptr[ecx+24]
07764                 jle             Skip6
07765 
07766                 mov             [edi+24],ebp
07767                 mov             word ptr[ecx+24],si
07768                 mov             word ptr[ecx+26],si
07769 
07770 Skip6:
07771                 mov             ecx,edx
07772                 mov             esi,pTex
07773 
07774                 add             ebx,dword ptr[DeltaU]
07775                 and             ecx,[GHMaskShifted16]
07776 
07777                 and             ebx,[GWMaskShifted]
07778                 xor             eax,0
07779 
07780                 add             ecx,ebx
07781 
07782                 shr             ecx,16
07783                 add             edx,dword ptr[DeltaV]
07784 
07785                 rol             eax,16
07786                 mov             ax,word ptr[2*ecx+esi]
07787 
07788                 mov             ecx,edx
07789                 xor             eax,0
07790 
07791                 and             ecx,[GHMaskShifted16]
07792                 mov             esi,eax
07793 
07794                 mov             ebp,eax
07795                 and             esi,REDMASK2
07796 
07797                 and             ebp,GREENMASK2
07798                 mov             dword ptr[Red],esi
07799 
07800                 mov             dword ptr[Green],ebp
07801                 add             ebx,dword ptr[DeltaU]
07803                 fild    qword ptr[Red]                  ; r    LB   LG   LR
07804 
07805                 mov             ebp,eax
07806 
07807                 fmul    st,st(3)                                ; R    LB   LG   LR
07808                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
07809 
07810                 and             ebp,BLUEMASK
07811                 and             ebx,[GWMaskShifted]
07812 
07813                 mov             dword ptr[Blue],ebp
07814 
07815                 fmul    st,st(3)                                ; G    R    LB   LG   LR
07816                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
07817                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
07818                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
07819                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
07820                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
07821                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
07822                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
07823                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
07824                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
07825                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
07826                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
07827 
07828                 mov             eax,dword ptr[Bucket]
07829                 mov             ebp,dword ptr[Bucket2]
07830 
07831                 fstp    qword ptr[Bucket]               ; LB   LG   LR
07832                 fadd    qword ptr[BlueDelta]
07833                 fistp   dword ptr[BB1]
07834                 fadd    qword ptr[GreenDelta]
07835                 fistp   dword ptr[GG1]
07836                 fadd    qword ptr[RedDelta]
07837                 fistp   dword ptr[RR1]
07838 
07839                 and             eax,REDMASK2
07840                 and             ebp,BLUEMASK
07841                 
07842                 mov             esi,dword ptr[Bucket]
07843                 or              ebp,eax
07844 
07845                 fstp    dword ptr[Bucket]
07846                 fstp    dword ptr[Bucket2]
07847                 fstp    dword ptr[Bucket]
07848 
07849                 and             esi,GREENMASK2
07850 
07851                 fld             dword ptr[FTemp5]
07852                 fld             dword ptr[FTemp4]
07853 
07854                 or              ebp,esi
07855 
07856                 fld             dword ptr[FTemp3]
07857                 fld             dword ptr[FTemp2]
07858 
07859                 rol             ebp,16
07860 
07861                 fld             dword ptr[FTemp1]
07862                 fld             dword ptr[FTemp0]
07863 
07864                 mov             ecx,[ZVal]
07865 
07866                 mov             esi,[ZVal]
07867                 add             ecx,[ZDelta]
07868 
07869                 shr             esi,16
07870                 mov             [ZVal],ecx
07871 
07872                 mov             ecx,pZBufferPtr
07873 
07874                 cmp             si,word ptr[ecx+28]
07875                 jle             Skip7
07876 
07877                 mov             [edi+28],ebp
07878                 mov             word ptr[ecx+28],si
07879                 mov             word ptr[ecx+30],si
07880 
07881 Skip7:
07882                 pop             ebp
07883 
07884 
07885                 ; get corrected right side deltas ; st0  st1  st2  st3  st4  st5  st6  st7
07886                                                                                 ; ZR   UZR  ZRi  VZR  UL   VL
07887                 fld             st                                              ; ZR   ZR   UZR  ZRi  VZR  UL   VL
07888                 fmul    st,st(4)                                ; VR   ZR   UZR  ZRi  VZR  UL   VL
07889                 fxch    st(1)                                   ; ZR   VR   UZR  ZRi  VZR  UL   VL
07890                 fmul    st,st(2)                                ; UR   VR   UZR  ZRi  VZR  UL   VL
07891 
07892                 add             edi,32                                  ; move screen pointer to start of next aspan
07893                 add             [pZBufferPtr],32
07894                 dec             [NumASpans]                     ; dec num affine spans
07895                 jnz             SpanLoop16
07896 
07897 HandleLeftoverPixels16:
07898 
07899                 mov             esi,[pTex]
07900 
07901 
07902                 cmp             [RemainingCount],0
07903                 jz              FPUReturn16
07904 
07905                 //need one more stack spot
07906                 fstp    dword ptr[FloatTemp]    ; VR   UZR  ZRi  VZR  UL   VL
07907                 fld             st(4)                                   ; UL   VR   UZR  ZRi  VZR  UL   VL
07908                 fmul    [GLMapMulU]                             ; ULL  VR   UZR  ZRi  VZR  UL   VL
07909                 fld             st(5)                                   ; UL   ULL  VR   UZR  ZRi  VZR  UL   VL
07910                 fadd    qword ptr[MipMagic]             ; ULk  ULL  VR   UZR  ZRi  VZR  UL   VL
07911                 fxch    st(1)                                   ; ULL  ULk  VR   UZR  ZRi  VZR  UL   VL
07912                 fadd    qword ptr[MipMagic]             ; ULLk ULk  VR   UZR  ZRi  VZR  UL   VL
07913                 fxch    st(1)                                   ; ULk  ULLk VR   UZR  ZRi  VZR  UL   VL
07914                 fstp    qword ptr[Bucket]               ; ULLk VR   UZR  ZRi  VZR  UL   VL
07915                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
07916 
07917                 mov             ebx,dword ptr[Bucket]
07918                 mov             eax,dword ptr[Bucket2]
07919 
07920                 fld             st(5)                                   ; VL   VR   UZR  ZRi  VZR  UL   VL
07921                 fmul    [GLMapMulV]                             ; VLL  VR   UZR  ZRi  VZR  UL   VL
07922 
07923                 add             ebx,dword ptr[UAdjust]
07924                 add             eax,dword ptr[UAdjustL]
07925 
07926                 mov             [U1],ebx
07927                 mov             [UFixed],eax
07928 
07929                 fld             st(6)                                   ; VL   VLL  VR   UZR  ZRi  VZR  UL   VL
07930                 fadd    qword ptr[MipMagic]             ; VLk  VLL  VR   UZR  ZRi  VZR  UL   VL
07931                 fxch    st(1)                                   ; VLL  VLk  VR   UZR  ZRi  VZR  UL   VL
07932                 fadd    qword ptr[MipMagic]             ; VLLk VLk  VR   UZR  ZRi  VZR  UL   VL
07933                 fxch    st(1)                                   ; VLk  VLLk VR   UZR  ZRi  VZR  UL   VL
07934                 fstp    qword ptr[Bucket]               ; VLLk VR   UZR  ZRi  VZR  UL   VL
07935                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
07936 
07937                 mov             ebx,dword ptr[Bucket]
07938                 mov             eax,dword ptr[Bucket2]
07939 
07940                 fld             dword ptr[FloatTemp]    ; UR   VR   UZR  ZRi  VZR  UL   dV
07941 
07942                 add             ebx,dword ptr[VAdjust]
07943                 add             eax,dword ptr[VAdjustL]
07944 
07945                 mov             [V1],ebx
07946                 mov             [VFixed],eax
07947 
07948                 dec             [RemainingCount]
07949                 jz              OnePixelSpan16
07950 
07951 
07952                 //must get rid of this wasted time
07953                 fstp    [FloatTemp]                             ; inv. inv. inv. inv. UL   VL
07954                 fstp    [FloatTemp]                             ; inv. inv. inv. UL   VL
07955                 fstp    [FloatTemp]                             ; inv. inv. UL   VL
07956                 fstp    [FloatTemp]                             ; inv. UL   VL
07957                 fstp    [FloatTemp]                             ; UL   VL
07958                 fild    [y]                                             ; y    UL   VL
07959                 fild    [x2]                                    ; xr   y    UL   VL
07960 
07961                 fld             [UDivZStepY]                    ; UZdY xr   y    UL   VL
07962                 fld             [UDivZStepX]                    ; UZdX UZdY xr   y    UL   VL
07963                 fmul    st,st(2)                                ; UZX  UZdY xr   y    UL   VL
07964                 fld             [VDivZStepY]                    ; VZdY UZX  UZdY xr   y    UL   VL
07965                 fld             [VDivZStepX]                    ; VZdX VZdY UZX  UZdY xr   y    UL   VL
07966                 fxch    st(3)                                   ; UZdy VZdY UZX  VZdX xr   y    UL   VL
07967                 fmul    st,st(5)                                ; UZY  VZdY UZX  VZdX xr   y    UL   VL
07968                 fxch    st(2)                                   ; UZX  VZdY UZY  VZdX xr   y    UL   VL
07969                 fadd    [UDivZOrigin]                   ; UZXS VZdY UZY  VZdX xr   y    UL   VL
07970                 fxch    st(3)                                   ; VZdX VZdY UZY  UZXS xr   y    UL   VL
07971                 fmul    st,st(4)                                ; VZX  VZdY UZY  UZXS xr   y    UL   VL
07972                 fxch    st(2)                                   ; UZY  VZdY VZX  UZXS xr   y    UL   VL
07973                 faddp   st(3),st                                ; VZdY VZX  UZ   xr   y    UL   VL
07974                 fmul    st,st(4)                                ; VZY  VZX  UZ   xr   y    UL   VL
07975                 fxch    st(1)                                   ; VZX  VZY  UZ   xr   y    UL   VL
07976                 fadd    [VDivZOrigin]                   ; VZXS VZY  UZ   xr   y    UL   VL
07977                 fld             [ZiStepX]                               ; ZdX  VZXS VZY  UZ   xr   y    UL   VL
07978                 fmulp   st(4),st                                ; VZXS VZY  UZ   ZX   y    UL   VL
07979                 faddp   st(1),st                                ; VZ   UZ   ZX   y    UL   VL
07980                 fld             [ZiStepY]                               ; ZdY  VZ   UZ   ZX   y    UL   VL
07981                 fmulp   st(4),st                                ; VZ   UZ   ZX   ZY   UL   VL
07982                 fxch    st(2)                                   ; ZX   UZ   VZ   ZY   UL   VL
07983                 fadd    [ZiOrigin]                              ; ZXS  UZ   VZ   ZY   UL   VL
07984 
07985                 faddp   st(3),st                                ; UZ   VZ   Zi   UL   VL
07986                 fld1                                                    ; 1    UZ   VZ   Zi   UL   VL
07987                 fdiv    st,st(3)                                ; ZR   UZ   VZ   Zi   UL   VL
07988 
07989                 fld             st                                              ; ZR   ZR   UZ   VZ   Zi   UL   VL
07990                 fmul    st,st(3)                                ; VR   ZR   UZ   VZ   Zi   UL   VL
07991                 fxch    st(1)                                   ; ZR   VR   UZ   VZ   Zi   UL   VL
07992                 fmul    st,st(2)                                ; UR   VR   UZ   VZ   Zi   UL   VL
07993 
07994                 //lazy idiv below... should 1/int mul mul
07995 
07996                 ; calculate deltas                              ; st0  st1  st2  st3  st4  st5  st6  st7
07997                 fsubr   st(5),st                                ; UR   VR   inv. inv. inv. dU   VL
07998                 fxch    st(1)                                   ; VR   UR   inv. inv. inv. dU   VL
07999                 fsubr   st(6),st                                ; VR   UR   inv. inv. inv. dU   dV
08000                 fxch    st(6)                                   ; dV   UR   inv. inv. inv. dU   VR
08001                 fidiv   dword ptr[RemainingCount];dv   UR   inv. inv. inv. dU   VR
08002                 fadd    qword ptr[MipMagic]             ; dvk  UR   inv. inv. inv. dU   VR
08003                 fxch    st(5)                                   ; dU   UR   inv. inv. inv. dvk  VR
08004                 fidiv   dword ptr[RemainingCount];du   UR   inv. inv. inv. dvk  VR
08005                 fadd    qword ptr[MipMagic]             ; duk  UR   inv. inv. inv. dvk  VR
08006                 fxch    st(5)                                   ; dvk  UR   inv. inv. inv. duk  VR
08007                 fstp    qword ptr[DeltaV]               ; UR   inv. inv. inv. duk  VR
08008                 fxch    st(4)                                   ; duk  inv. inv. inv. UR   VR
08009                 fstp    qword ptr[DeltaU]               ; inv. inv. inv. UR   VR
08010                 fld             st(1)                                   ; inv. inv. inv. inv. UR   VR
08011                 fld             st(2)                                   ; inv. inv. inv. inv. inv. UR   VR
08012 
08013 OnePixelSpan16:
08014                 // Clamp U/V
08015                 mov             ebx,[UFixed]
08016                 cmp             ebx,MaxU
08017                 jle             TryClampU116
08018                 mov             ecx,MaxU
08019                 mov             dword ptr[UFixed],ecx
08020                 jmp             NoClampU116
08021 
08022 TryClampU116:
08023                 cmp             ebx,0
08024                 jge             NoClampU116
08025                 mov             dword ptr[UFixed],0
08026 NoClampU116:
08027                 mov             eax,[VFixed]
08028                 cmp             eax,MaxV
08029                 jle             TryClampV116
08030                 mov             ecx,MaxV
08031                 mov             dword ptr[VFixed],ecx
08032                 jmp             NoClampV116
08033 
08034 TryClampV116:
08035                 cmp             eax,0
08036                 jge             NoClampV116
08037                 mov             dword ptr[VFixed],0
08038 
08039 NoClampV116:
08040 
08041                 fstp    [FTemp0]
08042                 fstp    [FTemp1]
08043                 fstp    [FTemp2]
08044                 fstp    [FTemp3]
08045                 fstp    [FTemp4]
08046                 fstp    [FTemp5]
08047 
08048                 mov             ebx,dword ptr[U1]
08049                 mov             edx,dword ptr[V1]
08050 
08051                 fild    [RR1]                                   ; LR
08052                 fild    [GG1]                                   ; LG   LR
08053                 fild    [BB1]                                   ; LB   LG   LR
08054 
08055                 mov             ecx,[VShift]
08056                 add             edx,dword ptr[VAdjust2]
08057 
08058                 add             ebx,dword ptr[UAdjust2]
08059                 mov             eax,dword ptr[DeltaV]
08060 
08061                 shl             eax,cl
08062                 mov             esi,pTex
08063 
08064                 shl             edx,cl
08065                 mov             dword ptr[DeltaV],eax
08066 
08067                 mov             eax,[ZDelta]
08068                 mov             ecx,[ZVal]
08069 
08070                 sar             eax,1
08071                 push    ebp
08072 
08073                 mov             [ZDelta],eax
08074 
08075 LeftoverLoop16:
08076                 mov             eax,edx
08077                 and             ebx,[GWMaskShifted]
08078 
08079                 and             eax,[GHMaskShifted16]
08080 
08081                 add             eax,ebx
08082                 add             ebx,dword ptr[DeltaU]
08083 
08084                 shr             eax,16
08085                 add             edi,2
08086 
08087                 mov             ax,word ptr[2*eax+esi]
08088                 add             edx,dword ptr[DeltaV]
08089 
08090                 xor             eax,0
08091 
08092                 mov             esi,eax
08093                 mov             ebp,eax
08094 
08095                 and             esi,REDMASK2
08096                 and             ebp,GREENMASK2
08097 
08098                 mov             dword ptr[Red],esi
08099                 mov             dword ptr[Green],ebp
08100 
08101                 fild    qword ptr[Red]                  ; r    LB   LG   LR
08102 
08103                 mov             ebp,eax
08104 
08105                 fmul    st,st(3)                                ; R    LB   LG   LR
08106                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
08107 
08108                 and             ebp,BLUEMASK
08109 
08110                 mov             dword ptr[Blue],ebp
08111 
08112                 fmul    st,st(3)                                ; G    R    LB   LG   LR
08113                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
08114                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
08115                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
08116                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
08117                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
08118                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
08119                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
08120                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
08121                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
08122                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
08123                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
08124 
08125                 mov             eax,dword ptr[Bucket]
08126                 mov             ebp,dword ptr[Bucket2]
08127 
08128                 fstp    qword ptr[Bucket]               ; LB   LG   LR
08129 
08130                 and             eax,REDMASK2
08131                 and             ebp,BLUEMASK
08132                 
08133                 mov             esi,dword ptr[Bucket]
08134                 or              ebp,eax
08135 
08136                 and             esi,GREENMASK2
08137                 mov             eax,ecx
08138 
08139                 or              ebp,esi
08140 
08141                 shr             eax,16
08142                 mov             esi,pZBufferPtr
08143 
08144                 cmp             ax,word ptr[esi]
08145                 jle             SkipLeftOver
08146 
08147                 mov             word ptr[edi-2],bp
08148                 mov             word ptr[esi],ax
08149 
08150 SkipLeftOver:
08151                 add             ecx,[ZDelta]
08152                 mov             esi,pTex
08153 
08154                 add             pZBufferPtr,2
08155 
08156                 dec             [RemainingCount]
08157                 jge             LeftoverLoop16
08158 
08159                 pop             ebp
08160 
08161 
08162 FPUReturn16:
08163                 ffree   st(0)
08164                 ffree   st(1)
08165                 ffree   st(2)
08166                 ffree   st(3)
08167                 ffree   st(4)
08168                 ffree   st(5)
08169                 ffree   st(6)
08170 
08171 Return16:
08172                 pop             edi
08173                 pop             esi
08174                 pop             ecx
08175                 pop             ebx
08176         }
08177 }

void DrawSpan16_AsmGouraudZBufferTrans555X86FPU int32  x1,
int32  x2,
int32  y,
int32  r1,
int32  g1,
int32  b1,
int32  r2,
int32  g2,
int32  b2
 

Definition at line 11017 of file x86span555.c.

References B, BB1, Blue, BlueDelta, BLUEMASK, Bucket, Bucket2, CKeyTest, DeltaU, DeltaV, Dest, FloatTemp, FTemp0, FTemp1, FTemp2, FTemp3, FTemp4, FTemp5, G, GBitPtr16, GG1, GHMaskShifted16, GLMapMulU, GLMapMulV, Green, GreenDelta, GREENMASK2, GWMaskShifted, Magic, MaxU, MaxV, MipMagic, MipMagic2, NumASpans, or, pointer, pTex, pZBufferPtr, r, R, Red, RedDelta, REDMASK2, RemainingCount, RR1, TDest, Two, U1, UAdjust, UAdjust2, UAdjustL, UDivZ16StepX, UDivZOrigin, UDivZStepX, UDivZStepY, UFixed, V1, VAdjust, VAdjust2, VAdjustL, VDivZ16StepX, VDivZOrigin, VDivZStepX, VDivZStepY, VFixed, VShift, widTemp, y, ZBufferPrec, ZDelta, Zi, Zi16StepX, ZiOrigin, ZiStepX, ZiStepY, and ZVal.

Referenced by RenderWorldPoly().

11018 {
11019         RR1     =r1;
11020         GG1     =g1;
11021         BB1     =b1;
11022         TDest   =Dest;
11023         _asm
11024         {
11025                 push    ebx
11026                 push    ecx
11027                 push    esi
11028                 push    edi
11029 
11030                 mov             eax,x1
11031                 mov             ecx,x2
11032                 sub             ecx,eax
11033                 jle             Return16
11034 
11035                 mov             edi,[GBitPtr16]
11036                 mov             pTex,edi
11037 
11038                 fild    [y]                                             ; y
11039                 mov             [widTemp],ecx
11040 
11041                 fild    [x1]                                            ; x    y
11042                 fild    [widTemp]
11043 
11044                 fld1
11045                 fdivrp  st(1),st
11046 
11047                 mov             esi,x1
11048                 mov             edi,[TDest]
11049 
11050                 shl             esi,1
11051                 mov             eax,ecx
11052 
11053                 add             edi,esi
11054                 add             pZBufferPtr,esi
11055 
11056                 mov             eax,ecx
11057                 shr             ecx,4
11058                 and             eax,15
11059                 _emit 75h
11060                 _emit 06h
11061                 dec             ecx
11062                 mov             eax,16
11063 
11064                 mov             [NumASpans],ecx
11065                 mov             [RemainingCount],eax
11066 
11067                 fild    [r2]
11068                 fisub   [r1]
11069                 fild    [g2]
11070                 fisub   [g1]
11071                 fild    [b2]
11072                 fisub   [b1]
11073                 fxch    st(2)
11074                 fmul    st,st(3)
11075                 fxch    st(1)
11076                 fmul    st,st(3)
11077                 fxch    st(2)
11078                 fmul    st,st(3)
11079                 frndint
11080                 fstp    qword ptr[BlueDelta]
11081                 frndint
11082                 fstp    qword ptr[RedDelta]
11083                 frndint
11084                 fstp    qword ptr[GreenDelta]
11085                 fstp    qword ptr[FTemp0]
11086 
11087 
11088                 //decoder won't keep up with these huge instructions
11089                 //need to find some int instructions to cram in here somewhere
11090                 fld             [UDivZStepY]                    ; UZdY x    y
11091                 fld             [UDivZStepX]                    ; UZdX UZdY x    y
11092                 fmul    st,st(2)                                ; UZX  UZdY x    y
11093                 fld             [VDivZStepY]                    ; VZdY UZX  UZdY x    y
11094                 fld             [VDivZStepX]                    ; VZdX VZdY UZX  UZdY x    y
11095                 fxch    st(3)                                   ; UZdy VZdY UZX  VZdX x    y
11096                 fmul    st,st(5)                                ; UZY  VZdY UZX  VZdX x    y
11097                 fxch    st(2)                                   ; UZX  VZdY UZY  VZdX x    y
11098                 fadd    [UDivZOrigin]                   ; UZXS VZdY UZY  VZdX x    y
11099                 fxch    st(3)                                   ; VZdX VZdY UZY  UZXS x    y
11100                 fmul    st,st(4)                                ; VZX  VZdY UZY  UZXS x    y
11101                 fxch    st(2)                                   ; UZY  VZdY VZX  UZXS x    y
11102                 faddp   st(3),st                                ; VZdY VZX  UZ   x    y
11103                 fmul    st,st(4)                                ; VZY  VZX  UZ   x    y
11104                 fxch    st(1)                                   ; VZX  VZY  UZ   x    y
11105                 fadd    [VDivZOrigin]                   ; VZXS VZY  UZ   x    y
11106                 fld             [ZiStepX]                               ; ZdX  VZXS VZY  UZ   x    y
11107 
11108                 //zbuffer step action
11109                 fld             [ZiStepX]
11110                 fmul    dword ptr[ZBufferPrec]
11111                 fmul    dword ptr[Two]
11112                 fistp   dword ptr[ZDelta]
11113 
11114                 fmulp   st(4),st                                ; VZXS VZY  UZ   ZX   y
11115                 faddp   st(1),st                                ; VZ   UZ   ZX   y
11116                 fld             [ZiStepY]                               ; ZdY  VZ   UZ   ZX   y
11117                 fmulp   st(4),st                                ; VZ   UZ   ZX   ZY
11118                 fxch    st(2)                                   ; ZX   UZ   VZ   ZY
11119                 fadd    [ZiOrigin]                              ; ZXS  UZ   VZ   ZY
11120 
11121                 //room for two cycles of int instructions here
11122 
11123                 faddp   st(3),st                                ; UZ   VZ   Zi
11124                 fld1                                                    ; 1    UZ   VZ   Zi
11125                 fdiv    st,st(3)                                ; ZL   UZ   VZ   Zi
11126 
11127                 //room for 18 cycles of int instructions here
11128 
11129                 fld             st                                              ; ZL   ZL   UZ   VZ   Zi
11130                 fmul    st,st(3)                                ; VL   ZL   UZ   VZ   Zi
11131                 fxch    st(4)                                   ; Zi   ZL   UZ   VZ   VL
11132 
11133                 //zbuffer action
11134                 fld             st
11135                 fmul    dword ptr[ZBufferPrec]
11136                 fistp   dword ptr[ZVal]
11137 
11138                 fadd    [Zi16StepX]                             ; ZRi  ZL   UZ   VZ   VL
11139                 fxch    st(1)                                   ; ZL   ZRi  UZ   VZ   VL
11140                 fmul    st,st(2)                                ; UL   ZRi  UZ   VZ   VL
11141                 fxch    st(3)                                   ; VZ   ZRi  UZ   UL   VL
11142                 fadd    [VDivZ16StepX]                  ; VZR  ZRi  UZ   UL   VL
11143                 fxch    st(2)                                   ; UZ   ZRi  VZR  UL   VL
11144                 fadd    [UDivZ16StepX]                  ; UZR  ZRi  VZR  UL   VL
11145                 fld1                                                    ; 1    UZR  ZRi  VZR  UL   VL
11146                 fdiv    st,st(2)                                ; ZR   UZR  ZRi  VZR  UL   VL
11147 
11148                 //room for 18 cycles of int stuff here
11149 
11150                 fld             st                                              ; ZR   ZR   UZR  ZRi  VZR  UL   VL
11151                 fmul    st,st(4)                                ; VR   ZR   UZR  ZRi  VZR  UL   VL
11152                 fxch    st(1)                                   ; ZR   VR   UZR  ZRi  VZR  UL   VL
11153                 //fmul stall one cycle
11154                 fmul    st,st(2)                                ; UR   VR   UZR  ZRi  VZR  UL   VL
11155 
11156                 test    ecx,ecx
11157                 jz              HandleLeftoverPixels16
11158 
11159 SpanLoop16:
11160                 //need one more stack spot
11161                 fstp    dword ptr[FloatTemp]    ; VR   UZR  ZRi  VZR  UL   VL
11162                 fld             st(4)                                   ; UL   VR   UZR  ZRi  VZR  UL   VL
11163                 fmul    [GLMapMulU]                             ; ULL  VR   UZR  ZRi  VZR  UL   VL
11164                 fld             st(5)                                   ; UL   ULL  VR   UZR  ZRi  VZR  UL   VL
11165                 fadd    qword ptr[MipMagic]             ; ULk  ULL  VR   UZR  ZRi  VZR  UL   VL
11166                 fxch    st(1)                                   ; ULL  ULk  VR   UZR  ZRi  VZR  UL   VL
11167                 fadd    qword ptr[MipMagic]             ; ULLk ULk  VR   UZR  ZRi  VZR  UL   VL
11168                 fxch    st(1)                                   ; ULk  ULLk VR   UZR  ZRi  VZR  UL   VL
11169                 fstp    qword ptr[Bucket]               ; ULLk VR   UZR  ZRi  VZR  UL   VL
11170                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
11171 
11172                 mov             ebx,dword ptr[Bucket]
11173                 mov             eax,dword ptr[Bucket2]
11174 
11175                 fld             st(5)                                   ; VL   VR   UZR  ZRi  VZR  UL   VL
11176                 fmul    [GLMapMulV]                             ; VLL  VR   UZR  ZRi  VZR  UL   VL
11177 
11178                 add             ebx,dword ptr[UAdjust]
11179                 add             eax,dword ptr[UAdjustL]
11180 
11181                 mov             [U1],ebx
11182                 mov             [UFixed],eax
11183 
11184                 fld             st(6)                                   ; VL   VLL  VR   UZR  ZRi  VZR  UL   VL
11185                 fadd    qword ptr[MipMagic]             ; VLk  VLL  VR   UZR  ZRi  VZR  UL   VL
11186                 fxch    st(1)                                   ; VLL  VLk  VR   UZR  ZRi  VZR  UL   VL
11187                 fadd    qword ptr[MipMagic]             ; VLLk VLk  VR   UZR  ZRi  VZR  UL   VL
11188                 fxch    st(1)                                   ; VLk  VLLk VR   UZR  ZRi  VZR  UL   VL
11189                 fstp    qword ptr[Bucket]               ; VLLk VR   UZR  ZRi  VZR  UL   VL
11190                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
11191                 fsubr   st(5),st                                ; VR   UZR  ZRi  VZR  UL   dV
11192 
11193                 mov             ebx,dword ptr[Bucket]
11194                 mov             eax,dword ptr[Bucket2]
11195 
11196                 fld             dword ptr[FloatTemp]    ; UR   VR   UZR  ZRi  VZR  UL   dV
11197 
11198                 add             ebx,dword ptr[VAdjust]
11199                 add             eax,dword ptr[VAdjustL]
11200 
11201                 mov             [V1],ebx
11202                 mov             [VFixed],eax
11203 
11204                 fsubr   st(5),st                                ; UR   VR   UZR  ZRi  VZR  dU   dV
11205                 fxch    st(6)                                   ; dV   VR   UZR  ZRi  VZR  dU   UR
11206                 fadd    qword ptr[MipMagic2]    ; dVk  VR   UZR  ZRi  VZR  dU   UR
11207                 fxch    st(5)                                   ; dU   VR   UZR  ZRi  VZR  dVk  UR
11208                 fadd    qword ptr[MipMagic2]    ; dUk  VR   UZR  ZRi  VZR  dVk  UR
11209                 fxch    st(5)                                   ; dVk  VR   UZR  ZRi  VZR  dUk  UR
11210                 fstp    qword ptr[DeltaV]               ; VR   UZR  ZRi  VZR  dUk  UR
11211                 fxch    st(5)                                   ; UR   UZR  ZRi  VZR  dUk  VR
11212                 //gotta do this to get em lined back up right
11213                 fxch    st(4)                                   ; dUk  UZR  ZRi  VZR  UR   VR
11214                 fstp    qword ptr[DeltaU]               ; UZR  ZRi  VZR  UR   VR
11215 
11216                 //right becomes left                    ; UZL  ZLi  VZL  UL   VL
11217                 fadd    [UDivZ16StepX]                  ; UZR  ZLi  VZL  UL   VL
11218                 fxch    st(1)                                   ; ZLi  UZR  VZL  UL   VL
11219                 fadd    [Zi16StepX]                             ; ZRi  UZR  VZL  UL   VL
11220                 fxch    st(2)                                   ; VZL  UZR  ZRi  UL   VL
11221                 fadd    [VDivZ16StepX]                  ; VZR  UZR  ZRi  UL   VL
11222                 fxch    st(2)                                   ; ZRi  UZR  VZR  UL   VL
11223                 fxch    st(1)                                   ; UZR  ZRi  VZR  UL   VL
11224                 fld1                                                    ; 1    UZR  ZRi  VZR  UL   VL
11225                 fdiv    st,st(2)                                ; ZR   UZR  ZRi  VZR  UL   VL
11226 
11227                 // Clamp U/V
11228                 mov             ebx,[UFixed]
11229                 cmp             ebx,MaxU
11230                 jle             TryClampU016
11231                 mov             ecx,MaxU
11232                 mov             dword ptr[UFixed],ecx
11233                 jmp             NoClampU016
11234 
11235 TryClampU016:
11236                 cmp             ebx,0
11237                 jge             NoClampU016
11238                 mov             dword ptr[UFixed],0
11239 NoClampU016:
11240                 mov             eax,[VFixed]
11241                 cmp             eax,MaxV
11242                 jle             TryClampV016
11243                 mov             ecx,MaxV
11244                 mov             dword ptr[VFixed],ecx
11245                 jmp             NoClampV016
11246 
11247 TryClampV016:
11248                 cmp             eax,0
11249                 jge             NoClampV016
11250                 mov             dword ptr[VFixed],0
11251 
11252 NoClampV016:
11253 
11254                 fstp    [FTemp0]                                ; UZR  ZRi  VZR  UL   VL
11255                 fstp    [FTemp1]                                ; ZRi  VZR  UL   VL
11256                 fstp    [FTemp2]                                ; VZR  UL   VL
11257                 fstp    [FTemp3]                                ; UL   VL
11258                 fstp    [FTemp4]                                ; VL
11259                 fstp    [FTemp5]                                ; 
11260 
11261 
11262                 fild    [RR1]                                   ; LR
11263                 fild    [GG1]                                   ; LG   LR
11264                 fild    [BB1]                                   ; LB   LG   LR
11265                 
11266                 
11267                 mov             ebx,dword ptr[U1]
11268                 mov             eax,dword ptr[V1]
11269 
11270                 add             ebx,dword ptr[UAdjust2]
11271                 add             eax,dword ptr[VAdjust2]
11272 
11273                 mov             ecx,[VShift]
11274                 mov             dword ptr[Bucket],ebx
11275 
11276                 shl             eax,cl
11277 
11278                 push    ebp
11279 
11280                 mov             dword ptr[Bucket2],eax
11281                 mov             ebp,dword ptr[DeltaV]
11282 
11283                 and             eax,[GHMaskShifted16]
11284                 and             ebx,[GWMaskShifted]
11285 
11286                 shl             ebp,cl
11287                 add             eax,ebx
11288 
11289                 mov             edx,dword ptr[Bucket2]
11290                 mov             esi,pTex
11291 
11292                 shr             eax,16
11293                 mov             dword ptr[DeltaV],ebp
11294 
11295                 mov             ebx,dword ptr[Bucket]
11296 
11297                 mov             ax,word ptr[2*eax+esi]
11298                 add             edx,dword ptr[DeltaV]
11299 
11300                 xor             eax,0
11301                 mov             ecx,edx
11302 
11303                 mov             ebp,eax
11304                 add             ebx,dword ptr[DeltaU]
11305 
11306                 shr             ebp,1
11307                 and             ecx,[GHMaskShifted16]
11308 
11309                 rol             eax,16
11310                 mov             [CKeyTest],ebp
11311 
11312                 and             ebx,[GWMaskShifted]
11313 
11314                 xor             eax,0
11315                 add             ecx,ebx
11316 
11317                 add             edx,dword ptr[DeltaV]
11318                 mov             esi,pTex
11319 
11320                 shr             ecx,16
11321                 add             ebx,dword ptr[DeltaU]
11322 
11323                 mov             ax,word ptr[2*ecx+esi]
11324                 mov             ecx,edx
11325 
11326                 xor             eax,0
11327                 and             ecx,[GHMaskShifted16]
11328 
11329                 mov             esi,eax
11330                 mov             ebp,eax
11331 
11332                 and             esi,REDMASK2
11333                 and             ebp,GREENMASK2
11334 
11335                 mov             dword ptr[Red],esi
11336                 mov             dword ptr[Green],ebp
11337 
11338                 fild    qword ptr[Red]                  ; r    LB   LG   LR
11339 
11340                 mov             ebp,eax
11341                 shr             eax,1
11342 
11343                 fmul    st,st(3)                                ; R    LB   LG   LR
11344                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
11345 
11346                 and             [CKeyTest],eax
11347 
11348                 and             ebp,BLUEMASK
11349                 and             ebx,[GWMaskShifted]
11350 
11351                 mov             dword ptr[Blue],ebp
11352 
11353                 fmul    st,st(3)                                ; G    R    LB   LG   LR
11354                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
11355                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
11356                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
11357                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
11358                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
11359                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
11360                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
11361                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
11362                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
11363                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
11364                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
11365 
11366                 mov             eax,dword ptr[Bucket]
11367                 mov             ebp,dword ptr[Bucket2]
11368 
11369                 fstp    qword ptr[Bucket]               ; LB   LG   LR
11370                 fxch    st(1)
11371                 fadd    qword ptr[GreenDelta]
11372                 fxch    st(1)
11373                 fadd    qword ptr[BlueDelta]
11374                 fxch    st(2)
11375                 fadd    qword ptr[RedDelta]
11376                 fxch    st(2)
11377 
11378                 and             eax,REDMASK2
11379                 and             ebp,BLUEMASK
11380                 
11381                 mov             esi,dword ptr[Bucket]
11382                 or              ebp,eax
11383 
11384                 add             ecx,ebx
11385                 and             esi,GREENMASK2
11386 
11387                 shr             ecx,16
11388                 or              ebp,esi
11389 
11390                 xor             eax,0
11391                 mov             esi,pTex
11392 
11393                 rol             ebp,16
11394                 add             edx,dword ptr[DeltaV]
11395 
11396                 mov             ax,word ptr[2*ecx+esi]
11397                 mov             ecx,[ZVal]
11398 
11399                 mov             esi,[ZVal]
11400                 add             ecx,[ZDelta]
11401 
11402                 shr             esi,16
11403                 mov             [ZVal],ecx
11404 
11405                 dec             [CKeyTest]
11406                 jl              Skip0
11407 
11408                 mov             ecx,pZBufferPtr
11409 
11410                 cmp             si,word ptr[ecx+0]
11411                 jle             Skip0
11412 
11413                 mov             [edi+0],ebp
11414                 mov             word ptr[ecx+0],si
11415                 mov             word ptr[ecx+2],si
11416 
11417 Skip0:
11418                 mov             ecx,edx
11419 
11420                 mov             esi,pTex
11421                 xor             eax,0
11422 
11423                 add             ebx,dword ptr[DeltaU]
11424                 and             ecx,[GHMaskShifted16]
11425 
11426                 mov             ebp,eax
11427                 and             ebx,[GWMaskShifted]
11428 
11429                 shr             ebp,1
11430                 add             ecx,ebx
11431 
11432                 rol             eax,16
11433                 add             edx,dword ptr[DeltaV]
11434 
11435                 shr             ecx,16
11436                 add             ebx,dword ptr[DeltaU]
11437 
11438                 mov             ax,word ptr[2*ecx+esi]
11439                 mov             [CKeyTest],ebp
11440 
11441                 mov             ecx,edx
11442                 xor             eax,0
11443 
11444                 and             ecx,[GHMaskShifted16]
11445                 mov             esi,eax
11446 
11447                 mov             ebp,eax
11448                 and             esi,REDMASK2
11449 
11450                 and             ebp,GREENMASK2
11451                 mov             dword ptr[Red],esi
11452 
11453                 mov             dword ptr[Green],ebp
11455 
11456 
11457                 fild    qword ptr[Red]                  ; r    LB   LG   LR
11458 
11459                 mov             ebp,eax
11460                 shr             eax,1
11461 
11462                 fmul    st,st(3)                                ; R    LB   LG   LR
11463                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
11464 
11465                 and             [CKeyTest],eax
11466 
11467                 and             ebp,BLUEMASK
11468                 and             ebx,[GWMaskShifted]
11469 
11470                 mov             dword ptr[Blue],ebp
11471 
11472                 fmul    st,st(3)                                ; G    R    LB   LG   LR
11473                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
11474                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
11475                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
11476                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
11477                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
11478                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
11479                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
11480                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
11481                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
11482                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
11483                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
11484 
11485                 mov             eax,dword ptr[Bucket]
11486                 mov             ebp,dword ptr[Bucket2]
11487 
11488                 fstp    qword ptr[Bucket]               ; LB   LG   LR
11489                 fxch    st(1)
11490                 fadd    qword ptr[GreenDelta]
11491                 fxch    st(1)
11492                 fadd    qword ptr[BlueDelta]
11493                 fxch    st(2)
11494                 fadd    qword ptr[RedDelta]
11495                 fxch    st(2)
11496 
11497                 and             eax,REDMASK2
11498                 and             ebp,BLUEMASK
11499                 
11500                 mov             esi,dword ptr[Bucket]
11501                 or              ebp,eax
11502 
11503                 add             ecx,ebx
11504                 and             esi,GREENMASK2
11505 
11506                 shr             ecx,16
11507                 or              ebp,esi
11508 
11509                 xor             eax,0
11510                 mov             esi,pTex
11511 
11512                 rol             ebp,16
11513                 add             edx,dword ptr[DeltaV]
11514 
11515                 mov             ax,word ptr[2*ecx+esi]
11516                 mov             ecx,[ZVal]
11517 
11518                 mov             esi,[ZVal]
11519                 add             ecx,[ZDelta]
11520 
11521                 shr             esi,16
11522                 mov             [ZVal],ecx
11523 
11524                 dec             [CKeyTest]
11525                 jl              Skip1
11526 
11527                 mov             ecx,pZBufferPtr
11528 
11529                 cmp             si,word ptr[ecx+4]
11530                 jle             Skip1
11531 
11532                 mov             [edi+4],ebp
11533                 mov             word ptr[ecx+4],si
11534                 mov             word ptr[ecx+6],si
11535 
11536 Skip1:
11537                 mov             ecx,edx
11538 
11539                 mov             esi,pTex
11540                 xor             eax,0
11541 
11542                 add             ebx,dword ptr[DeltaU]
11543                 and             ecx,[GHMaskShifted16]
11544 
11545                 mov             ebp,eax
11546                 and             ebx,[GWMaskShifted]
11547 
11548                 shr             ebp,1
11549                 add             ecx,ebx
11550 
11551                 rol             eax,16
11552                 add             edx,dword ptr[DeltaV]
11553 
11554                 shr             ecx,16
11555                 add             ebx,dword ptr[DeltaU]
11556 
11557                 mov             ax,word ptr[2*ecx+esi]
11558                 mov             [CKeyTest],ebp
11559 
11560                 mov             ecx,edx
11561                 xor             eax,0
11562 
11563                 and             ecx,[GHMaskShifted16]
11564                 mov             esi,eax
11565 
11566                 mov             ebp,eax
11567                 and             esi,REDMASK2
11568 
11569                 and             ebp,GREENMASK2
11570                 mov             dword ptr[Red],esi
11571 
11572                 mov             dword ptr[Green],ebp
11574 
11575 
11576                 fild    qword ptr[Red]                  ; r    LB   LG   LR
11577 
11578                 mov             ebp,eax
11579                 shr             eax,1
11580 
11581                 fmul    st,st(3)                                ; R    LB   LG   LR
11582                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
11583 
11584                 and             [CKeyTest],eax
11585 
11586                 and             ebp,BLUEMASK
11587                 and             ebx,[GWMaskShifted]
11588 
11589                 mov             dword ptr[Blue],ebp
11590 
11591                 fmul    st,st(3)                                ; G    R    LB   LG   LR
11592                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
11593                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
11594                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
11595                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
11596                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
11597                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
11598                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
11599                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
11600                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
11601                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
11602                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
11603 
11604                 mov             eax,dword ptr[Bucket]
11605                 mov             ebp,dword ptr[Bucket2]
11606 
11607                 fstp    qword ptr[Bucket]               ; LB   LG   LR
11608                 fxch    st(1)
11609                 fadd    qword ptr[GreenDelta]
11610                 fxch    st(1)
11611                 fadd    qword ptr[BlueDelta]
11612                 fxch    st(2)
11613                 fadd    qword ptr[RedDelta]
11614                 fxch    st(2)
11615 
11616                 and             eax,REDMASK2
11617                 and             ebp,BLUEMASK
11618                 
11619                 mov             esi,dword ptr[Bucket]
11620                 or              ebp,eax
11621 
11622                 add             ecx,ebx
11623                 and             esi,GREENMASK2
11624 
11625                 shr             ecx,16
11626                 or              ebp,esi
11627 
11628                 xor             eax,0
11629                 mov             esi,pTex
11630 
11631                 rol             ebp,16
11632                 add             edx,dword ptr[DeltaV]
11633 
11634                 mov             ax,word ptr[2*ecx+esi]
11635                 mov             ecx,[ZVal]
11636 
11637                 mov             esi,[ZVal]
11638                 add             ecx,[ZDelta]
11639 
11640                 shr             esi,16
11641                 mov             [ZVal],ecx
11642 
11643                 dec             [CKeyTest]
11644                 jl              Skip2
11645 
11646                 mov             ecx,pZBufferPtr
11647 
11648                 cmp             si,word ptr[ecx+8]
11649                 jle             Skip2
11650 
11651                 mov             [edi+8],ebp
11652                 mov             word ptr[ecx+8],si
11653                 mov             word ptr[ecx+10],si
11654 
11655 Skip2:
11656                 mov             ecx,edx
11657 
11658                 mov             esi,pTex
11659                 xor             eax,0
11660 
11661                 add             ebx,dword ptr[DeltaU]
11662                 and             ecx,[GHMaskShifted16]
11663 
11664                 mov             ebp,eax
11665                 and             ebx,[GWMaskShifted]
11666 
11667                 shr             ebp,1
11668                 add             ecx,ebx
11669 
11670                 rol             eax,16
11671                 add             edx,dword ptr[DeltaV]
11672 
11673                 shr             ecx,16
11674                 add             ebx,dword ptr[DeltaU]
11675 
11676                 mov             ax,word ptr[2*ecx+esi]
11677                 mov             [CKeyTest],ebp
11678 
11679                 mov             ecx,edx
11680                 xor             eax,0
11681 
11682                 and             ecx,[GHMaskShifted16]
11683                 mov             esi,eax
11684 
11685                 mov             ebp,eax
11686                 and             esi,REDMASK2
11687 
11688                 and             ebp,GREENMASK2
11689                 mov             dword ptr[Red],esi
11690 
11691                 mov             dword ptr[Green],ebp
11692                 add             ebx,dword ptr[DeltaU]
11694 
11695 
11696                 fild    qword ptr[Red]                  ; r    LB   LG   LR
11697 
11698                 mov             ebp,eax
11699                 shr             eax,1
11700 
11701                 fmul    st,st(3)                                ; R    LB   LG   LR
11702                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
11703 
11704                 and             [CKeyTest],eax
11705 
11706                 and             ebp,BLUEMASK
11707                 and             ebx,[GWMaskShifted]
11708 
11709                 mov             dword ptr[Blue],ebp
11710 
11711                 fmul    st,st(3)                                ; G    R    LB   LG   LR
11712                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
11713                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
11714                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
11715                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
11716                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
11717                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
11718                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
11719                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
11720                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
11721                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
11722                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
11723 
11724                 mov             eax,dword ptr[Bucket]
11725                 mov             ebp,dword ptr[Bucket2]
11726 
11727                 fstp    qword ptr[Bucket]               ; LB   LG   LR
11728                 fxch    st(1)
11729                 fadd    qword ptr[GreenDelta]
11730                 fxch    st(1)
11731                 fadd    qword ptr[BlueDelta]
11732                 fxch    st(2)
11733                 fadd    qword ptr[RedDelta]
11734                 fxch    st(2)
11735 
11736                 and             eax,REDMASK2
11737                 and             ebp,BLUEMASK
11738                 
11739                 mov             esi,dword ptr[Bucket]
11740                 or              ebp,eax
11741 
11742                 add             ecx,ebx
11743                 and             esi,GREENMASK2
11744 
11745                 shr             ecx,16
11746                 or              ebp,esi
11747 
11748                 xor             eax,0
11749                 mov             esi,pTex
11750 
11751                 rol             ebp,16
11752                 add             edx,dword ptr[DeltaV]
11753 
11754                 mov             ax,word ptr[2*ecx+esi]
11755                 mov             ecx,[ZVal]
11756 
11757                 mov             esi,[ZVal]
11758                 add             ecx,[ZDelta]
11759 
11760                 shr             esi,16
11761                 mov             [ZVal],ecx
11762 
11763                 dec             [CKeyTest]
11764                 jl              Skip3
11765 
11766                 mov             ecx,pZBufferPtr
11767 
11768                 cmp             si,word ptr[ecx+12]
11769                 jle             Skip3
11770 
11771                 mov             [edi+12],ebp
11772                 mov             word ptr[ecx+12],si
11773                 mov             word ptr[ecx+14],si
11774 
11775 Skip3:
11776                 mov             ecx,edx
11777 
11778                 mov             esi,pTex
11779                 xor             eax,0
11780 
11781                 add             ebx,dword ptr[DeltaU]
11782                 and             ecx,[GHMaskShifted16]
11783 
11784                 mov             ebp,eax
11785                 and             ebx,[GWMaskShifted]
11786 
11787                 shr             ebp,1
11788                 add             ecx,ebx
11789 
11790                 rol             eax,16
11791                 add             edx,dword ptr[DeltaV]
11792 
11793                 shr             ecx,16
11794                 add             ebx,dword ptr[DeltaU]
11795 
11796                 mov             ax,word ptr[2*ecx+esi]
11797                 mov             [CKeyTest],ebp
11798 
11799                 mov             ecx,edx
11800                 xor             eax,0
11801 
11802                 and             ecx,[GHMaskShifted16]
11803                 mov             esi,eax
11804 
11805                 mov             ebp,eax
11806                 and             esi,REDMASK2
11807 
11808                 and             ebp,GREENMASK2
11809                 mov             dword ptr[Red],esi
11810 
11811                 mov             dword ptr[Green],ebp
11812                 add             ebx,dword ptr[DeltaU]
11814 
11815 
11816                 fild    qword ptr[Red]                  ; r    LB   LG   LR
11817 
11818                 mov             ebp,eax
11819                 shr             eax,1
11820 
11821                 fmul    st,st(3)                                ; R    LB   LG   LR
11822                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
11823 
11824                 and             [CKeyTest],eax
11825 
11826                 and             ebp,BLUEMASK
11827                 and             ebx,[GWMaskShifted]
11828 
11829                 mov             dword ptr[Blue],ebp
11830 
11831                 fmul    st,st(3)                                ; G    R    LB   LG   LR
11832                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
11833                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
11834                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
11835                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
11836                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
11837                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
11838                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
11839                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
11840                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
11841                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
11842                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
11843 
11844                 mov             eax,dword ptr[Bucket]
11845                 mov             ebp,dword ptr[Bucket2]
11846 
11847                 fstp    qword ptr[Bucket]               ; LB   LG   LR
11848                 fxch    st(1)
11849                 fadd    qword ptr[GreenDelta]
11850                 fxch    st(1)
11851                 fadd    qword ptr[BlueDelta]
11852                 fxch    st(2)
11853                 fadd    qword ptr[RedDelta]
11854                 fxch    st(2)
11855 
11856                 and             eax,REDMASK2
11857                 and             ebp,BLUEMASK
11858                 
11859                 mov             esi,dword ptr[Bucket]
11860                 or              ebp,eax
11861 
11862                 add             ecx,ebx
11863                 and             esi,GREENMASK2
11864 
11865                 shr             ecx,16
11866                 or              ebp,esi
11867 
11868                 xor             eax,0
11869                 mov             esi,pTex
11870 
11871                 rol             ebp,16
11872                 add             edx,dword ptr[DeltaV]
11873 
11874                 mov             ax,word ptr[2*ecx+esi]
11875                 mov             ecx,[ZVal]
11876 
11877                 mov             esi,[ZVal]
11878                 add             ecx,[ZDelta]
11879 
11880                 shr             esi,16
11881                 mov             [ZVal],ecx
11882 
11883                 dec             [CKeyTest]
11884                 jl              Skip4
11885 
11886                 mov             ecx,pZBufferPtr
11887 
11888                 cmp             si,word ptr[ecx+16]
11889                 jle             Skip4
11890 
11891                 mov             [edi+16],ebp
11892                 mov             word ptr[ecx+16],si
11893                 mov             word ptr[ecx+18],si
11894 
11895 Skip4:
11896                 mov             ecx,edx
11897 
11898                 mov             esi,pTex
11899                 xor             eax,0
11900 
11901                 add             ebx,dword ptr[DeltaU]
11902                 and             ecx,[GHMaskShifted16]
11903 
11904                 mov             ebp,eax
11905                 and             ebx,[GWMaskShifted]
11906 
11907                 shr             ebp,1
11908                 add             ecx,ebx
11909 
11910                 rol             eax,16
11911                 add             edx,dword ptr[DeltaV]
11912 
11913                 shr             ecx,16
11914                 add             ebx,dword ptr[DeltaU]
11915 
11916                 mov             ax,word ptr[2*ecx+esi]
11917                 mov             [CKeyTest],ebp
11918 
11919                 mov             ecx,edx
11920                 xor             eax,0
11921 
11922                 and             ecx,[GHMaskShifted16]
11923                 mov             esi,eax
11924 
11925                 mov             ebp,eax
11926                 and             esi,REDMASK2
11927 
11928                 and             ebp,GREENMASK2
11929                 mov             dword ptr[Red],esi
11930 
11931                 mov             dword ptr[Green],ebp
11932                 add             ebx,dword ptr[DeltaU]
11934 
11935 
11936                 fild    qword ptr[Red]                  ; r    LB   LG   LR
11937 
11938                 mov             ebp,eax
11939                 shr             eax,1
11940 
11941                 fmul    st,st(3)                                ; R    LB   LG   LR
11942                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
11943 
11944                 and             [CKeyTest],eax
11945 
11946                 and             ebp,BLUEMASK
11947                 and             ebx,[GWMaskShifted]
11948 
11949                 mov             dword ptr[Blue],ebp
11950 
11951                 fmul    st,st(3)                                ; G    R    LB   LG   LR
11952                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
11953                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
11954                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
11955                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
11956                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
11957                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
11958                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
11959                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
11960                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
11961                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
11962                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
11963 
11964                 mov             eax,dword ptr[Bucket]
11965                 mov             ebp,dword ptr[Bucket2]
11966 
11967                 fstp    qword ptr[Bucket]               ; LB   LG   LR
11968                 fxch    st(1)
11969                 fadd    qword ptr[GreenDelta]
11970                 fxch    st(1)
11971                 fadd    qword ptr[BlueDelta]
11972                 fxch    st(2)
11973                 fadd    qword ptr[RedDelta]
11974                 fxch    st(2)
11975 
11976                 and             eax,REDMASK2
11977                 and             ebp,BLUEMASK
11978                 
11979                 mov             esi,dword ptr[Bucket]
11980                 or              ebp,eax
11981 
11982                 add             ecx,ebx
11983                 and             esi,GREENMASK2
11984 
11985                 shr             ecx,16
11986                 or              ebp,esi
11987 
11988                 xor             eax,0
11989                 mov             esi,pTex
11990 
11991                 rol             ebp,16
11992                 add             edx,dword ptr[DeltaV]
11993 
11994                 mov             ax,word ptr[2*ecx+esi]
11995                 mov             ecx,[ZVal]
11996 
11997                 mov             esi,[ZVal]
11998                 add             ecx,[ZDelta]
11999 
12000                 shr             esi,16
12001                 mov             [ZVal],ecx
12002 
12003                 dec             [CKeyTest]
12004                 jl              Skip5
12005 
12006                 mov             ecx,pZBufferPtr
12007 
12008                 cmp             si,word ptr[ecx+20]
12009                 jle             Skip5
12010 
12011                 mov             [edi+20],ebp
12012                 mov             word ptr[ecx+20],si
12013                 mov             word ptr[ecx+22],si
12014 
12015 Skip5:
12016                 mov             ecx,edx
12017 
12018                 mov             esi,pTex
12019                 xor             eax,0
12020 
12021                 add             ebx,dword ptr[DeltaU]
12022                 and             ecx,[GHMaskShifted16]
12023 
12024                 mov             ebp,eax
12025                 and             ebx,[GWMaskShifted]
12026 
12027                 shr             ebp,1
12028                 add             ecx,ebx
12029 
12030                 rol             eax,16
12031                 add             edx,dword ptr[DeltaV]
12032 
12033                 shr             ecx,16
12034                 add             ebx,dword ptr[DeltaU]
12035 
12036                 mov             ax,word ptr[2*ecx+esi]
12037                 mov             [CKeyTest],ebp
12038 
12039                 mov             ecx,edx
12040                 xor             eax,0
12041 
12042                 and             ecx,[GHMaskShifted16]
12043                 mov             esi,eax
12044 
12045                 mov             ebp,eax
12046                 and             esi,REDMASK2
12047 
12048                 and             ebp,GREENMASK2
12049                 mov             dword ptr[Red],esi
12050 
12051                 mov             dword ptr[Green],ebp
12052                 add             ebx,dword ptr[DeltaU]
12054 
12055 
12056                 fild    qword ptr[Red]                  ; r    LB   LG   LR
12057 
12058                 mov             ebp,eax
12059                 shr             eax,1
12060 
12061                 fmul    st,st(3)                                ; R    LB   LG   LR
12062                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
12063 
12064                 and             [CKeyTest],eax
12065 
12066                 and             ebp,BLUEMASK
12067                 and             ebx,[GWMaskShifted]
12068 
12069                 mov             dword ptr[Blue],ebp
12070 
12071                 fmul    st,st(3)                                ; G    R    LB   LG   LR
12072                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
12073                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
12074                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
12075                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
12076                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
12077                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
12078                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
12079                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
12080                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
12081                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
12082                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
12083 
12084                 mov             eax,dword ptr[Bucket]
12085                 mov             ebp,dword ptr[Bucket2]
12086 
12087                 fstp    qword ptr[Bucket]               ; LB   LG   LR
12088                 fxch    st(1)
12089                 fadd    qword ptr[GreenDelta]
12090                 fxch    st(1)
12091                 fadd    qword ptr[BlueDelta]
12092                 fxch    st(2)
12093                 fadd    qword ptr[RedDelta]
12094                 fxch    st(2)
12095 
12096                 and             eax,REDMASK2
12097                 and             ebp,BLUEMASK
12098                 
12099                 mov             esi,dword ptr[Bucket]
12100                 or              ebp,eax
12101 
12102                 add             ecx,ebx
12103                 and             esi,GREENMASK2
12104 
12105                 shr             ecx,16
12106                 or              ebp,esi
12107 
12108                 xor             eax,0
12109                 mov             esi,pTex
12110 
12111                 rol             ebp,16
12112                 add             edx,dword ptr[DeltaV]
12113 
12114                 mov             ax,word ptr[2*ecx+esi]
12115                 mov             ecx,[ZVal]
12116 
12117                 mov             esi,[ZVal]
12118                 add             ecx,[ZDelta]
12119 
12120                 shr             esi,16
12121                 mov             [ZVal],ecx
12122 
12123                 dec             [CKeyTest]
12124                 jl              Skip6
12125 
12126                 mov             ecx,pZBufferPtr
12127 
12128                 cmp             si,word ptr[ecx+24]
12129                 jle             Skip6
12130 
12131                 mov             [edi+24],ebp
12132                 mov             word ptr[ecx+24],si
12133                 mov             word ptr[ecx+26],si
12134 
12135 Skip6:
12136                 mov             ecx,edx
12137 
12138                 mov             esi,pTex
12139                 xor             eax,0
12140 
12141                 add             ebx,dword ptr[DeltaU]
12142                 and             ecx,[GHMaskShifted16]
12143 
12144                 mov             ebp,eax
12145                 and             ebx,[GWMaskShifted]
12146 
12147                 shr             ebp,1
12148                 add             ecx,ebx
12149 
12150                 rol             eax,16
12151                 add             edx,dword ptr[DeltaV]
12152 
12153                 shr             ecx,16
12154                 add             ebx,dword ptr[DeltaU]
12155 
12156                 mov             ax,word ptr[2*ecx+esi]
12157                 mov             [CKeyTest],ebp
12158 
12159                 mov             ecx,edx
12160                 xor             eax,0
12161 
12162                 and             ecx,[GHMaskShifted16]
12163                 mov             esi,eax
12164 
12165                 mov             ebp,eax
12166                 and             esi,REDMASK2
12167 
12168                 and             ebp,GREENMASK2
12169                 mov             dword ptr[Red],esi
12170 
12171                 mov             dword ptr[Green],ebp
12172                 add             ebx,dword ptr[DeltaU]
12174                 fild    qword ptr[Red]                  ; r    LB   LG   LR
12175 
12176                 mov             ebp,eax
12177                 shr             eax,1
12178 
12179                 fmul    st,st(3)                                ; R    LB   LG   LR
12180                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
12181 
12182                 and             [CKeyTest],eax
12183 
12184                 and             ebp,BLUEMASK
12185                 and             ebx,[GWMaskShifted]
12186 
12187                 mov             dword ptr[Blue],ebp
12188 
12189                 fmul    st,st(3)                                ; G    R    LB   LG   LR
12190                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
12191                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
12192                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
12193                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
12194                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
12195                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
12196                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
12197                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
12198                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
12199                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
12200                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
12201 
12202                 mov             eax,dword ptr[Bucket]
12203                 mov             ebp,dword ptr[Bucket2]
12204 
12205                 fstp    qword ptr[Bucket]               ; LB   LG   LR
12206                 fadd    qword ptr[BlueDelta]
12207                 fistp   dword ptr[BB1]
12208                 fadd    qword ptr[GreenDelta]
12209                 fistp   dword ptr[GG1]
12210                 fadd    qword ptr[RedDelta]
12211                 fistp   dword ptr[RR1]
12212 
12213                 and             eax,REDMASK2
12214                 and             ebp,BLUEMASK
12215                 
12216                 mov             esi,dword ptr[Bucket]
12217                 or              ebp,eax
12218 
12219                 fstp    dword ptr[Bucket]
12220                 fstp    dword ptr[Bucket2]
12221                 fstp    dword ptr[Bucket]
12222 
12223                 and             esi,GREENMASK2
12224 
12225                 fld             dword ptr[FTemp5]
12226                 fld             dword ptr[FTemp4]
12227 
12228                 or              ebp,esi
12229 
12230                 fld             dword ptr[FTemp3]
12231                 fld             dword ptr[FTemp2]
12232 
12233                 rol             ebp,16
12234 
12235                 fld             dword ptr[FTemp1]
12236                 fld             dword ptr[FTemp0]
12237 
12238                 mov             eax,[CKeyTest]
12239                 mov             ecx,[ZVal]
12240 
12241                 mov             esi,[ZVal]
12242                 add             ecx,[ZDelta]
12243 
12244                 shr             esi,16
12245                 mov             [ZVal],ecx
12246 
12247                 dec             eax
12248                 jl              Skip7
12249 
12250                 mov             ecx,pZBufferPtr
12251 
12252                 cmp             si,word ptr[ecx+28]
12253                 jle             Skip7
12254 
12255                 mov             [edi+28],ebp
12256                 mov             word ptr[ecx+28],si
12257                 mov             word ptr[ecx+30],si
12258 
12259 Skip7:
12260                 pop             ebp
12261 
12262 
12263                 ; get corrected right side deltas ; st0  st1  st2  st3  st4  st5  st6  st7
12264                                                                                 ; ZR   UZR  ZRi  VZR  UL   VL
12265                 fld             st                                              ; ZR   ZR   UZR  ZRi  VZR  UL   VL
12266                 fmul    st,st(4)                                ; VR   ZR   UZR  ZRi  VZR  UL   VL
12267                 fxch    st(1)                                   ; ZR   VR   UZR  ZRi  VZR  UL   VL
12268                 fmul    st,st(2)                                ; UR   VR   UZR  ZRi  VZR  UL   VL
12269 
12270                 add             edi,32                                  ; move screen pointer to start of next aspan
12271                 add             [pZBufferPtr],32
12272                 dec             [NumASpans]                     ; dec num affine spans
12273                 jnz             SpanLoop16
12274 
12275 HandleLeftoverPixels16:
12276 
12277                 mov             esi,[pTex]
12278 
12279 
12280                 cmp             [RemainingCount],0
12281                 jz              FPUReturn16
12282 
12283                 //need one more stack spot
12284                 fstp    dword ptr[FloatTemp]    ; VR   UZR  ZRi  VZR  UL   VL
12285                 fld             st(4)                                   ; UL   VR   UZR  ZRi  VZR  UL   VL
12286                 fmul    [GLMapMulU]                             ; ULL  VR   UZR  ZRi  VZR  UL   VL
12287                 fld             st(5)                                   ; UL   ULL  VR   UZR  ZRi  VZR  UL   VL
12288                 fadd    qword ptr[MipMagic]             ; ULk  ULL  VR   UZR  ZRi  VZR  UL   VL
12289                 fxch    st(1)                                   ; ULL  ULk  VR   UZR  ZRi  VZR  UL   VL
12290                 fadd    qword ptr[MipMagic]             ; ULLk ULk  VR   UZR  ZRi  VZR  UL   VL
12291                 fxch    st(1)                                   ; ULk  ULLk VR   UZR  ZRi  VZR  UL   VL
12292                 fstp    qword ptr[Bucket]               ; ULLk VR   UZR  ZRi  VZR  UL   VL
12293                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
12294 
12295                 mov             ebx,dword ptr[Bucket]
12296                 mov             eax,dword ptr[Bucket2]
12297 
12298                 fld             st(5)                                   ; VL   VR   UZR  ZRi  VZR  UL   VL
12299                 fmul    [GLMapMulV]                             ; VLL  VR   UZR  ZRi  VZR  UL   VL
12300 
12301                 add             ebx,dword ptr[UAdjust]
12302                 add             eax,dword ptr[UAdjustL]
12303 
12304                 mov             [U1],ebx
12305                 mov             [UFixed],eax
12306 
12307                 fld             st(6)                                   ; VL   VLL  VR   UZR  ZRi  VZR  UL   VL
12308                 fadd    qword ptr[MipMagic]             ; VLk  VLL  VR   UZR  ZRi  VZR  UL   VL
12309                 fxch    st(1)                                   ; VLL  VLk  VR   UZR  ZRi  VZR  UL   VL
12310                 fadd    qword ptr[MipMagic]             ; VLLk VLk  VR   UZR  ZRi  VZR  UL   VL
12311                 fxch    st(1)                                   ; VLk  VLLk VR   UZR  ZRi  VZR  UL   VL
12312                 fstp    qword ptr[Bucket]               ; VLLk VR   UZR  ZRi  VZR  UL   VL
12313                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
12314 
12315                 mov             ebx,dword ptr[Bucket]
12316                 mov             eax,dword ptr[Bucket2]
12317 
12318                 fld             dword ptr[FloatTemp]    ; UR   VR   UZR  ZRi  VZR  UL   dV
12319 
12320                 add             ebx,dword ptr[VAdjust]
12321                 add             eax,dword ptr[VAdjustL]
12322 
12323                 mov             [V1],ebx
12324                 mov             [VFixed],eax
12325 
12326                 dec             [RemainingCount]
12327                 jz              OnePixelSpan16
12328 
12329 
12330                 //must get rid of this wasted time
12331                 fstp    [FloatTemp]                             ; inv. inv. inv. inv. UL   VL
12332                 fstp    [FloatTemp]                             ; inv. inv. inv. UL   VL
12333                 fstp    [FloatTemp]                             ; inv. inv. UL   VL
12334                 fstp    [FloatTemp]                             ; inv. UL   VL
12335                 fstp    [FloatTemp]                             ; UL   VL
12336                 fild    [y]                                             ; y    UL   VL
12337                 fild    [x2]                                    ; xr   y    UL   VL
12338 
12339                 fld             [UDivZStepY]                    ; UZdY xr   y    UL   VL
12340                 fld             [UDivZStepX]                    ; UZdX UZdY xr   y    UL   VL
12341                 fmul    st,st(2)                                ; UZX  UZdY xr   y    UL   VL
12342                 fld             [VDivZStepY]                    ; VZdY UZX  UZdY xr   y    UL   VL
12343                 fld             [VDivZStepX]                    ; VZdX VZdY UZX  UZdY xr   y    UL   VL
12344                 fxch    st(3)                                   ; UZdy VZdY UZX  VZdX xr   y    UL   VL
12345                 fmul    st,st(5)                                ; UZY  VZdY UZX  VZdX xr   y    UL   VL
12346                 fxch    st(2)                                   ; UZX  VZdY UZY  VZdX xr   y    UL   VL
12347                 fadd    [UDivZOrigin]                   ; UZXS VZdY UZY  VZdX xr   y    UL   VL
12348                 fxch    st(3)                                   ; VZdX VZdY UZY  UZXS xr   y    UL   VL
12349                 fmul    st,st(4)                                ; VZX  VZdY UZY  UZXS xr   y    UL   VL
12350                 fxch    st(2)                                   ; UZY  VZdY VZX  UZXS xr   y    UL   VL
12351                 faddp   st(3),st                                ; VZdY VZX  UZ   xr   y    UL   VL
12352                 fmul    st,st(4)                                ; VZY  VZX  UZ   xr   y    UL   VL
12353                 fxch    st(1)                                   ; VZX  VZY  UZ   xr   y    UL   VL
12354                 fadd    [VDivZOrigin]                   ; VZXS VZY  UZ   xr   y    UL   VL
12355                 fld             [ZiStepX]                               ; ZdX  VZXS VZY  UZ   xr   y    UL   VL
12356                 fmulp   st(4),st                                ; VZXS VZY  UZ   ZX   y    UL   VL
12357                 faddp   st(1),st                                ; VZ   UZ   ZX   y    UL   VL
12358                 fld             [ZiStepY]                               ; ZdY  VZ   UZ   ZX   y    UL   VL
12359                 fmulp   st(4),st                                ; VZ   UZ   ZX   ZY   UL   VL
12360                 fxch    st(2)                                   ; ZX   UZ   VZ   ZY   UL   VL
12361                 fadd    [ZiOrigin]                              ; ZXS  UZ   VZ   ZY   UL   VL
12362 
12363                 faddp   st(3),st                                ; UZ   VZ   Zi   UL   VL
12364                 fld1                                                    ; 1    UZ   VZ   Zi   UL   VL
12365                 fdiv    st,st(3)                                ; ZR   UZ   VZ   Zi   UL   VL
12366 
12367                 fld             st                                              ; ZR   ZR   UZ   VZ   Zi   UL   VL
12368                 fmul    st,st(3)                                ; VR   ZR   UZ   VZ   Zi   UL   VL
12369                 fxch    st(1)                                   ; ZR   VR   UZ   VZ   Zi   UL   VL
12370                 fmul    st,st(2)                                ; UR   VR   UZ   VZ   Zi   UL   VL
12371 
12372                 //lazy idiv below... should 1/int mul mul
12373 
12374                 ; calculate deltas                              ; st0  st1  st2  st3  st4  st5  st6  st7
12375                 fsubr   st(5),st                                ; UR   VR   inv. inv. inv. dU   VL
12376                 fxch    st(1)                                   ; VR   UR   inv. inv. inv. dU   VL
12377                 fsubr   st(6),st                                ; VR   UR   inv. inv. inv. dU   dV
12378                 fxch    st(6)                                   ; dV   UR   inv. inv. inv. dU   VR
12379                 fidiv   dword ptr[RemainingCount];dv   UR   inv. inv. inv. dU   VR
12380                 fadd    qword ptr[MipMagic]             ; dvk  UR   inv. inv. inv. dU   VR
12381                 fxch    st(5)                                   ; dU   UR   inv. inv. inv. dvk  VR
12382                 fidiv   dword ptr[RemainingCount];du   UR   inv. inv. inv. dvk  VR
12383                 fadd    qword ptr[MipMagic]             ; duk  UR   inv. inv. inv. dvk  VR
12384                 fxch    st(5)                                   ; dvk  UR   inv. inv. inv. duk  VR
12385                 fstp    qword ptr[DeltaV]               ; UR   inv. inv. inv. duk  VR
12386                 fxch    st(4)                                   ; duk  inv. inv. inv. UR   VR
12387                 fstp    qword ptr[DeltaU]               ; inv. inv. inv. UR   VR
12388                 fld             st(1)                                   ; inv. inv. inv. inv. UR   VR
12389                 fld             st(2)                                   ; inv. inv. inv. inv. inv. UR   VR
12390 
12391 OnePixelSpan16:
12392                 // Clamp U/V
12393                 mov             ebx,[UFixed]
12394                 cmp             ebx,MaxU
12395                 jle             TryClampU116
12396                 mov             ecx,MaxU
12397                 mov             dword ptr[UFixed],ecx
12398                 jmp             NoClampU116
12399 
12400 TryClampU116:
12401                 cmp             ebx,0
12402                 jge             NoClampU116
12403                 mov             dword ptr[UFixed],0
12404 NoClampU116:
12405                 mov             eax,[VFixed]
12406                 cmp             eax,MaxV
12407                 jle             TryClampV116
12408                 mov             ecx,MaxV
12409                 mov             dword ptr[VFixed],ecx
12410                 jmp             NoClampV116
12411 
12412 TryClampV116:
12413                 cmp             eax,0
12414                 jge             NoClampV116
12415                 mov             dword ptr[VFixed],0
12416 
12417 NoClampV116:
12418 
12419                 fstp    [FTemp0]
12420                 fstp    [FTemp1]
12421                 fstp    [FTemp2]
12422                 fstp    [FTemp3]
12423                 fstp    [FTemp4]
12424                 fstp    [FTemp5]
12425 
12426                 mov             ebx,dword ptr[U1]
12427                 mov             edx,dword ptr[V1]
12428 
12429                 fild    [RR1]                                   ; LR
12430                 fild    [GG1]                                   ; LG   LR
12431                 fild    [BB1]                                   ; LB   LG   LR
12432 
12433                 mov             ecx,[VShift]
12434                 add             edx,dword ptr[VAdjust2]
12435 
12436                 add             ebx,dword ptr[UAdjust2]
12437                 mov             eax,dword ptr[DeltaV]
12438 
12439                 shl             eax,cl
12440                 mov             esi,pTex
12441 
12442                 shl             edx,cl
12443                 mov             dword ptr[DeltaV],eax
12444 
12445                 mov             eax,[ZDelta]
12446                 mov             ecx,[ZVal]
12447 
12448                 sar             eax,1
12449                 push    ebp
12450 
12451                 mov             [ZDelta],eax
12452 
12453 LeftoverLoop16:
12454                 mov             eax,edx
12455                 and             ebx,[GWMaskShifted]
12456 
12457                 and             eax,[GHMaskShifted16]
12458 
12459                 add             eax,ebx
12460                 add             ebx,dword ptr[DeltaU]
12461 
12462                 shr             eax,16
12463                 add             edi,2
12464 
12465                 mov             ax,word ptr[2*eax+esi]
12466                 add             edx,dword ptr[DeltaV]
12467 
12468                 xor             eax,0
12469 
12470                 mov             esi,eax
12471                 mov             ebp,eax
12472 
12473                 and             esi,REDMASK2
12474                 and             ebp,GREENMASK2
12475 
12476                 mov             dword ptr[Red],esi
12477                 mov             dword ptr[Green],ebp
12478 
12479                 fild    qword ptr[Red]                  ; r    LB   LG   LR
12480 
12481                 mov             ebp,eax
12482                 shr             eax,1
12483 
12484                 fmul    st,st(3)                                ; R    LB   LG   LR
12485                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
12486 
12487                 and             ebp,BLUEMASK
12488                 mov             [CKeyTest],eax
12489 
12490                 mov             dword ptr[Blue],ebp
12491 
12492                 fmul    st,st(3)                                ; G    R    LB   LG   LR
12493                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
12494                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
12495                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
12496                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
12497                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
12498                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
12499                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
12500                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
12501                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
12502                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
12503                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
12504 
12505                 mov             eax,dword ptr[Bucket]
12506                 mov             ebp,dword ptr[Bucket2]
12507 
12508                 fstp    qword ptr[Bucket]               ; LB   LG   LR
12509 
12510                 and             eax,REDMASK2
12511                 and             ebp,BLUEMASK
12512                 
12513                 mov             esi,dword ptr[Bucket]
12514                 or              ebp,eax
12515 
12516                 and             esi,GREENMASK2
12517                 mov             eax,ecx
12518 
12519                 or              ebp,esi
12520 
12521                 shr             eax,16
12522                 mov             esi,pZBufferPtr
12523 
12524                 dec             [CKeyTest]
12525                 jl              SkipLeftOver
12526 
12527                 cmp             ax,word ptr[esi]
12528                 jle             SkipLeftOver
12529 
12530                 mov             word ptr[edi-2],bp
12531                 mov             word ptr[esi],ax
12532 
12533 SkipLeftOver:
12534                 add             ecx,[ZDelta]
12535                 mov             esi,pTex
12536 
12537                 add             pZBufferPtr,2
12538 
12539                 dec             [RemainingCount]
12540                 jge             LeftoverLoop16
12541 
12542                 pop             ebp
12543 
12544 
12545 FPUReturn16:
12546                 ffree   st(0)
12547                 ffree   st(1)
12548                 ffree   st(2)
12549                 ffree   st(3)
12550                 ffree   st(4)
12551                 ffree   st(5)
12552                 ffree   st(6)
12553 
12554 Return16:
12555                 pop             edi
12556                 pop             esi
12557                 pop             ecx
12558                 pop             ebx
12559         }
12560 }

void DrawSpan16_AsmGouraudZWrite555X86FPU int32  x1,
int32  x2,
int32  y,
int32  r1,
int32  g1,
int32  b1,
int32  r2,
int32  g2,
int32  b2
 

Definition at line 8180 of file x86span555.c.

References B, BB1, Blue, BlueDelta, BLUEMASK, Bucket, Bucket2, DeltaU, DeltaV, Dest, FloatTemp, FTemp0, FTemp1, FTemp2, FTemp3, FTemp4, FTemp5, G, GBitPtr16, GG1, GHMaskShifted16, GLMapMulU, GLMapMulV, Green, GreenDelta, GREENMASK2, GWMaskShifted, Magic, MaxU, MaxV, MipMagic, MipMagic2, NumASpans, or, pointer, pTex, pZBufferPtr, r, R, Red, RedDelta, REDMASK2, RemainingCount, RR1, TDest, Two, U1, UAdjust, UAdjust2, UAdjustL, UDivZ16StepX, UDivZOrigin, UDivZStepX, UDivZStepY, UFixed, V1, VAdjust, VAdjust2, VAdjustL, VDivZ16StepX, VDivZOrigin, VDivZStepX, VDivZStepY, VFixed, VShift, widTemp, y, ZBufferPrec, ZDelta, Zi, Zi16StepX, ZiOrigin, ZiStepX, ZiStepY, and ZVal.

Referenced by AddSpanDraw().

08181 {
08182         RR1     =r1;
08183         GG1     =g1;
08184         BB1     =b1;
08185         TDest   =Dest;
08186         _asm
08187         {
08188                 push    ebx
08189                 push    ecx
08190                 push    esi
08191                 push    edi
08192 
08193                 mov             eax,x1
08194                 mov             ecx,x2
08195                 sub             ecx,eax
08196                 jle             Return16
08197 
08198                 mov             edi,[GBitPtr16]
08199                 mov             pTex,edi
08200 
08201                 fild    [y]                                             ; y
08202                 mov             [widTemp],ecx
08203 
08204                 fild    [x1]                                            ; x    y
08205                 fild    [widTemp]
08206 
08207                 fld1
08208                 fdivrp  st(1),st
08209 
08210                 mov             esi,x1
08211                 mov             edi,[TDest]
08212 
08213                 shl             esi,1
08214                 mov             eax,ecx
08215 
08216                 add             edi,esi
08217                 add             pZBufferPtr,esi
08218 
08219                 mov             eax,ecx
08220                 shr             ecx,4
08221                 and             eax,15
08222                 _emit 75h
08223                 _emit 06h
08224                 dec             ecx
08225                 mov             eax,16
08226 
08227                 mov             [NumASpans],ecx
08228                 mov             [RemainingCount],eax
08229 
08230                 fild    [r2]
08231                 fisub   [r1]
08232                 fild    [g2]
08233                 fisub   [g1]
08234                 fild    [b2]
08235                 fisub   [b1]
08236                 fxch    st(2)
08237                 fmul    st,st(3)
08238                 fxch    st(1)
08239                 fmul    st,st(3)
08240                 fxch    st(2)
08241                 fmul    st,st(3)
08242                 frndint
08243                 fstp    qword ptr[BlueDelta]
08244                 frndint
08245                 fstp    qword ptr[RedDelta]
08246                 frndint
08247                 fstp    qword ptr[GreenDelta]
08248                 fstp    qword ptr[FTemp0]
08249 
08250 
08251                 //decoder won't keep up with these huge instructions
08252                 //need to find some int instructions to cram in here somewhere
08253                 fld             [UDivZStepY]                    ; UZdY x    y
08254                 fld             [UDivZStepX]                    ; UZdX UZdY x    y
08255                 fmul    st,st(2)                                ; UZX  UZdY x    y
08256                 fld             [VDivZStepY]                    ; VZdY UZX  UZdY x    y
08257                 fld             [VDivZStepX]                    ; VZdX VZdY UZX  UZdY x    y
08258                 fxch    st(3)                                   ; UZdy VZdY UZX  VZdX x    y
08259                 fmul    st,st(5)                                ; UZY  VZdY UZX  VZdX x    y
08260                 fxch    st(2)                                   ; UZX  VZdY UZY  VZdX x    y
08261                 fadd    [UDivZOrigin]                   ; UZXS VZdY UZY  VZdX x    y
08262                 fxch    st(3)                                   ; VZdX VZdY UZY  UZXS x    y
08263                 fmul    st,st(4)                                ; VZX  VZdY UZY  UZXS x    y
08264                 fxch    st(2)                                   ; UZY  VZdY VZX  UZXS x    y
08265                 faddp   st(3),st                                ; VZdY VZX  UZ   x    y
08266                 fmul    st,st(4)                                ; VZY  VZX  UZ   x    y
08267                 fxch    st(1)                                   ; VZX  VZY  UZ   x    y
08268                 fadd    [VDivZOrigin]                   ; VZXS VZY  UZ   x    y
08269                 fld             [ZiStepX]                               ; ZdX  VZXS VZY  UZ   x    y
08270 
08271                 //zbuffer step action
08272                 fld             [ZiStepX]
08273                 fmul    dword ptr[ZBufferPrec]
08274                 fmul    dword ptr[Two]
08275                 fistp   dword ptr[ZDelta]
08276 
08277                 fmulp   st(4),st                                ; VZXS VZY  UZ   ZX   y
08278                 faddp   st(1),st                                ; VZ   UZ   ZX   y
08279                 fld             [ZiStepY]                               ; ZdY  VZ   UZ   ZX   y
08280                 fmulp   st(4),st                                ; VZ   UZ   ZX   ZY
08281                 fxch    st(2)                                   ; ZX   UZ   VZ   ZY
08282                 fadd    [ZiOrigin]                              ; ZXS  UZ   VZ   ZY
08283 
08284                 //room for two cycles of int instructions here
08285 
08286                 faddp   st(3),st                                ; UZ   VZ   Zi
08287                 fld1                                                    ; 1    UZ   VZ   Zi
08288                 fdiv    st,st(3)                                ; ZL   UZ   VZ   Zi
08289 
08290                 //room for 18 cycles of int instructions here
08291 
08292                 fld             st                                              ; ZL   ZL   UZ   VZ   Zi
08293                 fmul    st,st(3)                                ; VL   ZL   UZ   VZ   Zi
08294                 fxch    st(4)                                   ; Zi   ZL   UZ   VZ   VL
08295 
08296                 //zbuffer action
08297                 fld             st
08298                 fmul    dword ptr[ZBufferPrec]
08299                 fistp   dword ptr[ZVal]
08300 
08301                 fadd    [Zi16StepX]                             ; ZRi  ZL   UZ   VZ   VL
08302                 fxch    st(1)                                   ; ZL   ZRi  UZ   VZ   VL
08303                 fmul    st,st(2)                                ; UL   ZRi  UZ   VZ   VL
08304                 fxch    st(3)                                   ; VZ   ZRi  UZ   UL   VL
08305                 fadd    [VDivZ16StepX]                  ; VZR  ZRi  UZ   UL   VL
08306                 fxch    st(2)                                   ; UZ   ZRi  VZR  UL   VL
08307                 fadd    [UDivZ16StepX]                  ; UZR  ZRi  VZR  UL   VL
08308                 fld1                                                    ; 1    UZR  ZRi  VZR  UL   VL
08309                 fdiv    st,st(2)                                ; ZR   UZR  ZRi  VZR  UL   VL
08310 
08311                 //room for 18 cycles of int stuff here
08312 
08313                 fld             st                                              ; ZR   ZR   UZR  ZRi  VZR  UL   VL
08314                 fmul    st,st(4)                                ; VR   ZR   UZR  ZRi  VZR  UL   VL
08315                 fxch    st(1)                                   ; ZR   VR   UZR  ZRi  VZR  UL   VL
08316                 //fmul stall one cycle
08317                 fmul    st,st(2)                                ; UR   VR   UZR  ZRi  VZR  UL   VL
08318 
08319                 test    ecx,ecx
08320                 jz              HandleLeftoverPixels16
08321 
08322 SpanLoop16:
08323                 //need one more stack spot
08324                 fstp    dword ptr[FloatTemp]    ; VR   UZR  ZRi  VZR  UL   VL
08325                 fld             st(4)                                   ; UL   VR   UZR  ZRi  VZR  UL   VL
08326                 fmul    [GLMapMulU]                             ; ULL  VR   UZR  ZRi  VZR  UL   VL
08327                 fld             st(5)                                   ; UL   ULL  VR   UZR  ZRi  VZR  UL   VL
08328                 fadd    qword ptr[MipMagic]             ; ULk  ULL  VR   UZR  ZRi  VZR  UL   VL
08329                 fxch    st(1)                                   ; ULL  ULk  VR   UZR  ZRi  VZR  UL   VL
08330                 fadd    qword ptr[MipMagic]             ; ULLk ULk  VR   UZR  ZRi  VZR  UL   VL
08331                 fxch    st(1)                                   ; ULk  ULLk VR   UZR  ZRi  VZR  UL   VL
08332                 fstp    qword ptr[Bucket]               ; ULLk VR   UZR  ZRi  VZR  UL   VL
08333                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
08334 
08335                 mov             ebx,dword ptr[Bucket]
08336                 mov             eax,dword ptr[Bucket2]
08337 
08338                 fld             st(5)                                   ; VL   VR   UZR  ZRi  VZR  UL   VL
08339                 fmul    [GLMapMulV]                             ; VLL  VR   UZR  ZRi  VZR  UL   VL
08340 
08341                 add             ebx,dword ptr[UAdjust]
08342                 add             eax,dword ptr[UAdjustL]
08343 
08344                 mov             [U1],ebx
08345                 mov             [UFixed],eax
08346 
08347                 fld             st(6)                                   ; VL   VLL  VR   UZR  ZRi  VZR  UL   VL
08348                 fadd    qword ptr[MipMagic]             ; VLk  VLL  VR   UZR  ZRi  VZR  UL   VL
08349                 fxch    st(1)                                   ; VLL  VLk  VR   UZR  ZRi  VZR  UL   VL
08350                 fadd    qword ptr[MipMagic]             ; VLLk VLk  VR   UZR  ZRi  VZR  UL   VL
08351                 fxch    st(1)                                   ; VLk  VLLk VR   UZR  ZRi  VZR  UL   VL
08352                 fstp    qword ptr[Bucket]               ; VLLk VR   UZR  ZRi  VZR  UL   VL
08353                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
08354                 fsubr   st(5),st                                ; VR   UZR  ZRi  VZR  UL   dV
08355 
08356                 mov             ebx,dword ptr[Bucket]
08357                 mov             eax,dword ptr[Bucket2]
08358 
08359                 fld             dword ptr[FloatTemp]    ; UR   VR   UZR  ZRi  VZR  UL   dV
08360 
08361                 add             ebx,dword ptr[VAdjust]
08362                 add             eax,dword ptr[VAdjustL]
08363 
08364                 mov             [V1],ebx
08365                 mov             [VFixed],eax
08366 
08367                 fsubr   st(5),st                                ; UR   VR   UZR  ZRi  VZR  dU   dV
08368                 fxch    st(6)                                   ; dV   VR   UZR  ZRi  VZR  dU   UR
08369                 fadd    qword ptr[MipMagic2]    ; dVk  VR   UZR  ZRi  VZR  dU   UR
08370                 fxch    st(5)                                   ; dU   VR   UZR  ZRi  VZR  dVk  UR
08371                 fadd    qword ptr[MipMagic2]    ; dUk  VR   UZR  ZRi  VZR  dVk  UR
08372                 fxch    st(5)                                   ; dVk  VR   UZR  ZRi  VZR  dUk  UR
08373                 fstp    qword ptr[DeltaV]               ; VR   UZR  ZRi  VZR  dUk  UR
08374                 fxch    st(5)                                   ; UR   UZR  ZRi  VZR  dUk  VR
08375                 //gotta do this to get em lined back up right
08376                 fxch    st(4)                                   ; dUk  UZR  ZRi  VZR  UR   VR
08377                 fstp    qword ptr[DeltaU]               ; UZR  ZRi  VZR  UR   VR
08378 
08379                 //right becomes left                    ; UZL  ZLi  VZL  UL   VL
08380                 fadd    [UDivZ16StepX]                  ; UZR  ZLi  VZL  UL   VL
08381                 fxch    st(1)                                   ; ZLi  UZR  VZL  UL   VL
08382                 fadd    [Zi16StepX]                             ; ZRi  UZR  VZL  UL   VL
08383                 fxch    st(2)                                   ; VZL  UZR  ZRi  UL   VL
08384                 fadd    [VDivZ16StepX]                  ; VZR  UZR  ZRi  UL   VL
08385                 fxch    st(2)                                   ; ZRi  UZR  VZR  UL   VL
08386                 fxch    st(1)                                   ; UZR  ZRi  VZR  UL   VL
08387                 fld1                                                    ; 1    UZR  ZRi  VZR  UL   VL
08388                 fdiv    st,st(2)                                ; ZR   UZR  ZRi  VZR  UL   VL
08389 
08390                 // Clamp U/V
08391                 mov             ebx,[UFixed]
08392                 cmp             ebx,MaxU
08393                 jle             TryClampU016
08394                 mov             ecx,MaxU
08395                 mov             dword ptr[UFixed],ecx
08396                 jmp             NoClampU016
08397 
08398 TryClampU016:
08399                 cmp             ebx,0
08400                 jge             NoClampU016
08401                 mov             dword ptr[UFixed],0
08402 NoClampU016:
08403                 mov             eax,[VFixed]
08404                 cmp             eax,MaxV
08405                 jle             TryClampV016
08406                 mov             ecx,MaxV
08407                 mov             dword ptr[VFixed],ecx
08408                 jmp             NoClampV016
08409 
08410 TryClampV016:
08411                 cmp             eax,0
08412                 jge             NoClampV016
08413                 mov             dword ptr[VFixed],0
08414 
08415 NoClampV016:
08416 
08417                 fstp    [FTemp0]                                ; UZR  ZRi  VZR  UL   VL
08418                 fstp    [FTemp1]                                ; ZRi  VZR  UL   VL
08419                 fstp    [FTemp2]                                ; VZR  UL   VL
08420                 fstp    [FTemp3]                                ; UL   VL
08421                 fstp    [FTemp4]                                ; VL
08422                 fstp    [FTemp5]                                ; 
08423 
08424 
08425                 fild    dword ptr[RR1]                  ; LR
08426                 fild    dword ptr[GG1]                  ; LG   LR
08427                 fild    dword ptr[BB1]                  ; LB   LG   LR
08428                 
08429                 
08430                 mov             ebx,dword ptr[U1]
08431                 mov             eax,dword ptr[V1]
08432 
08433                 add             ebx,dword ptr[UAdjust2]
08434                 add             eax,dword ptr[VAdjust2]
08435 
08436                 mov             ecx,[VShift]
08437                 mov             dword ptr[Bucket],ebx
08438 
08439                 shl             eax,cl
08440 
08441                 push    ebp
08442 
08443                 mov             dword ptr[Bucket2],eax
08444                 mov             ebp,dword ptr[DeltaV]
08445 
08446                 and             eax,[GHMaskShifted16]
08447                 and             ebx,[GWMaskShifted]
08448 
08449                 shl             ebp,cl
08450                 add             eax,ebx
08451 
08452                 mov             edx,dword ptr[Bucket2]
08453                 mov             esi,pTex
08454 
08455                 shr             eax,16
08456                 mov             dword ptr[DeltaV],ebp
08457 
08458                 mov             ebx,dword ptr[Bucket]
08459 
08460                 mov             ax,word ptr[2*eax+esi]
08461                 add             edx,dword ptr[DeltaV]
08462 
08463                 xor             eax,0
08464                 mov             ecx,edx
08465 
08466                 add             ebx,dword ptr[DeltaU]
08467                 and             ecx,[GHMaskShifted16]
08468 
08469                 rol             eax,16
08470                 and             ebx,[GWMaskShifted]
08471 
08472                 xor             eax,0
08473                 add             ecx,ebx
08474 
08475                 add             edx,dword ptr[DeltaV]
08476                 mov             esi,pTex
08477 
08478                 shr             ecx,16
08479                 add             ebx,dword ptr[DeltaU]
08480 
08481                 mov             ax,word ptr[2*ecx+esi]
08482                 mov             ecx,edx
08483 
08484                 xor             eax,0
08485                 and             ecx,[GHMaskShifted16]
08486 
08487                 mov             esi,eax
08488                 mov             ebp,eax
08489 
08490                 and             esi,REDMASK2
08491                 and             ebp,GREENMASK2
08492 
08493                 mov             dword ptr[Red],esi
08494                 mov             dword ptr[Green],ebp
08495 
08496                 fild    qword ptr[Red]                  ; r    LB   LG   LR
08497 
08498                 mov             ebp,eax
08499 
08500                 fmul    st,st(3)                                ; R    LB   LG   LR
08501                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
08502 
08503                 and             ebp,BLUEMASK
08504                 and             ebx,[GWMaskShifted]
08505 
08506                 mov             dword ptr[Blue],ebp
08507 
08508                 fmul    st,st(3)                                ; G    R    LB   LG   LR
08509                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
08510                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
08511                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
08512                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
08513                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
08514                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
08515                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
08516                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
08517                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
08518                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
08519                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
08520 
08521                 mov             eax,dword ptr[Bucket]
08522                 mov             ebp,dword ptr[Bucket2]
08523 
08524                 fstp    qword ptr[Bucket]               ; LB   LG   LR
08525                 fxch    st(1)
08526                 fadd    qword ptr[GreenDelta]
08527                 fxch    st(1)
08528                 fadd    qword ptr[BlueDelta]
08529                 fxch    st(2)
08530                 fadd    qword ptr[RedDelta]
08531                 fxch    st(2)
08532 
08533                 and             eax,REDMASK2
08534                 and             ebp,BLUEMASK
08535                 
08536                 mov             esi,dword ptr[Bucket]
08537                 or              ebp,eax
08538 
08539                 add             ecx,ebx
08540                 and             esi,GREENMASK2
08541 
08542                 shr             ecx,16
08543                 or              ebp,esi
08544 
08545                 xor             eax,0
08546                 mov             esi,pTex
08547 
08548                 rol             ebp,16
08549                 add             edx,dword ptr[DeltaV]
08550 
08551                 mov             ax,word ptr[2*ecx+esi]
08552                 mov             ecx,[ZVal]
08553 
08554                 mov             esi,[ZVal]
08555                 add             ecx,[ZDelta]
08556 
08557                 shr             esi,16
08558                 mov             [ZVal],ecx
08559 
08560                 mov             ecx,pZBufferPtr
08561 
08562                 mov             [edi+0],ebp
08563                 mov             word ptr[ecx+0],si
08564                 mov             word ptr[ecx+2],si
08565 
08566                 mov             ecx,edx
08567                 mov             esi,pTex
08568 
08569                 add             ebx,dword ptr[DeltaU]
08570                 and             ecx,[GHMaskShifted16]
08571 
08572                 and             ebx,[GWMaskShifted]
08573                 xor             eax,0
08574 
08575                 add             ecx,ebx
08576 
08577                 rol             eax,16
08578                 add             edx,dword ptr[DeltaV]
08579 
08580                 shr             ecx,16
08581                 add             ebx,dword ptr[DeltaU]
08582 
08583                 mov             ax,word ptr[2*ecx+esi]
08584 
08585                 mov             ecx,edx
08586                 xor             eax,0
08587 
08588                 and             ecx,[GHMaskShifted16]
08589                 mov             esi,eax
08590 
08591                 mov             ebp,eax
08592                 and             esi,REDMASK2
08593 
08594                 and             ebp,GREENMASK2
08595                 mov             dword ptr[Red],esi
08596 
08597                 mov             dword ptr[Green],ebp
08599 
08600 
08601                 fild    qword ptr[Red]                  ; r    LB   LG   LR
08602 
08603                 mov             ebp,eax
08604 
08605                 fmul    st,st(3)                                ; R    LB   LG   LR
08606                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
08607 
08608                 and             ebp,BLUEMASK
08609                 and             ebx,[GWMaskShifted]
08610 
08611                 mov             dword ptr[Blue],ebp
08612 
08613                 fmul    st,st(3)                                ; G    R    LB   LG   LR
08614                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
08615                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
08616                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
08617                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
08618                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
08619                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
08620                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
08621                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
08622                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
08623                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
08624                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
08625 
08626                 mov             eax,dword ptr[Bucket]
08627                 mov             ebp,dword ptr[Bucket2]
08628 
08629                 fstp    qword ptr[Bucket]               ; LB   LG   LR
08630                 fxch    st(1)
08631                 fadd    qword ptr[GreenDelta]
08632                 fxch    st(1)
08633                 fadd    qword ptr[BlueDelta]
08634                 fxch    st(2)
08635                 fadd    qword ptr[RedDelta]
08636                 fxch    st(2)
08637 
08638                 and             eax,REDMASK2
08639                 and             ebp,BLUEMASK
08640                 
08641                 mov             esi,dword ptr[Bucket]
08642                 or              ebp,eax
08643 
08644                 add             ecx,ebx
08645                 and             esi,GREENMASK2
08646 
08647                 shr             ecx,16
08648                 or              ebp,esi
08649 
08650                 xor             eax,0
08651                 mov             esi,pTex
08652 
08653                 rol             ebp,16
08654                 add             edx,dword ptr[DeltaV]
08655 
08656                 mov             ax,word ptr[2*ecx+esi]
08657                 mov             ecx,[ZVal]
08658 
08659                 mov             esi,[ZVal]
08660                 add             ecx,[ZDelta]
08661 
08662                 shr             esi,16
08663                 mov             [ZVal],ecx
08664 
08665                 mov             ecx,pZBufferPtr
08666 
08667 
08668                 mov             [edi+4],ebp
08669                 mov             word ptr[ecx+4],si
08670                 mov             word ptr[ecx+6],si
08671 
08672                 mov             ecx,edx
08673                 mov             esi,pTex
08674 
08675                 add             ebx,dword ptr[DeltaU]
08676                 and             ecx,[GHMaskShifted16]
08677 
08678                 and             ebx,[GWMaskShifted]
08679                 xor             eax,0
08680 
08681                 add             ecx,ebx
08682 
08683                 rol             eax,16
08684                 add             edx,dword ptr[DeltaV]
08685 
08686                 shr             ecx,16
08687                 add             ebx,dword ptr[DeltaU]
08688 
08689                 mov             ax,word ptr[2*ecx+esi]
08690 
08691                 mov             ecx,edx
08692                 xor             eax,0
08693 
08694                 and             ecx,[GHMaskShifted16]
08695                 mov             esi,eax
08696 
08697                 mov             ebp,eax
08698                 and             esi,REDMASK2
08699 
08700                 and             ebp,GREENMASK2
08701                 mov             dword ptr[Red],esi
08702 
08703                 mov             dword ptr[Green],ebp
08705 
08706 
08707                 fild    qword ptr[Red]                  ; r    LB   LG   LR
08708 
08709                 mov             ebp,eax
08710 
08711                 fmul    st,st(3)                                ; R    LB   LG   LR
08712                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
08713 
08714                 and             ebp,BLUEMASK
08715                 and             ebx,[GWMaskShifted]
08716 
08717                 mov             dword ptr[Blue],ebp
08718 
08719                 fmul    st,st(3)                                ; G    R    LB   LG   LR
08720                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
08721                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
08722                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
08723                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
08724                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
08725                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
08726                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
08727                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
08728                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
08729                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
08730                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
08731 
08732                 mov             eax,dword ptr[Bucket]
08733                 mov             ebp,dword ptr[Bucket2]
08734 
08735                 fstp    qword ptr[Bucket]               ; LB   LG   LR
08736                 fxch    st(1)
08737                 fadd    qword ptr[GreenDelta]
08738                 fxch    st(1)
08739                 fadd    qword ptr[BlueDelta]
08740                 fxch    st(2)
08741                 fadd    qword ptr[RedDelta]
08742                 fxch    st(2)
08743 
08744                 and             eax,REDMASK2
08745                 and             ebp,BLUEMASK
08746                 
08747                 mov             esi,dword ptr[Bucket]
08748                 or              ebp,eax
08749 
08750                 add             ecx,ebx
08751                 and             esi,GREENMASK2
08752 
08753                 shr             ecx,16
08754                 or              ebp,esi
08755 
08756                 xor             eax,0
08757                 mov             esi,pTex
08758 
08759                 rol             ebp,16
08760                 add             edx,dword ptr[DeltaV]
08761 
08762                 mov             ax,word ptr[2*ecx+esi]
08763                 mov             ecx,[ZVal]
08764 
08765                 mov             esi,[ZVal]
08766                 add             ecx,[ZDelta]
08767 
08768                 shr             esi,16
08769                 mov             [ZVal],ecx
08770 
08771                 mov             ecx,pZBufferPtr
08772 
08773                 mov             [edi+8],ebp
08774                 mov             word ptr[ecx+8],si
08775                 mov             word ptr[ecx+10],si
08776 
08777                 mov             ecx,edx
08778                 mov             esi,pTex
08779 
08780                 add             ebx,dword ptr[DeltaU]
08781                 and             ecx,[GHMaskShifted16]
08782 
08783                 and             ebx,[GWMaskShifted]
08784                 xor             eax,0
08785 
08786                 add             ecx,ebx
08787 
08788                 shr             ecx,16
08789                 add             edx,dword ptr[DeltaV]
08790 
08791                 rol             eax,16
08792                 mov             ax,word ptr[2*ecx+esi]
08793 
08794                 mov             ecx,edx
08795                 xor             eax,0
08796 
08797                 and             ecx,[GHMaskShifted16]
08798                 mov             esi,eax
08799 
08800                 mov             ebp,eax
08801                 and             esi,REDMASK2
08802 
08803                 and             ebp,GREENMASK2
08804                 mov             dword ptr[Red],esi
08805 
08806                 mov             dword ptr[Green],ebp
08807                 add             ebx,dword ptr[DeltaU]
08809 
08810 
08811                 fild    qword ptr[Red]                  ; r    LB   LG   LR
08812 
08813                 mov             ebp,eax
08814 
08815                 fmul    st,st(3)                                ; R    LB   LG   LR
08816                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
08817 
08818                 and             ebp,BLUEMASK
08819                 and             ebx,[GWMaskShifted]
08820 
08821                 mov             dword ptr[Blue],ebp
08822 
08823                 fmul    st,st(3)                                ; G    R    LB   LG   LR
08824                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
08825                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
08826                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
08827                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
08828                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
08829                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
08830                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
08831                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
08832                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
08833                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
08834                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
08835 
08836                 mov             eax,dword ptr[Bucket]
08837                 mov             ebp,dword ptr[Bucket2]
08838 
08839                 fstp    qword ptr[Bucket]               ; LB   LG   LR
08840                 fxch    st(1)
08841                 fadd    qword ptr[GreenDelta]
08842                 fxch    st(1)
08843                 fadd    qword ptr[BlueDelta]
08844                 fxch    st(2)
08845                 fadd    qword ptr[RedDelta]
08846                 fxch    st(2)
08847 
08848                 and             eax,REDMASK2
08849                 and             ebp,BLUEMASK
08850                 
08851                 mov             esi,dword ptr[Bucket]
08852                 or              ebp,eax
08853 
08854                 add             ecx,ebx
08855                 and             esi,GREENMASK2
08856 
08857                 shr             ecx,16
08858                 or              ebp,esi
08859 
08860                 xor             eax,0
08861                 mov             esi,pTex
08862 
08863                 rol             ebp,16
08864                 add             edx,dword ptr[DeltaV]
08865 
08866                 mov             ax,word ptr[2*ecx+esi]
08867                 mov             ecx,[ZVal]
08868 
08869                 mov             esi,[ZVal]
08870                 add             ecx,[ZDelta]
08871 
08872                 shr             esi,16
08873                 mov             [ZVal],ecx
08874 
08875                 mov             ecx,pZBufferPtr
08876 
08877                 mov             [edi+12],ebp
08878                 mov             word ptr[ecx+12],si
08879                 mov             word ptr[ecx+14],si
08880 
08881                 mov             ecx,edx
08882                 mov             esi,pTex
08883 
08884                 add             ebx,dword ptr[DeltaU]
08885                 and             ecx,[GHMaskShifted16]
08886 
08887                 and             ebx,[GWMaskShifted]
08888                 xor             eax,0
08889 
08890                 add             ecx,ebx
08891 
08892                 shr             ecx,16
08893                 add             edx,dword ptr[DeltaV]
08894 
08895                 rol             eax,16
08896                 mov             ax,word ptr[2*ecx+esi]
08897 
08898                 mov             ecx,edx
08899                 xor             eax,0
08900 
08901                 and             ecx,[GHMaskShifted16]
08902                 mov             esi,eax
08903 
08904                 mov             ebp,eax
08905                 and             esi,REDMASK2
08906 
08907                 and             ebp,GREENMASK2
08908                 mov             dword ptr[Red],esi
08909 
08910                 mov             dword ptr[Green],ebp
08911                 add             ebx,dword ptr[DeltaU]
08913 
08914 
08915                 fild    qword ptr[Red]                  ; r    LB   LG   LR
08916 
08917                 mov             ebp,eax
08918 
08919                 fmul    st,st(3)                                ; R    LB   LG   LR
08920                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
08921 
08922                 and             ebp,BLUEMASK
08923                 and             ebx,[GWMaskShifted]
08924 
08925                 mov             dword ptr[Blue],ebp
08926 
08927                 fmul    st,st(3)                                ; G    R    LB   LG   LR
08928                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
08929                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
08930                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
08931                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
08932                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
08933                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
08934                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
08935                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
08936                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
08937                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
08938                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
08939 
08940                 mov             eax,dword ptr[Bucket]
08941                 mov             ebp,dword ptr[Bucket2]
08942 
08943                 fstp    qword ptr[Bucket]               ; LB   LG   LR
08944                 fxch    st(1)
08945                 fadd    qword ptr[GreenDelta]
08946                 fxch    st(1)
08947                 fadd    qword ptr[BlueDelta]
08948                 fxch    st(2)
08949                 fadd    qword ptr[RedDelta]
08950                 fxch    st(2)
08951 
08952                 and             eax,REDMASK2
08953                 and             ebp,BLUEMASK
08954                 
08955                 mov             esi,dword ptr[Bucket]
08956                 or              ebp,eax
08957 
08958                 add             ecx,ebx
08959                 and             esi,GREENMASK2
08960 
08961                 shr             ecx,16
08962                 or              ebp,esi
08963 
08964                 xor             eax,0
08965                 mov             esi,pTex
08966 
08967                 rol             ebp,16
08968                 add             edx,dword ptr[DeltaV]
08969 
08970                 mov             ax,word ptr[2*ecx+esi]
08971                 mov             ecx,[ZVal]
08972 
08973                 mov             esi,[ZVal]
08974                 add             ecx,[ZDelta]
08975 
08976                 shr             esi,16
08977                 mov             [ZVal],ecx
08978 
08979                 mov             ecx,pZBufferPtr
08980 
08981                 mov             [edi+16],ebp
08982                 mov             word ptr[ecx+16],si
08983                 mov             word ptr[ecx+18],si
08984 
08985                 mov             ecx,edx
08986                 mov             esi,pTex
08987 
08988                 add             ebx,dword ptr[DeltaU]
08989                 and             ecx,[GHMaskShifted16]
08990 
08991                 and             ebx,[GWMaskShifted]
08992                 xor             eax,0
08993 
08994                 add             ecx,ebx
08995 
08996                 shr             ecx,16
08997                 add             edx,dword ptr[DeltaV]
08998 
08999                 rol             eax,16
09000                 mov             ax,word ptr[2*ecx+esi]
09001 
09002                 mov             ecx,edx
09003                 xor             eax,0
09004 
09005                 and             ecx,[GHMaskShifted16]
09006                 mov             esi,eax
09007 
09008                 mov             ebp,eax
09009                 and             esi,REDMASK2
09010 
09011                 and             ebp,GREENMASK2
09012                 mov             dword ptr[Red],esi
09013 
09014                 mov             dword ptr[Green],ebp
09015                 add             ebx,dword ptr[DeltaU]
09017 
09018 
09019                 fild    qword ptr[Red]                  ; r    LB   LG   LR
09020 
09021                 mov             ebp,eax
09022 
09023                 fmul    st,st(3)                                ; R    LB   LG   LR
09024                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
09025 
09026                 and             ebp,BLUEMASK
09027                 and             ebx,[GWMaskShifted]
09028 
09029                 mov             dword ptr[Blue],ebp
09030 
09031                 fmul    st,st(3)                                ; G    R    LB   LG   LR
09032                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
09033                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
09034                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
09035                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
09036                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
09037                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
09038                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
09039                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
09040                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
09041                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
09042                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
09043 
09044                 mov             eax,dword ptr[Bucket]
09045                 mov             ebp,dword ptr[Bucket2]
09046 
09047                 fstp    qword ptr[Bucket]               ; LB   LG   LR
09048                 fxch    st(1)
09049                 fadd    qword ptr[GreenDelta]
09050                 fxch    st(1)
09051                 fadd    qword ptr[BlueDelta]
09052                 fxch    st(2)
09053                 fadd    qword ptr[RedDelta]
09054                 fxch    st(2)
09055 
09056                 and             eax,REDMASK2
09057                 and             ebp,BLUEMASK
09058                 
09059                 mov             esi,dword ptr[Bucket]
09060                 or              ebp,eax
09061 
09062                 add             ecx,ebx
09063                 and             esi,GREENMASK2
09064 
09065                 shr             ecx,16
09066                 or              ebp,esi
09067 
09068                 xor             eax,0
09069                 mov             esi,pTex
09070 
09071                 rol             ebp,16
09072                 add             edx,dword ptr[DeltaV]
09073 
09074                 mov             ax,word ptr[2*ecx+esi]
09075                 mov             ecx,[ZVal]
09076 
09077                 mov             esi,[ZVal]
09078                 add             ecx,[ZDelta]
09079 
09080                 shr             esi,16
09081                 mov             [ZVal],ecx
09082 
09083                 mov             ecx,pZBufferPtr
09084 
09085                 mov             [edi+20],ebp
09086                 mov             word ptr[ecx+20],si
09087                 mov             word ptr[ecx+22],si
09088 
09089                 mov             ecx,edx
09090                 mov             esi,pTex
09091 
09092                 add             ebx,dword ptr[DeltaU]
09093                 and             ecx,[GHMaskShifted16]
09094 
09095                 and             ebx,[GWMaskShifted]
09096                 xor             eax,0
09097 
09098                 add             ecx,ebx
09099 
09100                 shr             ecx,16
09101                 add             edx,dword ptr[DeltaV]
09102 
09103                 rol             eax,16
09104                 mov             ax,word ptr[2*ecx+esi]
09105 
09106                 mov             ecx,edx
09107                 xor             eax,0
09108 
09109                 and             ecx,[GHMaskShifted16]
09110                 mov             esi,eax
09111 
09112                 mov             ebp,eax
09113                 and             esi,REDMASK2
09114 
09115                 and             ebp,GREENMASK2
09116                 mov             dword ptr[Red],esi
09117 
09118                 mov             dword ptr[Green],ebp
09119                 add             ebx,dword ptr[DeltaU]
09121 
09122 
09123                 fild    qword ptr[Red]                  ; r    LB   LG   LR
09124 
09125                 mov             ebp,eax
09126 
09127                 fmul    st,st(3)                                ; R    LB   LG   LR
09128                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
09129 
09130                 and             ebp,BLUEMASK
09131                 and             ebx,[GWMaskShifted]
09132 
09133                 mov             dword ptr[Blue],ebp
09134 
09135                 fmul    st,st(3)                                ; G    R    LB   LG   LR
09136                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
09137                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
09138                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
09139                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
09140                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
09141                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
09142                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
09143                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
09144                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
09145                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
09146                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
09147 
09148                 mov             eax,dword ptr[Bucket]
09149                 mov             ebp,dword ptr[Bucket2]
09150 
09151                 fstp    qword ptr[Bucket]               ; LB   LG   LR
09152                 fxch    st(1)
09153                 fadd    qword ptr[GreenDelta]
09154                 fxch    st(1)
09155                 fadd    qword ptr[BlueDelta]
09156                 fxch    st(2)
09157                 fadd    qword ptr[RedDelta]
09158                 fxch    st(2)
09159 
09160                 and             eax,REDMASK2
09161                 and             ebp,BLUEMASK
09162                 
09163                 mov             esi,dword ptr[Bucket]
09164                 or              ebp,eax
09165 
09166                 add             ecx,ebx
09167                 and             esi,GREENMASK2
09168 
09169                 shr             ecx,16
09170                 or              ebp,esi
09171 
09172                 xor             eax,0
09173                 mov             esi,pTex
09174 
09175                 rol             ebp,16
09176                 add             edx,dword ptr[DeltaV]
09177 
09178                 mov             ax,word ptr[2*ecx+esi]
09179                 mov             ecx,[ZVal]
09180 
09181                 mov             esi,[ZVal]
09182                 add             ecx,[ZDelta]
09183 
09184                 shr             esi,16
09185                 mov             [ZVal],ecx
09186 
09187                 mov             ecx,pZBufferPtr
09188 
09189                 mov             [edi+24],ebp
09190                 mov             word ptr[ecx+24],si
09191                 mov             word ptr[ecx+26],si
09192 
09193                 mov             ecx,edx
09194                 mov             esi,pTex
09195 
09196                 add             ebx,dword ptr[DeltaU]
09197                 and             ecx,[GHMaskShifted16]
09198 
09199                 and             ebx,[GWMaskShifted]
09200                 xor             eax,0
09201 
09202                 add             ecx,ebx
09203 
09204                 shr             ecx,16
09205                 add             edx,dword ptr[DeltaV]
09206 
09207                 rol             eax,16
09208                 mov             ax,word ptr[2*ecx+esi]
09209 
09210                 mov             ecx,edx
09211                 xor             eax,0
09212 
09213                 and             ecx,[GHMaskShifted16]
09214                 mov             esi,eax
09215 
09216                 mov             ebp,eax
09217                 and             esi,REDMASK2
09218 
09219                 and             ebp,GREENMASK2
09220                 mov             dword ptr[Red],esi
09221 
09222                 mov             dword ptr[Green],ebp
09223                 add             ebx,dword ptr[DeltaU]
09225                 fild    qword ptr[Red]                  ; r    LB   LG   LR
09226 
09227                 mov             ebp,eax
09228 
09229                 fmul    st,st(3)                                ; R    LB   LG   LR
09230                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
09231 
09232                 and             ebp,BLUEMASK
09233                 and             ebx,[GWMaskShifted]
09234 
09235                 mov             dword ptr[Blue],ebp
09236 
09237                 fmul    st,st(3)                                ; G    R    LB   LG   LR
09238                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
09239                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
09240                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
09241                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
09242                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
09243                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
09244                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
09245                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
09246                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
09247                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
09248                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
09249 
09250                 mov             eax,dword ptr[Bucket]
09251                 mov             ebp,dword ptr[Bucket2]
09252 
09253                 fstp    qword ptr[Bucket]               ; LB   LG   LR
09254                 fadd    qword ptr[BlueDelta]
09255                 fistp   dword ptr[BB1]
09256                 fadd    qword ptr[GreenDelta]
09257                 fistp   dword ptr[GG1]
09258                 fadd    qword ptr[RedDelta]
09259                 fistp   dword ptr[RR1]
09260 
09261                 and             eax,REDMASK2
09262                 and             ebp,BLUEMASK
09263                 
09264                 mov             esi,dword ptr[Bucket]
09265                 or              ebp,eax
09266 
09267                 fstp    dword ptr[Bucket]
09268                 fstp    dword ptr[Bucket2]
09269                 fstp    dword ptr[Bucket]
09270 
09271                 and             esi,GREENMASK2
09272 
09273                 fld             dword ptr[FTemp5]
09274                 fld             dword ptr[FTemp4]
09275 
09276                 or              ebp,esi
09277 
09278                 fld             dword ptr[FTemp3]
09279                 fld             dword ptr[FTemp2]
09280 
09281                 rol             ebp,16
09282 
09283                 fld             dword ptr[FTemp1]
09284                 fld             dword ptr[FTemp0]
09285 
09286                 mov             ecx,[ZVal]
09287 
09288                 mov             esi,[ZVal]
09289                 add             ecx,[ZDelta]
09290 
09291                 shr             esi,16
09292                 mov             [ZVal],ecx
09293 
09294                 mov             ecx,pZBufferPtr
09295 
09296                 mov             [edi+28],ebp
09297                 mov             word ptr[ecx+28],si
09298                 mov             word ptr[ecx+30],si
09299 
09300                 pop             ebp
09301 
09302 
09303                 ; get corrected right side deltas ; st0  st1  st2  st3  st4  st5  st6  st7
09304                                                                                 ; ZR   UZR  ZRi  VZR  UL   VL
09305                 fld             st                                              ; ZR   ZR   UZR  ZRi  VZR  UL   VL
09306                 fmul    st,st(4)                                ; VR   ZR   UZR  ZRi  VZR  UL   VL
09307                 fxch    st(1)                                   ; ZR   VR   UZR  ZRi  VZR  UL   VL
09308                 fmul    st,st(2)                                ; UR   VR   UZR  ZRi  VZR  UL   VL
09309 
09310                 add             edi,32                                  ; move screen pointer to start of next aspan
09311                 add             [pZBufferPtr],32
09312                 dec             [NumASpans]                     ; dec num affine spans
09313                 jnz             SpanLoop16
09314 
09315 HandleLeftoverPixels16:
09316 
09317                 mov             esi,[pTex]
09318 
09319 
09320                 cmp             [RemainingCount],0
09321                 jz              FPUReturn16
09322 
09323                 //need one more stack spot
09324                 fstp    dword ptr[FloatTemp]    ; VR   UZR  ZRi  VZR  UL   VL
09325                 fld             st(4)                                   ; UL   VR   UZR  ZRi  VZR  UL   VL
09326                 fmul    [GLMapMulU]                             ; ULL  VR   UZR  ZRi  VZR  UL   VL
09327                 fld             st(5)                                   ; UL   ULL  VR   UZR  ZRi  VZR  UL   VL
09328                 fadd    qword ptr[MipMagic]             ; ULk  ULL  VR   UZR  ZRi  VZR  UL   VL
09329                 fxch    st(1)                                   ; ULL  ULk  VR   UZR  ZRi  VZR  UL   VL
09330                 fadd    qword ptr[MipMagic]             ; ULLk ULk  VR   UZR  ZRi  VZR  UL   VL
09331                 fxch    st(1)                                   ; ULk  ULLk VR   UZR  ZRi  VZR  UL   VL
09332                 fstp    qword ptr[Bucket]               ; ULLk VR   UZR  ZRi  VZR  UL   VL
09333                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
09334 
09335                 mov             ebx,dword ptr[Bucket]
09336                 mov             eax,dword ptr[Bucket2]
09337 
09338                 fld             st(5)                                   ; VL   VR   UZR  ZRi  VZR  UL   VL
09339                 fmul    [GLMapMulV]                             ; VLL  VR   UZR  ZRi  VZR  UL   VL
09340 
09341                 add             ebx,dword ptr[UAdjust]
09342                 add             eax,dword ptr[UAdjustL]
09343 
09344                 mov             [U1],ebx
09345                 mov             [UFixed],eax
09346 
09347                 fld             st(6)                                   ; VL   VLL  VR   UZR  ZRi  VZR  UL   VL
09348                 fadd    qword ptr[MipMagic]             ; VLk  VLL  VR   UZR  ZRi  VZR  UL   VL
09349                 fxch    st(1)                                   ; VLL  VLk  VR   UZR  ZRi  VZR  UL   VL
09350                 fadd    qword ptr[MipMagic]             ; VLLk VLk  VR   UZR  ZRi  VZR  UL   VL
09351                 fxch    st(1)                                   ; VLk  VLLk VR   UZR  ZRi  VZR  UL   VL
09352                 fstp    qword ptr[Bucket]               ; VLLk VR   UZR  ZRi  VZR  UL   VL
09353                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
09354 
09355                 mov             ebx,dword ptr[Bucket]
09356                 mov             eax,dword ptr[Bucket2]
09357 
09358                 fld             dword ptr[FloatTemp]    ; UR   VR   UZR  ZRi  VZR  UL   dV
09359 
09360                 add             ebx,dword ptr[VAdjust]
09361                 add             eax,dword ptr[VAdjustL]
09362 
09363                 mov             [V1],ebx
09364                 mov             [VFixed],eax
09365 
09366                 dec             [RemainingCount]
09367                 jz              OnePixelSpan16
09368 
09369 
09370                 //must get rid of this wasted time
09371                 fstp    [FloatTemp]                             ; inv. inv. inv. inv. UL   VL
09372                 fstp    [FloatTemp]                             ; inv. inv. inv. UL   VL
09373                 fstp    [FloatTemp]                             ; inv. inv. UL   VL
09374                 fstp    [FloatTemp]                             ; inv. UL   VL
09375                 fstp    [FloatTemp]                             ; UL   VL
09376                 fild    [y]                                             ; y    UL   VL
09377                 fild    [x2]                                    ; xr   y    UL   VL
09378 
09379                 fld             [UDivZStepY]                    ; UZdY xr   y    UL   VL
09380                 fld             [UDivZStepX]                    ; UZdX UZdY xr   y    UL   VL
09381                 fmul    st,st(2)                                ; UZX  UZdY xr   y    UL   VL
09382                 fld             [VDivZStepY]                    ; VZdY UZX  UZdY xr   y    UL   VL
09383                 fld             [VDivZStepX]                    ; VZdX VZdY UZX  UZdY xr   y    UL   VL
09384                 fxch    st(3)                                   ; UZdy VZdY UZX  VZdX xr   y    UL   VL
09385                 fmul    st,st(5)                                ; UZY  VZdY UZX  VZdX xr   y    UL   VL
09386                 fxch    st(2)                                   ; UZX  VZdY UZY  VZdX xr   y    UL   VL
09387                 fadd    [UDivZOrigin]                   ; UZXS VZdY UZY  VZdX xr   y    UL   VL
09388                 fxch    st(3)                                   ; VZdX VZdY UZY  UZXS xr   y    UL   VL
09389                 fmul    st,st(4)                                ; VZX  VZdY UZY  UZXS xr   y    UL   VL
09390                 fxch    st(2)                                   ; UZY  VZdY VZX  UZXS xr   y    UL   VL
09391                 faddp   st(3),st                                ; VZdY VZX  UZ   xr   y    UL   VL
09392                 fmul    st,st(4)                                ; VZY  VZX  UZ   xr   y    UL   VL
09393                 fxch    st(1)                                   ; VZX  VZY  UZ   xr   y    UL   VL
09394                 fadd    [VDivZOrigin]                   ; VZXS VZY  UZ   xr   y    UL   VL
09395                 fld             [ZiStepX]                               ; ZdX  VZXS VZY  UZ   xr   y    UL   VL
09396                 fmulp   st(4),st                                ; VZXS VZY  UZ   ZX   y    UL   VL
09397                 faddp   st(1),st                                ; VZ   UZ   ZX   y    UL   VL
09398                 fld             [ZiStepY]                               ; ZdY  VZ   UZ   ZX   y    UL   VL
09399                 fmulp   st(4),st                                ; VZ   UZ   ZX   ZY   UL   VL
09400                 fxch    st(2)                                   ; ZX   UZ   VZ   ZY   UL   VL
09401                 fadd    [ZiOrigin]                              ; ZXS  UZ   VZ   ZY   UL   VL
09402 
09403                 faddp   st(3),st                                ; UZ   VZ   Zi   UL   VL
09404                 fld1                                                    ; 1    UZ   VZ   Zi   UL   VL
09405                 fdiv    st,st(3)                                ; ZR   UZ   VZ   Zi   UL   VL
09406 
09407                 fld             st                                              ; ZR   ZR   UZ   VZ   Zi   UL   VL
09408                 fmul    st,st(3)                                ; VR   ZR   UZ   VZ   Zi   UL   VL
09409                 fxch    st(1)                                   ; ZR   VR   UZ   VZ   Zi   UL   VL
09410                 fmul    st,st(2)                                ; UR   VR   UZ   VZ   Zi   UL   VL
09411 
09412                 //lazy idiv below... should 1/int mul mul
09413 
09414                 ; calculate deltas                              ; st0  st1  st2  st3  st4  st5  st6  st7
09415                 fsubr   st(5),st                                ; UR   VR   inv. inv. inv. dU   VL
09416                 fxch    st(1)                                   ; VR   UR   inv. inv. inv. dU   VL
09417                 fsubr   st(6),st                                ; VR   UR   inv. inv. inv. dU   dV
09418                 fxch    st(6)                                   ; dV   UR   inv. inv. inv. dU   VR
09419                 fidiv   dword ptr[RemainingCount];dv   UR   inv. inv. inv. dU   VR
09420                 fadd    qword ptr[MipMagic]             ; dvk  UR   inv. inv. inv. dU   VR
09421                 fxch    st(5)                                   ; dU   UR   inv. inv. inv. dvk  VR
09422                 fidiv   dword ptr[RemainingCount];du   UR   inv. inv. inv. dvk  VR
09423                 fadd    qword ptr[MipMagic]             ; duk  UR   inv. inv. inv. dvk  VR
09424                 fxch    st(5)                                   ; dvk  UR   inv. inv. inv. duk  VR
09425                 fstp    qword ptr[DeltaV]               ; UR   inv. inv. inv. duk  VR
09426                 fxch    st(4)                                   ; duk  inv. inv. inv. UR   VR
09427                 fstp    qword ptr[DeltaU]               ; inv. inv. inv. UR   VR
09428                 fld             st(1)                                   ; inv. inv. inv. inv. UR   VR
09429                 fld             st(2)                                   ; inv. inv. inv. inv. inv. UR   VR
09430 
09431 OnePixelSpan16:
09432                 // Clamp U/V
09433                 mov             ebx,[UFixed]
09434                 cmp             ebx,MaxU
09435                 jle             TryClampU116
09436                 mov             ecx,MaxU
09437                 mov             dword ptr[UFixed],ecx
09438                 jmp             NoClampU116
09439 
09440 TryClampU116:
09441                 cmp             ebx,0
09442                 jge             NoClampU116
09443                 mov             dword ptr[UFixed],0
09444 NoClampU116:
09445                 mov             eax,[VFixed]
09446                 cmp             eax,MaxV
09447                 jle             TryClampV116
09448                 mov             ecx,MaxV
09449                 mov             dword ptr[VFixed],ecx
09450                 jmp             NoClampV116
09451 
09452 TryClampV116:
09453                 cmp             eax,0
09454                 jge             NoClampV116
09455                 mov             dword ptr[VFixed],0
09456 
09457 NoClampV116:
09458 
09459                 fstp    [FTemp0]
09460                 fstp    [FTemp1]
09461                 fstp    [FTemp2]
09462                 fstp    [FTemp3]
09463                 fstp    [FTemp4]
09464                 fstp    [FTemp5]
09465 
09466                 mov             ebx,dword ptr[U1]
09467                 mov             edx,dword ptr[V1]
09468 
09469                 fild    [RR1]                                   ; LR
09470                 fild    [GG1]                                   ; LG   LR
09471                 fild    [BB1]                                   ; LB   LG   LR
09472 
09473                 mov             ecx,[VShift]
09474                 add             edx,dword ptr[VAdjust2]
09475 
09476                 add             ebx,dword ptr[UAdjust2]
09477                 mov             eax,dword ptr[DeltaV]
09478 
09479                 shl             eax,cl
09480                 mov             esi,pTex
09481 
09482                 shl             edx,cl
09483                 mov             dword ptr[DeltaV],eax
09484 
09485                 mov             eax,[ZDelta]
09486                 mov             ecx,[ZVal]
09487 
09488                 sar             eax,1
09489                 push    ebp
09490 
09491                 mov             [ZDelta],eax
09492 
09493 LeftoverLoop16:
09494                 mov             eax,edx
09495                 and             ebx,[GWMaskShifted]
09496 
09497                 and             eax,[GHMaskShifted16]
09498 
09499                 add             eax,ebx
09500                 add             ebx,dword ptr[DeltaU]
09501 
09502                 shr             eax,16
09503                 add             edi,2
09504 
09505                 mov             ax,word ptr[2*eax+esi]
09506                 add             edx,dword ptr[DeltaV]
09507 
09508                 xor             eax,0
09509 
09510                 mov             esi,eax
09511                 mov             ebp,eax
09512 
09513                 and             esi,REDMASK2
09514                 and             ebp,GREENMASK2
09515 
09516                 mov             dword ptr[Red],esi
09517                 mov             dword ptr[Green],ebp
09518 
09519                 fild    qword ptr[Red]                  ; r    LB   LG   LR
09520 
09521                 mov             ebp,eax
09522 
09523                 fmul    st,st(3)                                ; R    LB   LG   LR
09524                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
09525 
09526                 and             ebp,BLUEMASK
09527 
09528                 mov             dword ptr[Blue],ebp
09529 
09530                 fmul    st,st(3)                                ; G    R    LB   LG   LR
09531                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
09532                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
09533                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
09534                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
09535                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
09536                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
09537                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
09538                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
09539                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
09540                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
09541                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
09542 
09543                 mov             eax,dword ptr[Bucket]
09544                 mov             ebp,dword ptr[Bucket2]
09545 
09546                 fstp    qword ptr[Bucket]               ; LB   LG   LR
09547 
09548                 and             eax,REDMASK2
09549                 and             ebp,BLUEMASK
09550                 
09551                 mov             esi,dword ptr[Bucket]
09552                 or              ebp,eax
09553 
09554                 and             esi,GREENMASK2
09555                 mov             eax,ecx
09556 
09557                 or              ebp,esi
09558 
09559                 shr             eax,16
09560                 mov             esi,pZBufferPtr
09561 
09562                 mov             word ptr[edi-2],bp
09563                 mov             word ptr[esi],ax
09564 
09565                 add             ecx,[ZDelta]
09566                 mov             esi,pTex
09567 
09568                 add             pZBufferPtr,2
09569 
09570                 dec             [RemainingCount]
09571                 jge             LeftoverLoop16
09572 
09573                 pop             ebp
09574 
09575 
09576 FPUReturn16:
09577                 ffree   st(0)
09578                 ffree   st(1)
09579                 ffree   st(2)
09580                 ffree   st(3)
09581                 ffree   st(4)
09582                 ffree   st(5)
09583                 ffree   st(6)
09584 
09585 Return16:
09586                 pop             edi
09587                 pop             esi
09588                 pop             ecx
09589                 pop             ebx
09590         }
09591 }

void DrawSpan16_AsmLit555X86FPU int32  x1,
int32  x2,
int32  y
 

Definition at line 9594 of file x86span555.c.

References B, B1, B2, BB1, Blue, BLUEMASK, Bucket, Bucket2, DRV_Window::Buffer, ClientWindow, DeltaU, DeltaV, FloatTemp, FTemp0, FTemp1, FTemp2, FTemp3, FTemp4, FTemp5, G, G1, G2, GBitPtr16, GG1, GHMaskShifted16, GLightData, GLightWidth, GLMapMulU, GLMapMulV, GMipLevel20, GMipLevel4_8, Green, GREENMASK2, GWMaskShifted, Magic, MaxU, MaxV, MipMagic, MipMagic2, NumASpans, or, pointer, pTex, r, R, R1, R2, Red, REDMASK2, RemainingCount, RR1, U1, UAdjust, UAdjust2, UAdjustL, UDist, UDivZ16StepX, UDivZOrigin, UDivZStepX, UDivZStepY, UFixed, V1, VAdjust, VAdjust2, VAdjustL, VDist, VDivZ16StepX, VDivZOrigin, VDivZStepX, VDivZStepY, VFixed, VShift, DRV_Window::Width, y, Zi, Zi16StepX, ZiOrigin, ZiStepX, and ZiStepY.

09595 {
09596         _asm
09597         {
09598                 mov             eax,x1
09599                 mov             ecx,x2
09600                 sub             ecx,eax
09601                 jle             Return16
09602 
09603                 mov             edi,[GBitPtr16]
09604                 mov             pTex,edi
09605 
09606                 fild    [y]                                             ; y
09607 
09608                 mov             edi, ClientWindow.Buffer
09609                 mov             eax, y
09610                 imul    eax, ClientWindow.Width
09611                 add             eax, x1
09612                 shl             eax, 1
09613                 add             edi, eax
09614                 mov             eax,ecx
09615                 shr             ecx,4
09616                 and             eax,15
09617                 _emit 75h
09618                 _emit 06h
09619                 dec             ecx
09620                 mov             eax,16
09621 
09622                 mov             [NumASpans],ecx
09623                 mov             [RemainingCount],eax
09624 
09625                 fild [x1]                                               ; x    y
09626 
09627                 //decoder won't keep up with these huge instructions
09628                 //need to find some int instructions to cram in here somewhere
09629                 fld             [UDivZStepY]                    ; UZdY x    y
09630                 fld             [UDivZStepX]                    ; UZdX UZdY x    y
09631                 fmul    st,st(2)                                ; UZX  UZdY x    y
09632                 fld             [VDivZStepY]                    ; VZdY UZX  UZdY x    y
09633                 fld             [VDivZStepX]                    ; VZdX VZdY UZX  UZdY x    y
09634                 fxch    st(3)                                   ; UZdy VZdY UZX  VZdX x    y
09635                 fmul    st,st(5)                                ; UZY  VZdY UZX  VZdX x    y
09636                 fxch    st(2)                                   ; UZX  VZdY UZY  VZdX x    y
09637                 fadd    [UDivZOrigin]                   ; UZXS VZdY UZY  VZdX x    y
09638                 fxch    st(3)                                   ; VZdX VZdY UZY  UZXS x    y
09639                 fmul    st,st(4)                                ; VZX  VZdY UZY  UZXS x    y
09640                 fxch    st(2)                                   ; UZY  VZdY VZX  UZXS x    y
09641                 faddp   st(3),st                                ; VZdY VZX  UZ   x    y
09642                 fmul    st,st(4)                                ; VZY  VZX  UZ   x    y
09643                 fxch    st(1)                                   ; VZX  VZY  UZ   x    y
09644                 fadd    [VDivZOrigin]                   ; VZXS VZY  UZ   x    y
09645                 fld             [ZiStepX]                               ; ZdX  VZXS VZY  UZ   x    y
09646                 fmulp   st(4),st                                ; VZXS VZY  UZ   ZX   y
09647                 faddp   st(1),st                                ; VZ   UZ   ZX   y
09648                 fld             [ZiStepY]                               ; ZdY  VZ   UZ   ZX   y
09649                 fmulp   st(4),st                                ; VZ   UZ   ZX   ZY
09650                 fxch    st(2)                                   ; ZX   UZ   VZ   ZY
09651                 fadd    [ZiOrigin]                              ; ZXS  UZ   VZ   ZY
09652 
09653                 //room for two cycles of int instructions here
09654 
09655                 faddp   st(3),st                                ; UZ   VZ   Zi
09656                 fld1                                                    ; 1    UZ   VZ   Zi
09657                 fdiv    st,st(3)                                ; ZL   UZ   VZ   Zi
09658 
09659                 //room for 18 cycles of int instructions here
09660 
09661                 fld             st                                              ; ZL   ZL   UZ   VZ   Zi
09662                 fmul    st,st(3)                                ; VL   ZL   UZ   VZ   Zi
09663                 fxch    st(4)                                   ; Zi   ZL   UZ   VZ   VL
09664                 fadd    [Zi16StepX]                             ; ZRi  ZL   UZ   VZ   VL
09665                 fxch    st(1)                                   ; ZL   ZRi  UZ   VZ   VL
09666                 fmul    st,st(2)                                ; UL   ZRi  UZ   VZ   VL
09667                 fxch    st(3)                                   ; VZ   ZRi  UZ   UL   VL
09668                 fadd    [VDivZ16StepX]                  ; VZR  ZRi  UZ   UL   VL
09669                 fxch    st(2)                                   ; UZ   ZRi  VZR  UL   VL
09670                 fadd    [UDivZ16StepX]                  ; UZR  ZRi  VZR  UL   VL
09671                 fld1                                                    ; 1    UZR  ZRi  VZR  UL   VL
09672                 fdiv    st,st(2)                                ; ZR   UZR  ZRi  VZR  UL   VL
09673 
09674                 //room for 18 cycles of int stuff here
09675 
09676                 fld             st                                              ; ZR   ZR   UZR  ZRi  VZR  UL   VL
09677                 fmul    st,st(4)                                ; VR   ZR   UZR  ZRi  VZR  UL   VL
09678                 fxch    st(1)                                   ; ZR   VR   UZR  ZRi  VZR  UL   VL
09679                 //fmul stall one cycle
09680                 fmul    st,st(2)                                ; UR   VR   UZR  ZRi  VZR  UL   VL
09681 
09682                 test    ecx,ecx
09683                 jz              HandleLeftoverPixels16
09684 
09685 SpanLoop16:
09686                 //need one more stack spot
09687                 fstp    dword ptr[FloatTemp]    ; VR   UZR  ZRi  VZR  UL   VL
09688                 fld             st(4)                                   ; UL   VR   UZR  ZRi  VZR  UL   VL
09689                 fmul    [GLMapMulU]                             ; ULL  VR   UZR  ZRi  VZR  UL   VL
09690                 fld             st(5)                                   ; UL   ULL  VR   UZR  ZRi  VZR  UL   VL
09691                 fadd    qword ptr[MipMagic]             ; ULk  ULL  VR   UZR  ZRi  VZR  UL   VL
09692                 fxch    st(1)                                   ; ULL  ULk  VR   UZR  ZRi  VZR  UL   VL
09693                 fadd    qword ptr[MipMagic]             ; ULLk ULk  VR   UZR  ZRi  VZR  UL   VL
09694                 fxch    st(1)                                   ; ULk  ULLk VR   UZR  ZRi  VZR  UL   VL
09695                 fstp    qword ptr[Bucket]               ; ULLk VR   UZR  ZRi  VZR  UL   VL
09696                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
09697 
09698                 mov             ebx,dword ptr[Bucket]
09699                 mov             eax,dword ptr[Bucket2]
09700 
09701                 fld             st(5)                                   ; VL   VR   UZR  ZRi  VZR  UL   VL
09702                 fmul    [GLMapMulV]                             ; VLL  VR   UZR  ZRi  VZR  UL   VL
09703 
09704                 add             ebx,dword ptr[UAdjust]
09705                 add             eax,dword ptr[UAdjustL]
09706 
09707                 mov             [U1],ebx
09708                 mov             [UFixed],eax
09709 
09710                 fld             st(6)                                   ; VL   VLL  VR   UZR  ZRi  VZR  UL   VL
09711                 fadd    qword ptr[MipMagic]             ; VLk  VLL  VR   UZR  ZRi  VZR  UL   VL
09712                 fxch    st(1)                                   ; VLL  VLk  VR   UZR  ZRi  VZR  UL   VL
09713                 fadd    qword ptr[MipMagic]             ; VLLk VLk  VR   UZR  ZRi  VZR  UL   VL
09714                 fxch    st(1)                                   ; VLk  VLLk VR   UZR  ZRi  VZR  UL   VL
09715                 fstp    qword ptr[Bucket]               ; VLLk VR   UZR  ZRi  VZR  UL   VL
09716                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
09717                 fsubr   st(5),st                                ; VR   UZR  ZRi  VZR  UL   dV
09718 
09719                 mov             ebx,dword ptr[Bucket]
09720                 mov             eax,dword ptr[Bucket2]
09721 
09722                 fld             dword ptr[FloatTemp]    ; UR   VR   UZR  ZRi  VZR  UL   dV
09723 
09724                 add             ebx,dword ptr[VAdjust]
09725                 add             eax,dword ptr[VAdjustL]
09726 
09727                 mov             [V1],ebx
09728                 mov             [VFixed],eax
09729 
09730                 fsubr   st(5),st                                ; UR   VR   UZR  ZRi  VZR  dU   dV
09731                 fxch    st(6)                                   ; dV   VR   UZR  ZRi  VZR  dU   UR
09732                 fadd    qword ptr[MipMagic2]    ; dVk  VR   UZR  ZRi  VZR  dU   UR
09733                 fxch    st(5)                                   ; dU   VR   UZR  ZRi  VZR  dVk  UR
09734                 fadd    qword ptr[MipMagic2]    ; dUk  VR   UZR  ZRi  VZR  dVk  UR
09735                 fxch    st(5)                                   ; dVk  VR   UZR  ZRi  VZR  dUk  UR
09736                 fstp    qword ptr[DeltaV]               ; VR   UZR  ZRi  VZR  dUk  UR
09737                 fxch    st(5)                                   ; UR   UZR  ZRi  VZR  dUk  VR
09738                 //gotta do this to get em lined back up right
09739                 fxch    st(4)                                   ; dUk  UZR  ZRi  VZR  UR   VR
09740                 fstp    qword ptr[DeltaU]               ; UZR  ZRi  VZR  UR   VR
09741 
09742                 //right becomes left                    ; UZL  ZLi  VZL  UL   VL
09743                 fadd    [UDivZ16StepX]                  ; UZR  ZLi  VZL  UL   VL
09744                 fxch    st(1)                                   ; ZLi  UZR  VZL  UL   VL
09745                 fadd    [Zi16StepX]                             ; ZRi  UZR  VZL  UL   VL
09746                 fxch    st(2)                                   ; VZL  UZR  ZRi  UL   VL
09747                 fadd    [VDivZ16StepX]                  ; VZR  UZR  ZRi  UL   VL
09748                 fxch    st(2)                                   ; ZRi  UZR  VZR  UL   VL
09749                 fxch    st(1)                                   ; UZR  ZRi  VZR  UL   VL
09750                 fld1                                                    ; 1    UZR  ZRi  VZR  UL   VL
09751                 fdiv    st,st(2)                                ; ZR   UZR  ZRi  VZR  UL   VL
09752 
09753                 // Clamp U/V
09754                 mov             ebx,[UFixed]
09755                 cmp             ebx,MaxU
09756                 jle             TryClampU016
09757                 mov             ecx,MaxU
09758                 mov             dword ptr[UFixed],ecx
09759                 jmp             NoClampU016
09760 
09761 TryClampU016:
09762                 cmp             ebx,0
09763                 jge             NoClampU016
09764                 mov             dword ptr[UFixed],0
09765 NoClampU016:
09766                 mov             eax,[VFixed]
09767                 cmp             eax,MaxV
09768                 jle             TryClampV016
09769                 mov             ecx,MaxV
09770                 mov             dword ptr[VFixed],ecx
09771                 jmp             NoClampV016
09772 
09773 TryClampV016:
09774                 cmp             eax,0
09775                 jge             NoClampV016
09776                 mov             dword ptr[VFixed],0
09777 
09778 NoClampV016:
09779 
09780 
09781                 mov esi,dword ptr[UFixed]
09782                 mov eax,dword ptr[VFixed]
09783 
09784 
09785                 mov ecx, GMipLevel4_8
09786                 sar esi, cl
09787                 sar eax, cl
09788                 and esi, 0ffh
09789                 and eax, 0ffh
09790                 mov UDist, esi
09791                 mov VDist, eax
09792 
09793                 mov esi,dword ptr[UFixed]
09794                 mov eax,dword ptr[VFixed]
09795                 mov ecx, GMipLevel20
09796                 shr esi, cl
09797                 shr eax, cl
09798 
09799                 imul eax, GLightWidth
09800                 add esi, eax
09801 
09802                 mov edx, esi
09803                 shl esi, 1
09804                 add edx, esi
09805 
09806                 add edx, GLightData
09807 
09808                 // Interpolate accross top
09809                 xor ecx, ecx
09810                 mov cl, [edx+3]
09811                 mov eax, ecx
09812                 mov cl, [edx+0]
09813                 sub eax, ecx
09814                 imul eax, UDist
09815                 shl ecx, 8
09816                 add eax, ecx
09817                 mov [R1], eax
09818 
09819                 xor ecx, ecx
09820                 mov cl, [edx+4]
09821                 mov eax, ecx
09822                 mov cl, [edx+1]
09823                 sub eax, ecx
09824                 imul eax, UDist
09825                 shl ecx, 8
09826                 add eax, ecx
09827                 mov [G1], eax
09828 
09829                 xor ecx, ecx
09830                 mov cl, [edx+5]
09831                 mov eax, ecx
09832                 mov cl, [edx+2]
09833                 sub eax, ecx
09834                 imul eax, UDist
09835                 shl ecx, 8
09836                 add eax, ecx
09837                 mov [B1], eax
09838 
09839                 add edx, GLightWidth
09840                 add edx, GLightWidth
09841                 add edx, GLightWidth
09842 
09843                 // Interpolate accross bottom
09844                 xor ecx, ecx
09845                 mov cl, [edx+3]
09846                 mov eax, ecx
09847                 mov cl, [edx+0]
09848                 sub eax, ecx
09849                 imul eax, UDist
09850                 shl ecx, 8
09851                 add eax, ecx
09852                 mov [R2], eax
09853 
09854                 xor ecx, ecx
09855                 mov cl, [edx+4]
09856                 mov eax, ecx
09857                 mov cl, [edx+1]
09858                 sub eax, ecx
09859                 imul eax, UDist
09860                 shl ecx, 8
09861                 add eax, ecx
09862                 mov [G2], eax
09863 
09864                 xor ecx, ecx
09865                 mov cl, [edx+5]
09866                 mov eax, ecx
09867                 mov cl, [edx+2]
09868                 sub eax, ecx
09869                 imul eax, UDist
09870                 shl ecx, 8
09871                 add eax, ecx
09872                 mov [B2], eax
09873 
09874                 // Interpolate down
09875                 mov eax, [R2]
09876                 sub eax, [R1]
09877                 imul eax, VDist
09878                 sar eax, 8
09879                 add eax, [R1]
09880                 shr eax, 8
09881                 and     eax,0feh
09882 
09883                 mov [RR1], eax
09884 
09885                 mov eax, [G2]
09886                 sub eax, [G1]
09887                 imul eax, VDist
09888                 sar eax, 8
09889                 add eax, [G1]
09890                 shr eax, 8
09891                 and     eax,0feh
09892 
09893                 mov [GG1], eax
09894 
09895                 mov eax, [B2]
09896                 sub eax, [B1]
09897                 imul eax, VDist
09898                 sar eax, 8
09899                 add eax, [B1]
09900                 shr eax, 8
09901                 and     eax,0feh
09902 
09903                 mov [BB1], eax
09904 
09905                 fstp    [FTemp0]                                ; UZR  ZRi  VZR  UL   VL
09906                 fstp    [FTemp1]                                ; ZRi  VZR  UL   VL
09907                 fstp    [FTemp2]                                ; VZR  UL   VL
09908                 fstp    [FTemp3]                                ; UL   VL
09909                 fstp    [FTemp4]                                ; VL
09910                 fstp    [FTemp5]                                ; 
09911 
09912                 fild    [RR1]                                   ; LR
09913                 fild    [GG1]                                   ; LG   LR
09914                 fild    [BB1]                                   ; LB   LG   LR
09915                 
09916                 
09917                 mov             ebx,dword ptr[U1]
09918                 mov             eax,dword ptr[V1]
09919 
09920                 add             ebx,dword ptr[UAdjust2]
09921                 add             eax,dword ptr[VAdjust2]
09922 
09923                 mov             ecx,[VShift]
09924                 mov             dword ptr[Bucket],ebx
09925 
09926                 shl             eax,cl
09927 
09928                 push    ebp
09929 
09930                 mov             dword ptr[Bucket2],eax
09931                 mov             ebp,dword ptr[DeltaV]
09932 
09933                 and             eax,[GHMaskShifted16]
09934                 and             ebx,[GWMaskShifted]
09935 
09936                 shl             ebp,cl
09937                 add             eax,ebx
09938 
09939                 mov             edx,dword ptr[Bucket2]
09940                 mov             esi,pTex
09941 
09942                 shr             eax,16
09943                 mov             dword ptr[DeltaV],ebp
09944 
09945                 mov             ebx,dword ptr[Bucket]
09946 
09947                 mov             ax,word ptr[2*eax+esi]
09948                 add             edx,dword ptr[DeltaV]
09949 
09950                 xor             eax,0
09951                 mov             ecx,edx
09952 
09953                 add             ebx,dword ptr[DeltaU]
09954                 and             ecx,[GHMaskShifted16]
09955 
09956                 rol             eax,16
09957                 and             ebx,[GWMaskShifted]
09958 
09959                 xor             eax,0
09960                 add             ecx,ebx
09961 
09962                 add             edx,dword ptr[DeltaV]
09963                 mov             esi,pTex
09964 
09965                 shr             ecx,16
09966                 add             ebx,dword ptr[DeltaU]
09967 
09968                 mov             ax,word ptr[2*ecx+esi]
09969                 mov             ecx,edx
09970 
09971                 xor             eax,0
09972                 and             ecx,[GHMaskShifted16]
09973 
09974                 mov             esi,eax
09975                 mov             ebp,eax
09976 
09977                 and             esi,REDMASK2
09978                 and             ebp,GREENMASK2
09979 
09980                 mov             dword ptr[Red],esi
09981                 mov             dword ptr[Green],ebp
09982 
09983                 fild    qword ptr[Red]                  ; r    LB   LG   LR
09984 
09985                 mov             ebp,eax
09986 
09987                 fmul    st,st(3)                                ; R    LB   LG   LR
09988                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
09989 
09990                 and             ebp,BLUEMASK
09991                 and             ebx,[GWMaskShifted]
09992 
09993                 mov             dword ptr[Blue],ebp
09994 
09995                 fmul    st,st(3)                                ; G    R    LB   LG   LR
09996                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
09997                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
09998                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
09999                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
10000                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
10001                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
10002                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
10003                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
10004                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
10005                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
10006                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
10007 
10008                 mov             eax,dword ptr[Bucket]
10009                 mov             ebp,dword ptr[Bucket2]
10010 
10011                 fstp    qword ptr[Bucket]               ; LB   LG   LR
10012 
10013                 and             eax,REDMASK2
10014                 and             ebp,BLUEMASK
10015                 
10016                 mov             esi,dword ptr[Bucket]
10017                 or              ebp,eax
10018 
10019                 add             ecx,ebx
10020                 and             esi,GREENMASK2
10021 
10022                 shr             ecx,16
10023                 or              ebp,esi
10024 
10025                 xor             eax,0
10026                 mov             esi,pTex
10027 
10028                 rol             ebp,16
10029                 add             edx,dword ptr[DeltaV]
10030 
10031                 mov             ax,word ptr[2*ecx+esi]
10032                 mov             ecx,edx
10033 
10034                 add             ebx,dword ptr[DeltaU]
10035                 and             ecx,[GHMaskShifted16]
10036 
10037                 and             ebx,[GWMaskShifted]
10038                 xor             eax,0
10039 
10040                 add             ecx,ebx
10041                 mov             [edi],ebp
10042 
10043                 rol             eax,16
10044                 add             edx,dword ptr[DeltaV]
10045 
10046                 shr             ecx,16
10047                 add             ebx,dword ptr[DeltaU]
10048 
10049                 mov             ax,word ptr[2*ecx+esi]
10050 
10051                 mov             ecx,edx
10052                 xor             eax,0
10053 
10054                 and             ecx,[GHMaskShifted16]
10055                 mov             esi,eax
10056 
10057                 mov             ebp,eax
10058                 and             esi,REDMASK2
10059 
10060                 and             ebp,GREENMASK2
10061                 mov             dword ptr[Red],esi
10062 
10063                 mov             dword ptr[Green],ebp
10065 
10066 
10067                 fild    qword ptr[Red]                  ; r    LB   LG   LR
10068 
10069                 mov             ebp,eax
10070 
10071                 fmul    st,st(3)                                ; R    LB   LG   LR
10072                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
10073 
10074                 and             ebp,BLUEMASK
10075                 and             ebx,[GWMaskShifted]
10076 
10077                 mov             dword ptr[Blue],ebp
10078 
10079                 fmul    st,st(3)                                ; G    R    LB   LG   LR
10080                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
10081                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
10082                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
10083                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
10084                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
10085                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
10086                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
10087                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
10088                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
10089                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
10090                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
10091 
10092                 mov             eax,dword ptr[Bucket]
10093                 mov             ebp,dword ptr[Bucket2]
10094 
10095                 fstp    qword ptr[Bucket]               ; LB   LG   LR
10096 
10097                 and             eax,REDMASK2
10098                 and             ebp,BLUEMASK
10099                 
10100                 mov             esi,dword ptr[Bucket]
10101                 or              ebp,eax
10102 
10103                 add             ecx,ebx
10104                 and             esi,GREENMASK2
10105 
10106                 shr             ecx,16
10107                 or              ebp,esi
10108 
10109                 xor             eax,0
10110                 mov             esi,pTex
10111 
10112                 rol             ebp,16
10113                 add             edx,dword ptr[DeltaV]
10114 
10115                 mov             ax,word ptr[2*ecx+esi]
10116                 mov             ecx,edx
10117 
10118                 add             ebx,dword ptr[DeltaU]
10119                 and             ecx,[GHMaskShifted16]
10120 
10121                 and             ebx,[GWMaskShifted]
10122                 xor             eax,0
10123 
10124                 add             ecx,ebx
10125                 mov             [edi+4],ebp
10126 
10127                 rol             eax,16
10128                 add             edx,dword ptr[DeltaV]
10129 
10130                 shr             ecx,16
10131                 add             ebx,dword ptr[DeltaU]
10132 
10133                 mov             ax,word ptr[2*ecx+esi]
10134 
10135                 mov             ecx,edx
10136                 xor             eax,0
10137 
10138                 and             ecx,[GHMaskShifted16]
10139                 mov             esi,eax
10140 
10141                 mov             ebp,eax
10142                 and             esi,REDMASK2
10143 
10144                 and             ebp,GREENMASK2
10145                 mov             dword ptr[Red],esi
10146 
10147                 mov             dword ptr[Green],ebp
10149 
10150 
10151                 fild    qword ptr[Red]                  ; r    LB   LG   LR
10152 
10153                 mov             ebp,eax
10154 
10155                 fmul    st,st(3)                                ; R    LB   LG   LR
10156                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
10157 
10158                 and             ebp,BLUEMASK
10159                 and             ebx,[GWMaskShifted]
10160 
10161                 mov             dword ptr[Blue],ebp
10162 
10163                 fmul    st,st(3)                                ; G    R    LB   LG   LR
10164                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
10165                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
10166                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
10167                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
10168                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
10169                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
10170                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
10171                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
10172                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
10173                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
10174                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
10175 
10176                 mov             eax,dword ptr[Bucket]
10177                 mov             ebp,dword ptr[Bucket2]
10178 
10179                 fstp    qword ptr[Bucket]               ; LB   LG   LR
10180 
10181                 and             eax,REDMASK2
10182                 and             ebp,BLUEMASK
10183                 
10184                 mov             esi,dword ptr[Bucket]
10185                 or              ebp,eax
10186 
10187                 add             ecx,ebx
10188                 and             esi,GREENMASK2
10189 
10190                 shr             ecx,16
10191                 or              ebp,esi
10192 
10193                 xor             eax,0
10194                 mov             esi,pTex
10195 
10196                 rol             ebp,16
10197                 add             edx,dword ptr[DeltaV]
10198 
10199                 mov             ax,word ptr[2*ecx+esi]
10200                 mov             ecx,edx
10201 
10202                 add             ebx,dword ptr[DeltaU]
10203                 and             ecx,[GHMaskShifted16]
10204 
10205                 and             ebx,[GWMaskShifted]
10206                 xor             eax,0
10207 
10208                 add             ecx,ebx
10209                 mov             [edi+8],ebp
10210 
10211                 shr             ecx,16
10212                 add             edx,dword ptr[DeltaV]
10213 
10214                 rol             eax,16
10215                 mov             ax,word ptr[2*ecx+esi]
10216 
10217                 mov             ecx,edx
10218                 xor             eax,0
10219 
10220                 and             ecx,[GHMaskShifted16]
10221                 mov             esi,eax
10222 
10223                 mov             ebp,eax
10224                 and             esi,REDMASK2
10225 
10226                 and             ebp,GREENMASK2
10227                 mov             dword ptr[Red],esi
10228 
10229                 mov             dword ptr[Green],ebp
10230                 add             ebx,dword ptr[DeltaU]
10232 
10233 
10234                 fild    qword ptr[Red]                  ; r    LB   LG   LR
10235 
10236                 mov             ebp,eax
10237 
10238                 fmul    st,st(3)                                ; R    LB   LG   LR
10239                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
10240 
10241                 and             ebp,BLUEMASK
10242                 and             ebx,[GWMaskShifted]
10243 
10244                 mov             dword ptr[Blue],ebp
10245 
10246                 fmul    st,st(3)                                ; G    R    LB   LG   LR
10247                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
10248                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
10249                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
10250                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
10251                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
10252                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
10253                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
10254                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
10255                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
10256                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
10257                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
10258 
10259                 mov             eax,dword ptr[Bucket]
10260                 mov             ebp,dword ptr[Bucket2]
10261 
10262                 fstp    qword ptr[Bucket]               ; LB   LG   LR
10263 
10264                 and             eax,REDMASK2
10265                 and             ebp,BLUEMASK
10266                 
10267                 mov             esi,dword ptr[Bucket]
10268                 or              ebp,eax
10269 
10270                 add             ecx,ebx
10271                 and             esi,GREENMASK2
10272 
10273                 shr             ecx,16
10274                 or              ebp,esi
10275 
10276                 xor             eax,0
10277                 mov             esi,pTex
10278 
10279                 rol             ebp,16
10280                 add             edx,dword ptr[DeltaV]
10281 
10282                 mov             ax,word ptr[2*ecx+esi]
10283                 mov             ecx,edx
10284 
10285                 add             ebx,dword ptr[DeltaU]
10286                 and             ecx,[GHMaskShifted16]
10287 
10288                 and             ebx,[GWMaskShifted]
10289                 xor             eax,0
10290 
10291                 add             ecx,ebx
10292                 mov             [edi+12],ebp
10293 
10294                 shr             ecx,16
10295                 add             edx,dword ptr[DeltaV]
10296 
10297                 rol             eax,16
10298                 mov             ax,word ptr[2*ecx+esi]
10299 
10300                 mov             ecx,edx
10301                 xor             eax,0
10302 
10303                 and             ecx,[GHMaskShifted16]
10304                 mov             esi,eax
10305 
10306                 mov             ebp,eax
10307                 and             esi,REDMASK2
10308 
10309                 and             ebp,GREENMASK2
10310                 mov             dword ptr[Red],esi
10311 
10312                 mov             dword ptr[Green],ebp
10313                 add             ebx,dword ptr[DeltaU]
10315 
10316 
10317                 fild    qword ptr[Red]                  ; r    LB   LG   LR
10318 
10319                 mov             ebp,eax
10320 
10321                 fmul    st,st(3)                                ; R    LB   LG   LR
10322                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
10323 
10324                 and             ebp,BLUEMASK
10325                 and             ebx,[GWMaskShifted]
10326 
10327                 mov             dword ptr[Blue],ebp
10328 
10329                 fmul    st,st(3)                                ; G    R    LB   LG   LR
10330                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
10331                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
10332                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
10333                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
10334                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
10335                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
10336                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
10337                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
10338                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
10339                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
10340                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
10341 
10342                 mov             eax,dword ptr[Bucket]
10343                 mov             ebp,dword ptr[Bucket2]
10344 
10345                 fstp    qword ptr[Bucket]               ; LB   LG   LR
10346 
10347                 and             eax,REDMASK2
10348                 and             ebp,BLUEMASK
10349                 
10350                 mov             esi,dword ptr[Bucket]
10351                 or              ebp,eax
10352 
10353                 add             ecx,ebx
10354                 and             esi,GREENMASK2
10355 
10356                 shr             ecx,16
10357                 or              ebp,esi
10358 
10359                 xor             eax,0
10360                 mov             esi,pTex
10361 
10362                 rol             ebp,16
10363                 add             edx,dword ptr[DeltaV]
10364 
10365                 mov             ax,word ptr[2*ecx+esi]
10366                 mov             ecx,edx
10367 
10368                 add             ebx,dword ptr[DeltaU]
10369                 and             ecx,[GHMaskShifted16]
10370 
10371                 and             ebx,[GWMaskShifted]
10372                 xor             eax,0
10373 
10374                 add             ecx,ebx
10375                 mov             [edi+16],ebp
10376 
10377                 shr             ecx,16
10378                 add             edx,dword ptr[DeltaV]
10379 
10380                 rol             eax,16
10381                 mov             ax,word ptr[2*ecx+esi]
10382 
10383                 mov             ecx,edx
10384                 xor             eax,0
10385 
10386                 and             ecx,[GHMaskShifted16]
10387                 mov             esi,eax
10388 
10389                 mov             ebp,eax
10390                 and             esi,REDMASK2
10391 
10392                 and             ebp,GREENMASK2
10393                 mov             dword ptr[Red],esi
10394 
10395                 mov             dword ptr[Green],ebp
10396                 add             ebx,dword ptr[DeltaU]
10398 
10399 
10400                 fild    qword ptr[Red]                  ; r    LB   LG   LR
10401 
10402                 mov             ebp,eax
10403 
10404                 fmul    st,st(3)                                ; R    LB   LG   LR
10405                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
10406 
10407                 and             ebp,BLUEMASK
10408                 and             ebx,[GWMaskShifted]
10409 
10410                 mov             dword ptr[Blue],ebp
10411 
10412                 fmul    st,st(3)                                ; G    R    LB   LG   LR
10413                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
10414                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
10415                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
10416                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
10417                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
10418                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
10419                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
10420                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
10421                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
10422                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
10423                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
10424 
10425                 mov             eax,dword ptr[Bucket]
10426                 mov             ebp,dword ptr[Bucket2]
10427 
10428                 fstp    qword ptr[Bucket]               ; LB   LG   LR
10429 
10430                 and             eax,REDMASK2
10431                 and             ebp,BLUEMASK
10432                 
10433                 mov             esi,dword ptr[Bucket]
10434                 or              ebp,eax
10435 
10436                 add             ecx,ebx
10437                 and             esi,GREENMASK2
10438 
10439                 shr             ecx,16
10440                 or              ebp,esi
10441 
10442                 xor             eax,0
10443                 mov             esi,pTex
10444 
10445                 rol             ebp,16
10446                 add             edx,dword ptr[DeltaV]
10447 
10448                 mov             ax,word ptr[2*ecx+esi]
10449                 mov             ecx,edx
10450 
10451                 add             ebx,dword ptr[DeltaU]
10452                 and             ecx,[GHMaskShifted16]
10453 
10454                 and             ebx,[GWMaskShifted]
10455                 xor             eax,0
10456 
10457                 add             ecx,ebx
10458                 mov             [edi+20],ebp
10459 
10460                 shr             ecx,16
10461                 add             edx,dword ptr[DeltaV]
10462 
10463                 rol             eax,16
10464                 mov             ax,word ptr[2*ecx+esi]
10465 
10466                 mov             ecx,edx
10467                 xor             eax,0
10468 
10469                 and             ecx,[GHMaskShifted16]
10470                 mov             esi,eax
10471 
10472                 mov             ebp,eax
10473                 and             esi,REDMASK2
10474 
10475                 and             ebp,GREENMASK2
10476                 mov             dword ptr[Red],esi
10477 
10478                 mov             dword ptr[Green],ebp
10479                 add             ebx,dword ptr[DeltaU]
10481 
10482 
10483                 fild    qword ptr[Red]                  ; r    LB   LG   LR
10484 
10485                 mov             ebp,eax
10486 
10487                 fmul    st,st(3)                                ; R    LB   LG   LR
10488                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
10489 
10490                 and             ebp,BLUEMASK
10491                 and             ebx,[GWMaskShifted]
10492 
10493                 mov             dword ptr[Blue],ebp
10494 
10495                 fmul    st,st(3)                                ; G    R    LB   LG   LR
10496                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
10497                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
10498                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
10499                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
10500                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
10501                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
10502                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
10503                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
10504                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
10505                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
10506                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
10507 
10508                 mov             eax,dword ptr[Bucket]
10509                 mov             ebp,dword ptr[Bucket2]
10510 
10511                 fstp    qword ptr[Bucket]               ; LB   LG   LR
10512 
10513                 and             eax,REDMASK2
10514                 and             ebp,BLUEMASK
10515                 
10516                 mov             esi,dword ptr[Bucket]
10517                 or              ebp,eax
10518 
10519                 add             ecx,ebx
10520                 and             esi,GREENMASK2
10521 
10522                 shr             ecx,16
10523                 or              ebp,esi
10524 
10525                 xor             eax,0
10526                 mov             esi,pTex
10527 
10528                 rol             ebp,16
10529                 add             edx,dword ptr[DeltaV]
10530 
10531                 mov             ax,word ptr[2*ecx+esi]
10532                 mov             ecx,edx
10533 
10534                 add             ebx,dword ptr[DeltaU]
10535                 and             ecx,[GHMaskShifted16]
10536 
10537                 and             ebx,[GWMaskShifted]
10538                 xor             eax,0
10539 
10540                 add             ecx,ebx
10541                 mov             [edi+24],ebp
10542 
10543                 shr             ecx,16
10544                 add             edx,dword ptr[DeltaV]
10545 
10546                 rol             eax,16
10547                 mov             ax,word ptr[2*ecx+esi]
10548 
10549                 mov             ecx,edx
10550                 xor             eax,0
10551 
10552                 and             ecx,[GHMaskShifted16]
10553                 mov             esi,eax
10554 
10555                 mov             ebp,eax
10556                 and             esi,REDMASK2
10557 
10558                 and             ebp,GREENMASK2
10559                 mov             dword ptr[Red],esi
10560 
10561                 mov             dword ptr[Green],ebp
10562                 add             ebx,dword ptr[DeltaU]
10564                 fild    qword ptr[Red]                  ; r    LB   LG   LR
10565 
10566                 mov             ebp,eax
10567 
10568                 fmul    st,st(3)                                ; R    LB   LG   LR
10569                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
10570 
10571                 and             ebp,BLUEMASK
10572                 and             ebx,[GWMaskShifted]
10573 
10574                 mov             dword ptr[Blue],ebp
10575 
10576                 fmul    st,st(3)                                ; G    R    LB   LG   LR
10577                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
10578                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
10579                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
10580                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
10581                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
10582                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
10583                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
10584                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
10585                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
10586                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
10587                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
10588 
10589                 mov             eax,dword ptr[Bucket]
10590                 mov             ebp,dword ptr[Bucket2]
10591 
10592                 fstp    qword ptr[Bucket]               ; LB   LG   LR
10593 
10594                 and             eax,REDMASK2
10595                 and             ebp,BLUEMASK
10596                 
10597                 mov             esi,dword ptr[Bucket]
10598                 or              ebp,eax
10599 
10600                 fstp    dword ptr[Bucket]
10601                 fstp    dword ptr[Bucket2]
10602                 fstp    dword ptr[Bucket]
10603 
10604                 and             esi,GREENMASK2
10605 
10606                 fld             dword ptr[FTemp5]
10607                 fld             dword ptr[FTemp4]
10608 
10609                 or              ebp,esi
10610 
10611                 fld             dword ptr[FTemp3]
10612                 fld             dword ptr[FTemp2]
10613 
10614                 rol             ebp,16
10615 
10616                 fld             dword ptr[FTemp1]
10617                 fld             dword ptr[FTemp0]
10618 
10619                 mov             [edi+28],ebp                            ; store pixel 0
10620                 pop             ebp
10621 
10622 
10623                 ; get corrected right side deltas ; st0  st1  st2  st3  st4  st5  st6  st7
10624                                                                                 ; ZR   UZR  ZRi  VZR  UL   VL
10625                 fld             st                                              ; ZR   ZR   UZR  ZRi  VZR  UL   VL
10626                 fmul    st,st(4)                                ; VR   ZR   UZR  ZRi  VZR  UL   VL
10627                 fxch    st(1)                                   ; ZR   VR   UZR  ZRi  VZR  UL   VL
10628                 fmul    st,st(2)                                ; UR   VR   UZR  ZRi  VZR  UL   VL
10629 
10630                 add             edi,32                                  ; move screen pointer to start of next aspan
10631                 dec             [NumASpans]                     ; dec num affine spans
10632                 jnz             SpanLoop16
10633 
10634 HandleLeftoverPixels16:
10635 
10636                 mov             esi,[pTex]
10637 
10638 
10639                 cmp             [RemainingCount],0
10640                 jz              FPUReturn16
10641 
10642                 //need one more stack spot
10643                 fstp    dword ptr[FloatTemp]    ; VR   UZR  ZRi  VZR  UL   VL
10644                 fld             st(4)                                   ; UL   VR   UZR  ZRi  VZR  UL   VL
10645                 fmul    [GLMapMulU]                             ; ULL  VR   UZR  ZRi  VZR  UL   VL
10646                 fld             st(5)                                   ; UL   ULL  VR   UZR  ZRi  VZR  UL   VL
10647                 fadd    qword ptr[MipMagic]             ; ULk  ULL  VR   UZR  ZRi  VZR  UL   VL
10648                 fxch    st(1)                                   ; ULL  ULk  VR   UZR  ZRi  VZR  UL   VL
10649                 fadd    qword ptr[MipMagic]             ; ULLk ULk  VR   UZR  ZRi  VZR  UL   VL
10650                 fxch    st(1)                                   ; ULk  ULLk VR   UZR  ZRi  VZR  UL   VL
10651                 fstp    qword ptr[Bucket]               ; ULLk VR   UZR  ZRi  VZR  UL   VL
10652                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
10653 
10654                 mov             ebx,dword ptr[Bucket]
10655                 mov             eax,dword ptr[Bucket2]
10656 
10657                 fld             st(5)                                   ; VL   VR   UZR  ZRi  VZR  UL   VL
10658                 fmul    [GLMapMulV]                             ; VLL  VR   UZR  ZRi  VZR  UL   VL
10659 
10660                 add             ebx,dword ptr[UAdjust]
10661                 add             eax,dword ptr[UAdjustL]
10662 
10663                 mov             [U1],ebx
10664                 mov             [UFixed],eax
10665 
10666                 fld             st(6)                                   ; VL   VLL  VR   UZR  ZRi  VZR  UL   VL
10667                 fadd    qword ptr[MipMagic]             ; VLk  VLL  VR   UZR  ZRi  VZR  UL   VL
10668                 fxch    st(1)                                   ; VLL  VLk  VR   UZR  ZRi  VZR  UL   VL
10669                 fadd    qword ptr[MipMagic]             ; VLLk VLk  VR   UZR  ZRi  VZR  UL   VL
10670                 fxch    st(1)                                   ; VLk  VLLk VR   UZR  ZRi  VZR  UL   VL
10671                 fstp    qword ptr[Bucket]               ; VLLk VR   UZR  ZRi  VZR  UL   VL
10672                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
10673 
10674                 mov             ebx,dword ptr[Bucket]
10675                 mov             eax,dword ptr[Bucket2]
10676 
10677                 fld             dword ptr[FloatTemp]    ; UR   VR   UZR  ZRi  VZR  UL   dV
10678 
10679                 add             ebx,dword ptr[VAdjust]
10680                 add             eax,dword ptr[VAdjustL]
10681 
10682                 mov             [V1],ebx
10683                 mov             [VFixed],eax
10684 
10685                 dec             [RemainingCount]
10686                 jz              OnePixelSpan16
10687 
10688 
10689                 //must get rid of this wasted time
10690                 fstp    [FloatTemp]                             ; inv. inv. inv. inv. UL   VL
10691                 fstp    [FloatTemp]                             ; inv. inv. inv. UL   VL
10692                 fstp    [FloatTemp]                             ; inv. inv. UL   VL
10693                 fstp    [FloatTemp]                             ; inv. UL   VL
10694                 fstp    [FloatTemp]                             ; UL   VL
10695                 fild    [y]                                             ; y    UL   VL
10696                 fild    [x2]                                    ; xr   y    UL   VL
10697 
10698                 fld             [UDivZStepY]                    ; UZdY xr   y    UL   VL
10699                 fld             [UDivZStepX]                    ; UZdX UZdY xr   y    UL   VL
10700                 fmul    st,st(2)                                ; UZX  UZdY xr   y    UL   VL
10701                 fld             [VDivZStepY]                    ; VZdY UZX  UZdY xr   y    UL   VL
10702                 fld             [VDivZStepX]                    ; VZdX VZdY UZX  UZdY xr   y    UL   VL
10703                 fxch    st(3)                                   ; UZdy VZdY UZX  VZdX xr   y    UL   VL
10704                 fmul    st,st(5)                                ; UZY  VZdY UZX  VZdX xr   y    UL   VL
10705                 fxch    st(2)                                   ; UZX  VZdY UZY  VZdX xr   y    UL   VL
10706                 fadd    [UDivZOrigin]                   ; UZXS VZdY UZY  VZdX xr   y    UL   VL
10707                 fxch    st(3)                                   ; VZdX VZdY UZY  UZXS xr   y    UL   VL
10708                 fmul    st,st(4)                                ; VZX  VZdY UZY  UZXS xr   y    UL   VL
10709                 fxch    st(2)                                   ; UZY  VZdY VZX  UZXS xr   y    UL   VL
10710                 faddp   st(3),st                                ; VZdY VZX  UZ   xr   y    UL   VL
10711                 fmul    st,st(4)                                ; VZY  VZX  UZ   xr   y    UL   VL
10712                 fxch    st(1)                                   ; VZX  VZY  UZ   xr   y    UL   VL
10713                 fadd    [VDivZOrigin]                   ; VZXS VZY  UZ   xr   y    UL   VL
10714                 fld             [ZiStepX]                               ; ZdX  VZXS VZY  UZ   xr   y    UL   VL
10715                 fmulp   st(4),st                                ; VZXS VZY  UZ   ZX   y    UL   VL
10716                 faddp   st(1),st                                ; VZ   UZ   ZX   y    UL   VL
10717                 fld             [ZiStepY]                               ; ZdY  VZ   UZ   ZX   y    UL   VL
10718                 fmulp   st(4),st                                ; VZ   UZ   ZX   ZY   UL   VL
10719                 fxch    st(2)                                   ; ZX   UZ   VZ   ZY   UL   VL
10720                 fadd    [ZiOrigin]                              ; ZXS  UZ   VZ   ZY   UL   VL
10721 
10722                 faddp   st(3),st                                ; UZ   VZ   Zi   UL   VL
10723                 fld1                                                    ; 1    UZ   VZ   Zi   UL   VL
10724                 fdiv    st,st(3)                                ; ZR   UZ   VZ   Zi   UL   VL
10725 
10726                 fld             st                                              ; ZR   ZR   UZ   VZ   Zi   UL   VL
10727                 fmul    st,st(3)                                ; VR   ZR   UZ   VZ   Zi   UL   VL
10728                 fxch    st(1)                                   ; ZR   VR   UZ   VZ   Zi   UL   VL
10729                 fmul    st,st(2)                                ; UR   VR   UZ   VZ   Zi   UL   VL
10730 
10731                 //lazy idiv below... should 1/int mul mul
10732 
10733                 ; calculate deltas                              ; st0  st1  st2  st3  st4  st5  st6  st7
10734                 fsubr   st(5),st                                ; UR   VR   inv. inv. inv. dU   VL
10735                 fxch    st(1)                                   ; VR   UR   inv. inv. inv. dU   VL
10736                 fsubr   st(6),st                                ; VR   UR   inv. inv. inv. dU   dV
10737                 fxch    st(6)                                   ; dV   UR   inv. inv. inv. dU   VR
10738                 fidiv   dword ptr[RemainingCount];dv   UR   inv. inv. inv. dU   VR
10739                 fadd    qword ptr[MipMagic]             ; dvk  UR   inv. inv. inv. dU   VR
10740                 fxch    st(5)                                   ; dU   UR   inv. inv. inv. dvk  VR
10741                 fidiv   dword ptr[RemainingCount];du   UR   inv. inv. inv. dvk  VR
10742                 fadd    qword ptr[MipMagic]             ; duk  UR   inv. inv. inv. dvk  VR
10743                 fxch    st(5)                                   ; dvk  UR   inv. inv. inv. duk  VR
10744                 fstp    qword ptr[DeltaV]               ; UR   inv. inv. inv. duk  VR
10745                 fxch    st(4)                                   ; duk  inv. inv. inv. UR   VR
10746                 fstp    qword ptr[DeltaU]               ; inv. inv. inv. UR   VR
10747                 fld             st(1)                                   ; inv. inv. inv. inv. UR   VR
10748                 fld             st(2)                                   ; inv. inv. inv. inv. inv. UR   VR
10749 
10750 OnePixelSpan16:
10751                 // Clamp U/V
10752                 mov             ebx,[UFixed]
10753                 cmp             ebx,MaxU
10754                 jle             TryClampU116
10755                 mov             ecx,MaxU
10756                 mov             dword ptr[UFixed],ecx
10757                 jmp             NoClampU116
10758 
10759 TryClampU116:
10760                 cmp             ebx,0
10761                 jge             NoClampU116
10762                 mov             dword ptr[UFixed],0
10763 NoClampU116:
10764                 mov             eax,[VFixed]
10765                 cmp             eax,MaxV
10766                 jle             TryClampV116
10767                 mov             ecx,MaxV
10768                 mov             dword ptr[VFixed],ecx
10769                 jmp             NoClampV116
10770 
10771 TryClampV116:
10772                 cmp             eax,0
10773                 jge             NoClampV116
10774                 mov             dword ptr[VFixed],0
10775 
10776 NoClampV116:
10777                 mov             esi,dword ptr[UFixed]
10778                 mov             eax,dword ptr[VFixed]
10779 
10780                 mov ecx, GMipLevel4_8
10781                 sar esi, cl
10782                 sar eax, cl
10783                 and esi, 0ffh
10784                 and eax, 0ffh
10785                 mov UDist, esi
10786                 mov VDist, eax
10787 
10788                 mov esi,dword ptr[UFixed]
10789                 mov eax,dword ptr[VFixed]
10790                 mov ecx, GMipLevel20
10791                 shr esi, cl
10792                 shr eax, cl
10793 
10794                 imul eax, GLightWidth
10795                 add esi, eax
10796 
10797                 mov edx, esi
10798                 shl esi, 1
10799                 add edx, esi
10800 
10801                 add edx, GLightData
10802 
10803                 // Interpolate accross top
10804                 xor ecx, ecx
10805                 mov cl, [edx+3]
10806                 mov eax, ecx
10807                 mov cl, [edx+0]
10808                 sub eax, ecx
10809                 imul eax, UDist
10810                 shl ecx, 8
10811                 add eax, ecx
10812                 mov [R1], eax
10813 
10814                 xor ecx, ecx
10815                 mov cl, [edx+4]
10816                 mov eax, ecx
10817                 mov cl, [edx+1]
10818                 sub eax, ecx
10819                 imul eax, UDist
10820                 shl ecx, 8
10821                 add eax, ecx
10822                 mov [G1], eax
10823 
10824                 xor ecx, ecx
10825                 mov cl, [edx+5]
10826                 mov eax, ecx
10827                 mov cl, [edx+2]
10828                 sub eax, ecx
10829                 imul eax, UDist
10830                 shl ecx, 8
10831                 add eax, ecx
10832                 mov [B1], eax
10833 
10834                 add edx, GLightWidth
10835                 add edx, GLightWidth
10836                 add edx, GLightWidth
10837 
10838                 // Interpolate accross bottom
10839                 xor ecx, ecx
10840                 mov cl, [edx+3]
10841                 mov eax, ecx
10842                 mov cl, [edx+0]
10843                 sub eax, ecx
10844                 imul eax, UDist
10845                 shl ecx, 8
10846                 add eax, ecx
10847                 mov [R2], eax
10848 
10849                 xor ecx, ecx
10850                 mov cl, [edx+4]
10851                 mov eax, ecx
10852                 mov cl, [edx+1]
10853                 sub eax, ecx
10854                 imul eax, UDist
10855                 shl ecx, 8
10856                 add eax, ecx
10857                 mov [G2], eax
10858 
10859                 xor ecx, ecx
10860                 mov cl, [edx+5]
10861                 mov eax, ecx
10862                 mov cl, [edx+2]
10863                 sub eax, ecx
10864                 imul eax, UDist
10865                 shl ecx, 8
10866                 add eax, ecx
10867                 mov [B2], eax
10868 
10869                 // Interpolate down
10870                 mov eax, [R2]
10871                 sub eax, [R1]
10872                 imul eax, VDist
10873                 sar eax, 8
10874                 add eax, [R1]
10875                 shr eax, 8
10876                 and     eax,0feh
10877 
10878                 mov [RR1], eax
10879 
10880                 mov eax, [G2]
10881                 sub eax, [G1]
10882                 imul eax, VDist
10883                 sar eax, 8
10884                 add eax, [G1]
10885                 shr eax, 8
10886                 and     eax,0feh
10887 
10888                 mov [GG1], eax
10889 
10890                 mov eax, [B2]
10891                 sub eax, [B1]
10892                 imul eax, VDist
10893                 sar eax, 8
10894                 add eax, [B1]
10895                 shr eax, 8
10896                 and     eax,0feh
10897 
10898                 mov [BB1], eax
10899 
10900                 fstp    [FTemp0]
10901                 fstp    [FTemp1]
10902                 fstp    [FTemp2]
10903                 fstp    [FTemp3]
10904                 fstp    [FTemp4]
10905                 fstp    [FTemp5]
10906 
10907                 mov             ebx,dword ptr[U1]
10908                 mov             edx,dword ptr[V1]
10909 
10910                 fild    [RR1]                                   ; LR
10911                 fild    [GG1]                                   ; LG   LR
10912                 fild    [BB1]                                   ; LB   LG   LR
10913 
10914                 mov             ecx,[VShift]
10915                 add             edx,dword ptr[VAdjust2]
10916 
10917                 add             ebx,dword ptr[UAdjust2]
10918                 mov             eax,dword ptr[DeltaV]
10919 
10920                 shl             eax,cl
10921                 mov             esi,pTex
10922 
10923                 shl             edx,cl
10924                 mov             dword ptr[DeltaV],eax
10925 
10926 
10927                 push    ebp
10928 
10929 LeftoverLoop16:
10930                 mov             eax,edx
10931                 and             ebx,[GWMaskShifted]
10932 
10933                 and             eax,[GHMaskShifted16]
10934 
10935                 add             eax,ebx
10936                 add             ebx,dword ptr[DeltaU]
10937 
10938                 shr             eax,16
10939                 add             edi,2
10940 
10941                 mov             ax,word ptr[2*eax+esi]
10942                 add             edx,dword ptr[DeltaV]
10943 
10944                 xor             eax,0
10945 
10946                 mov             esi,eax
10947                 mov             ebp,eax
10948 
10949                 and             esi,REDMASK2
10950                 and             ebp,GREENMASK2
10951 
10952                 mov             dword ptr[Red],esi
10953                 mov             dword ptr[Green],ebp
10954 
10955                 fild    qword ptr[Red]                  ; r    LB   LG   LR
10956 
10957                 mov             ebp,eax
10958 
10959                 fmul    st,st(3)                                ; R    LB   LG   LR
10960                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
10961 
10962                 and             ebp,BLUEMASK
10963 
10964                 mov             dword ptr[Blue],ebp
10965 
10966                 fmul    st,st(3)                                ; G    R    LB   LG   LR
10967                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
10968                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
10969                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
10970                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
10971                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
10972                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
10973                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
10974                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
10975                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
10976                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
10977                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
10978 
10979                 mov             eax,dword ptr[Bucket]
10980                 mov             ebp,dword ptr[Bucket2]
10981 
10982                 fstp    qword ptr[Bucket]               ; LB   LG   LR
10983 
10984                 and             eax,REDMASK2
10985                 and             ebp,BLUEMASK
10986                 
10987                 mov             esi,dword ptr[Bucket]
10988                 or              ebp,eax
10989 
10990                 and             esi,GREENMASK2
10991 
10992                 or              ebp,esi
10993 
10994                 mov             esi,pTex
10995 
10996                 mov             word ptr[edi-2],bp
10997 
10998                 dec             [RemainingCount]
10999                 jge             LeftoverLoop16
11000 
11001                 pop             ebp
11002 
11003 
11004 FPUReturn16:
11005                 ffree   st(0)
11006                 ffree   st(1)
11007                 ffree   st(2)
11008                 ffree   st(3)
11009                 ffree   st(4)
11010                 ffree   st(5)
11011                 ffree   st(6)
11012 
11013 Return16:
11014         }
11015 }

void DrawSpan16_AsmLitZBuffer555X86FPU int32  x1,
int32  x2,
int32  y
 

Definition at line 3562 of file x86span555.c.

References B, B1, B2, BB1, Blue, BLUEMASK, Bucket, Bucket2, DeltaU, DeltaV, Dest, FloatTemp, FTemp0, FTemp1, FTemp2, FTemp3, FTemp4, FTemp5, G, G1, G2, GBitPtr16, GG1, GHMaskShifted16, GLightData, GLightWidth, GLMapMulU, GLMapMulV, GMipLevel20, GMipLevel4_8, Green, GREENMASK2, GWMaskShifted, Magic, MaxU, MaxV, MipMagic, MipMagic2, NumASpans, or, pointer, pTex, pZBufferPtr, r, R, R1, R2, Red, REDMASK2, RemainingCount, RR1, TDest, Two, U1, UAdjust, UAdjust2, UAdjustL, UDist, UDivZ16StepX, UDivZOrigin, UDivZStepX, UDivZStepY, UFixed, V1, VAdjust, VAdjust2, VAdjustL, VDist, VDivZ16StepX, VDivZOrigin, VDivZStepX, VDivZStepY, VFixed, VShift, y, ZBufferPrec, ZDelta, Zi, Zi16StepX, ZiOrigin, ZiStepX, ZiStepY, and ZVal.

Referenced by AddSpanDraw().

03563 {
03564         TDest   =Dest;
03565         _asm
03566         {
03567                 push    ebx
03568                 push    ecx
03569                 push    esi
03570                 push    edi
03571 
03572                 mov             eax,x1
03573                 mov             ecx,x2
03574                 sub             ecx,eax
03575                 jle             Return16
03576 
03577                 mov             edi,[GBitPtr16]
03578                 mov             pTex,edi
03579 
03580                 fild    [y]                                             ; y
03581 
03582                 mov             esi,x1
03583                 mov             edi,[TDest]
03584 
03585                 shl             esi,1
03586                 mov             eax,ecx
03587 
03588                 add             edi,esi
03589                 add             pZBufferPtr,esi
03590 
03591                 shr             ecx,4
03592                 and             eax,15
03593                 _emit 75h
03594                 _emit 06h
03595                 dec             ecx
03596                 mov             eax,16
03597 
03598                 mov             [NumASpans],ecx
03599                 mov             [RemainingCount],eax
03600 
03601                 fild [x1]                                               ; x    y
03602 
03603                 //decoder won't keep up with these huge instructions
03604                 //need to find some int instructions to cram in here somewhere
03605                 fld             [UDivZStepY]                    ; UZdY x    y
03606                 fld             [UDivZStepX]                    ; UZdX UZdY x    y
03607                 fmul    st,st(2)                                ; UZX  UZdY x    y
03608                 fld             [VDivZStepY]                    ; VZdY UZX  UZdY x    y
03609                 fld             [VDivZStepX]                    ; VZdX VZdY UZX  UZdY x    y
03610                 fxch    st(3)                                   ; UZdy VZdY UZX  VZdX x    y
03611                 fmul    st,st(5)                                ; UZY  VZdY UZX  VZdX x    y
03612                 fxch    st(2)                                   ; UZX  VZdY UZY  VZdX x    y
03613                 fadd    [UDivZOrigin]                   ; UZXS VZdY UZY  VZdX x    y
03614                 fxch    st(3)                                   ; VZdX VZdY UZY  UZXS x    y
03615                 fmul    st,st(4)                                ; VZX  VZdY UZY  UZXS x    y
03616                 fxch    st(2)                                   ; UZY  VZdY VZX  UZXS x    y
03617                 faddp   st(3),st                                ; VZdY VZX  UZ   x    y
03618                 fmul    st,st(4)                                ; VZY  VZX  UZ   x    y
03619                 fxch    st(1)                                   ; VZX  VZY  UZ   x    y
03620                 fadd    [VDivZOrigin]                   ; VZXS VZY  UZ   x    y
03621                 fld             [ZiStepX]                               ; ZdX  VZXS VZY  UZ   x    y
03622 
03623                 //zbuffer step action
03624                 fld             [ZiStepX]
03625                 fmul    dword ptr[ZBufferPrec]
03626                 fmul    dword ptr[Two]
03627                 fistp   dword ptr[ZDelta]
03628 
03629                 fmulp   st(4),st                                ; VZXS VZY  UZ   ZX   y
03630                 faddp   st(1),st                                ; VZ   UZ   ZX   y
03631                 fld             [ZiStepY]                               ; ZdY  VZ   UZ   ZX   y
03632                 fmulp   st(4),st                                ; VZ   UZ   ZX   ZY
03633                 fxch    st(2)                                   ; ZX   UZ   VZ   ZY
03634                 fadd    [ZiOrigin]                              ; ZXS  UZ   VZ   ZY
03635 
03636                 //room for two cycles of int instructions here
03637 
03638                 faddp   st(3),st                                ; UZ   VZ   Zi
03639                 fld1                                                    ; 1    UZ   VZ   Zi
03640                 fdiv    st,st(3)                                ; ZL   UZ   VZ   Zi
03641 
03642                 //room for 18 cycles of int instructions here
03643 
03644                 fld             st                                              ; ZL   ZL   UZ   VZ   Zi
03645                 fmul    st,st(3)                                ; VL   ZL   UZ   VZ   Zi
03646                 fxch    st(4)                                   ; Zi   ZL   UZ   VZ   VL
03647 
03648                 //zbuffer action
03649                 fld             st
03650                 fmul    dword ptr[ZBufferPrec]
03651                 fistp   dword ptr[ZVal]
03652 
03653                 fadd    [Zi16StepX]                             ; ZRi  ZL   UZ   VZ   VL
03654                 fxch    st(1)                                   ; ZL   ZRi  UZ   VZ   VL
03655                 fmul    st,st(2)                                ; UL   ZRi  UZ   VZ   VL
03656                 fxch    st(3)                                   ; VZ   ZRi  UZ   UL   VL
03657                 fadd    [VDivZ16StepX]                  ; VZR  ZRi  UZ   UL   VL
03658                 fxch    st(2)                                   ; UZ   ZRi  VZR  UL   VL
03659                 fadd    [UDivZ16StepX]                  ; UZR  ZRi  VZR  UL   VL
03660                 fld1                                                    ; 1    UZR  ZRi  VZR  UL   VL
03661                 fdiv    st,st(2)                                ; ZR   UZR  ZRi  VZR  UL   VL
03662 
03663                 //room for 18 cycles of int stuff here
03664 
03665                 fld             st                                              ; ZR   ZR   UZR  ZRi  VZR  UL   VL
03666                 fmul    st,st(4)                                ; VR   ZR   UZR  ZRi  VZR  UL   VL
03667                 fxch    st(1)                                   ; ZR   VR   UZR  ZRi  VZR  UL   VL
03668                 //fmul stall one cycle
03669                 fmul    st,st(2)                                ; UR   VR   UZR  ZRi  VZR  UL   VL
03670 
03671                 test    ecx,ecx
03672                 jz              HandleLeftoverPixels16
03673 
03674 SpanLoop16:
03675                 //need one more stack spot
03676                 fstp    dword ptr[FloatTemp]    ; VR   UZR  ZRi  VZR  UL   VL
03677                 fld             st(4)                                   ; UL   VR   UZR  ZRi  VZR  UL   VL
03678                 fmul    [GLMapMulU]                             ; ULL  VR   UZR  ZRi  VZR  UL   VL
03679                 fld             st(5)                                   ; UL   ULL  VR   UZR  ZRi  VZR  UL   VL
03680                 fadd    qword ptr[MipMagic]             ; ULk  ULL  VR   UZR  ZRi  VZR  UL   VL
03681                 fxch    st(1)                                   ; ULL  ULk  VR   UZR  ZRi  VZR  UL   VL
03682                 fadd    qword ptr[MipMagic]             ; ULLk ULk  VR   UZR  ZRi  VZR  UL   VL
03683                 fxch    st(1)                                   ; ULk  ULLk VR   UZR  ZRi  VZR  UL   VL
03684                 fstp    qword ptr[Bucket]               ; ULLk VR   UZR  ZRi  VZR  UL   VL
03685                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
03686 
03687                 mov             ebx,dword ptr[Bucket]
03688                 mov             eax,dword ptr[Bucket2]
03689 
03690                 fld             st(5)                                   ; VL   VR   UZR  ZRi  VZR  UL   VL
03691                 fmul    [GLMapMulV]                             ; VLL  VR   UZR  ZRi  VZR  UL   VL
03692 
03693                 add             ebx,dword ptr[UAdjust]
03694                 add             eax,dword ptr[UAdjustL]
03695 
03696                 mov             [U1],ebx
03697                 mov             [UFixed],eax
03698 
03699                 fld             st(6)                                   ; VL   VLL  VR   UZR  ZRi  VZR  UL   VL
03700                 fadd    qword ptr[MipMagic]             ; VLk  VLL  VR   UZR  ZRi  VZR  UL   VL
03701                 fxch    st(1)                                   ; VLL  VLk  VR   UZR  ZRi  VZR  UL   VL
03702                 fadd    qword ptr[MipMagic]             ; VLLk VLk  VR   UZR  ZRi  VZR  UL   VL
03703                 fxch    st(1)                                   ; VLk  VLLk VR   UZR  ZRi  VZR  UL   VL
03704                 fstp    qword ptr[Bucket]               ; VLLk VR   UZR  ZRi  VZR  UL   VL
03705                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
03706                 fsubr   st(5),st                                ; VR   UZR  ZRi  VZR  UL   dV
03707 
03708                 mov             ebx,dword ptr[Bucket]
03709                 mov             eax,dword ptr[Bucket2]
03710 
03711                 fld             dword ptr[FloatTemp]    ; UR   VR   UZR  ZRi  VZR  UL   dV
03712 
03713                 add             ebx,dword ptr[VAdjust]
03714                 add             eax,dword ptr[VAdjustL]
03715 
03716                 mov             [V1],ebx
03717                 mov             [VFixed],eax
03718 
03719                 fsubr   st(5),st                                ; UR   VR   UZR  ZRi  VZR  dU   dV
03720                 fxch    st(6)                                   ; dV   VR   UZR  ZRi  VZR  dU   UR
03721                 fadd    qword ptr[MipMagic2]    ; dVk  VR   UZR  ZRi  VZR  dU   UR
03722                 fxch    st(5)                                   ; dU   VR   UZR  ZRi  VZR  dVk  UR
03723                 fadd    qword ptr[MipMagic2]    ; dUk  VR   UZR  ZRi  VZR  dVk  UR
03724                 fxch    st(5)                                   ; dVk  VR   UZR  ZRi  VZR  dUk  UR
03725                 fstp    qword ptr[DeltaV]               ; VR   UZR  ZRi  VZR  dUk  UR
03726                 fxch    st(5)                                   ; UR   UZR  ZRi  VZR  dUk  VR
03727                 //gotta do this to get em lined back up right
03728                 fxch    st(4)                                   ; dUk  UZR  ZRi  VZR  UR   VR
03729                 fstp    qword ptr[DeltaU]               ; UZR  ZRi  VZR  UR   VR
03730 
03731                 //right becomes left                    ; UZL  ZLi  VZL  UL   VL
03732                 fadd    [UDivZ16StepX]                  ; UZR  ZLi  VZL  UL   VL
03733                 fxch    st(1)                                   ; ZLi  UZR  VZL  UL   VL
03734                 fadd    [Zi16StepX]                             ; ZRi  UZR  VZL  UL   VL
03735                 fxch    st(2)                                   ; VZL  UZR  ZRi  UL   VL
03736                 fadd    [VDivZ16StepX]                  ; VZR  UZR  ZRi  UL   VL
03737                 fxch    st(2)                                   ; ZRi  UZR  VZR  UL   VL
03738                 fxch    st(1)                                   ; UZR  ZRi  VZR  UL   VL
03739                 fld1                                                    ; 1    UZR  ZRi  VZR  UL   VL
03740                 fdiv    st,st(2)                                ; ZR   UZR  ZRi  VZR  UL   VL
03741 
03742                 // Clamp U/V
03743                 mov             ebx,[UFixed]
03744                 cmp             ebx,MaxU
03745                 jle             TryClampU016
03746                 mov             ecx,MaxU
03747                 mov             dword ptr[UFixed],ecx
03748                 jmp             NoClampU016
03749 
03750 TryClampU016:
03751                 cmp             ebx,0
03752                 jge             NoClampU016
03753                 mov             dword ptr[UFixed],0
03754 NoClampU016:
03755                 mov             eax,[VFixed]
03756                 cmp             eax,MaxV
03757                 jle             TryClampV016
03758                 mov             ecx,MaxV
03759                 mov             dword ptr[VFixed],ecx
03760                 jmp             NoClampV016
03761 
03762 TryClampV016:
03763                 cmp             eax,0
03764                 jge             NoClampV016
03765                 mov             dword ptr[VFixed],0
03766 
03767 NoClampV016:
03768 
03769 
03770                 mov esi,dword ptr[UFixed]
03771                 mov eax,dword ptr[VFixed]
03772 
03773 
03774                 mov ecx, GMipLevel4_8
03775                 sar esi, cl
03776                 sar eax, cl
03777                 and esi, 0ffh
03778                 and eax, 0ffh
03779                 mov UDist, esi
03780                 mov VDist, eax
03781 
03782                 mov esi,dword ptr[UFixed]
03783                 mov eax,dword ptr[VFixed]
03784                 mov ecx, GMipLevel20
03785                 shr esi, cl
03786                 shr eax, cl
03787 
03788                 imul eax, GLightWidth
03789                 add esi, eax
03790 
03791                 mov edx, esi
03792                 shl esi, 1
03793                 add edx, esi
03794 
03795                 add edx, GLightData
03796 
03797                 // Interpolate accross top
03798                 xor ecx, ecx
03799                 mov cl, [edx+3]
03800                 mov eax, ecx
03801                 mov cl, [edx+0]
03802                 sub eax, ecx
03803                 imul eax, UDist
03804                 shl ecx, 8
03805                 add eax, ecx
03806                 mov [R1], eax
03807 
03808                 xor ecx, ecx
03809                 mov cl, [edx+4]
03810                 mov eax, ecx
03811                 mov cl, [edx+1]
03812                 sub eax, ecx
03813                 imul eax, UDist
03814                 shl ecx, 8
03815                 add eax, ecx
03816                 mov [G1], eax
03817 
03818                 xor ecx, ecx
03819                 mov cl, [edx+5]
03820                 mov eax, ecx
03821                 mov cl, [edx+2]
03822                 sub eax, ecx
03823                 imul eax, UDist
03824                 shl ecx, 8
03825                 add eax, ecx
03826                 mov [B1], eax
03827 
03828                 add edx, GLightWidth
03829                 add edx, GLightWidth
03830                 add edx, GLightWidth
03831 
03832                 // Interpolate accross bottom
03833                 xor ecx, ecx
03834                 mov cl, [edx+3]
03835                 mov eax, ecx
03836                 mov cl, [edx+0]
03837                 sub eax, ecx
03838                 imul eax, UDist
03839                 shl ecx, 8
03840                 add eax, ecx
03841                 mov [R2], eax
03842 
03843                 xor ecx, ecx
03844                 mov cl, [edx+4]
03845                 mov eax, ecx
03846                 mov cl, [edx+1]
03847                 sub eax, ecx
03848                 imul eax, UDist
03849                 shl ecx, 8
03850                 add eax, ecx
03851                 mov [G2], eax
03852 
03853                 xor ecx, ecx
03854                 mov cl, [edx+5]
03855                 mov eax, ecx
03856                 mov cl, [edx+2]
03857                 sub eax, ecx
03858                 imul eax, UDist
03859                 shl ecx, 8
03860                 add eax, ecx
03861                 mov [B2], eax
03862 
03863                 // Interpolate down
03864                 mov eax, [R2]
03865                 sub eax, [R1]
03866                 imul eax, VDist
03867                 sar eax, 8
03868                 add eax, [R1]
03869                 shr eax, 8
03870                 and     eax,0feh
03871 
03872                 mov [RR1], eax
03873 
03874                 mov eax, [G2]
03875                 sub eax, [G1]
03876                 imul eax, VDist
03877                 sar eax, 8
03878                 add eax, [G1]
03879                 shr eax, 8
03880                 and     eax,0feh
03881 
03882                 mov [GG1], eax
03883 
03884                 mov eax, [B2]
03885                 sub eax, [B1]
03886                 imul eax, VDist
03887                 sar eax, 8
03888                 add eax, [B1]
03889                 shr eax, 8
03890                 and     eax,0feh
03891 
03892                 mov [BB1], eax
03893 
03894                 fstp    [FTemp0]                                ; UZR  ZRi  VZR  UL   VL
03895                 fstp    [FTemp1]                                ; ZRi  VZR  UL   VL
03896                 fstp    [FTemp2]                                ; VZR  UL   VL
03897                 fstp    [FTemp3]                                ; UL   VL
03898                 fstp    [FTemp4]                                ; VL
03899                 fstp    [FTemp5]                                ; 
03900 
03901                 fild    [RR1]                                   ; LR
03902                 fild    [GG1]                                   ; LG   LR
03903                 fild    [BB1]                                   ; LB   LG   LR
03904                 
03905                 
03906                 mov             ebx,dword ptr[U1]
03907                 mov             eax,dword ptr[V1]
03908 
03909                 add             ebx,dword ptr[UAdjust2]
03910                 add             eax,dword ptr[VAdjust2]
03911 
03912                 mov             ecx,[VShift]
03913                 mov             dword ptr[Bucket],ebx
03914 
03915                 shl             eax,cl
03916 
03917                 push    ebp
03918 
03919                 mov             dword ptr[Bucket2],eax
03920                 mov             ebp,dword ptr[DeltaV]
03921 
03922                 and             eax,[GHMaskShifted16]
03923                 and             ebx,[GWMaskShifted]
03924 
03925                 shl             ebp,cl
03926                 add             eax,ebx
03927 
03928                 mov             edx,dword ptr[Bucket2]
03929                 mov             esi,pTex
03930 
03931                 shr             eax,16
03932                 mov             dword ptr[DeltaV],ebp
03933 
03934                 mov             ebx,dword ptr[Bucket]
03935 
03936                 mov             ax,word ptr[2*eax+esi]
03937                 add             edx,dword ptr[DeltaV]
03938 
03939                 xor             eax,0
03940                 mov             ecx,edx
03941 
03942                 add             ebx,dword ptr[DeltaU]
03943                 and             ecx,[GHMaskShifted16]
03944 
03945                 rol             eax,16
03946                 and             ebx,[GWMaskShifted]
03947 
03948                 xor             eax,0
03949                 add             ecx,ebx
03950 
03951                 add             edx,dword ptr[DeltaV]
03952                 mov             esi,pTex
03953 
03954                 shr             ecx,16
03955                 add             ebx,dword ptr[DeltaU]
03956 
03957                 mov             ax,word ptr[2*ecx+esi]
03958                 mov             ecx,edx
03959 
03960                 xor             eax,0
03961                 and             ecx,[GHMaskShifted16]
03962 
03963                 mov             esi,eax
03964                 mov             ebp,eax
03965 
03966                 and             esi,REDMASK2
03967                 and             ebp,GREENMASK2
03968 
03969                 mov             dword ptr[Red],esi
03970                 mov             dword ptr[Green],ebp
03971 
03972                 fild    qword ptr[Red]                  ; r    LB   LG   LR
03973 
03974                 mov             ebp,eax
03975 
03976                 fmul    st,st(3)                                ; R    LB   LG   LR
03977                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
03978 
03979                 and             ebp,BLUEMASK
03980                 and             ebx,[GWMaskShifted]
03981 
03982                 mov             dword ptr[Blue],ebp
03983 
03984                 fmul    st,st(3)                                ; G    R    LB   LG   LR
03985                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
03986                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
03987                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
03988                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
03989                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
03990                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
03991                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
03992                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
03993                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
03994                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
03995                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
03996 
03997                 mov             eax,dword ptr[Bucket]
03998                 mov             ebp,dword ptr[Bucket2]
03999 
04000                 fstp    qword ptr[Bucket]               ; LB   LG   LR
04001 
04002                 and             eax,REDMASK2
04003                 and             ebp,BLUEMASK
04004                 
04005                 mov             esi,dword ptr[Bucket]
04006                 or              ebp,eax
04007 
04008                 add             ecx,ebx
04009                 and             esi,GREENMASK2
04010 
04011                 shr             ecx,16
04012                 or              ebp,esi
04013 
04014                 xor             eax,0
04015                 mov             esi,pTex
04016 
04017                 rol             ebp,16
04018                 add             edx,dword ptr[DeltaV]
04019 
04020                 mov             ax,word ptr[2*ecx+esi]
04021                 mov             ecx,[ZVal]
04022 
04023                 mov             esi,[ZVal]
04024                 add             ecx,[ZDelta]
04025 
04026                 shr             esi,16
04027                 mov             [ZVal],ecx
04028 
04029                 mov             ecx,pZBufferPtr
04030 
04031                 cmp             si,word ptr[ecx+0]
04032                 jle             Skip0
04033 
04034                 mov             [edi+0],ebp
04035                 mov             word ptr[ecx+0],si
04036                 mov             word ptr[ecx+2],si
04037 
04038 Skip0:
04039                 mov             ecx,edx
04040 
04041                 add             ebx,dword ptr[DeltaU]
04042                 and             ecx,[GHMaskShifted16]
04043 
04044                 and             ebx,[GWMaskShifted]
04045                 xor             eax,0
04046 
04047                 add             ecx,ebx
04048                 mov             esi,pTex
04049 
04050                 rol             eax,16
04051                 add             edx,dword ptr[DeltaV]
04052 
04053                 shr             ecx,16
04054                 add             ebx,dword ptr[DeltaU]
04055 
04056                 mov             ax,word ptr[2*ecx+esi]
04057 
04058                 mov             ecx,edx
04059                 xor             eax,0
04060 
04061                 and             ecx,[GHMaskShifted16]
04062                 mov             esi,eax
04063 
04064                 mov             ebp,eax
04065                 and             esi,REDMASK2
04066 
04067                 and             ebp,GREENMASK2
04068                 mov             dword ptr[Red],esi
04069 
04070                 mov             dword ptr[Green],ebp
04072 
04073 
04074                 fild    qword ptr[Red]                  ; r    LB   LG   LR
04075 
04076                 mov             ebp,eax
04077 
04078                 fmul    st,st(3)                                ; R    LB   LG   LR
04079                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
04080 
04081                 and             ebp,BLUEMASK
04082                 and             ebx,[GWMaskShifted]
04083 
04084                 mov             dword ptr[Blue],ebp
04085 
04086                 fmul    st,st(3)                                ; G    R    LB   LG   LR
04087                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
04088                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
04089                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
04090                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
04091                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
04092                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
04093                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
04094                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
04095                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
04096                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
04097                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
04098 
04099                 mov             eax,dword ptr[Bucket]
04100                 mov             ebp,dword ptr[Bucket2]
04101 
04102                 fstp    qword ptr[Bucket]               ; LB   LG   LR
04103 
04104                 and             eax,REDMASK2
04105                 and             ebp,BLUEMASK
04106                 
04107                 mov             esi,dword ptr[Bucket]
04108                 or              ebp,eax
04109 
04110                 add             ecx,ebx
04111                 and             esi,GREENMASK2
04112 
04113                 shr             ecx,16
04114                 or              ebp,esi
04115 
04116                 xor             eax,0
04117                 mov             esi,pTex
04118 
04119                 rol             ebp,16
04120                 add             edx,dword ptr[DeltaV]
04121 
04122                 mov             ax,word ptr[2*ecx+esi]
04123                 mov             ecx,[ZVal]
04124 
04125                 mov             esi,[ZVal]
04126                 add             ecx,[ZDelta]
04127 
04128                 shr             esi,16
04129                 mov             [ZVal],ecx
04130 
04131                 mov             ecx,pZBufferPtr
04132 
04133                 cmp             si,word ptr[ecx+4]
04134                 jle             Skip1
04135 
04136                 mov             [edi+4],ebp
04137                 mov             word ptr[ecx+4],si
04138                 mov             word ptr[ecx+6],si
04139 
04140 Skip1:
04141                 mov             ecx,edx
04142 
04143                 add             ebx,dword ptr[DeltaU]
04144                 and             ecx,[GHMaskShifted16]
04145 
04146                 and             ebx,[GWMaskShifted]
04147                 xor             eax,0
04148 
04149                 add             ecx,ebx
04150                 mov             esi,pTex
04151 
04152                 rol             eax,16
04153                 add             edx,dword ptr[DeltaV]
04154 
04155                 shr             ecx,16
04156                 add             ebx,dword ptr[DeltaU]
04157 
04158                 mov             ax,word ptr[2*ecx+esi]
04159 
04160                 mov             ecx,edx
04161                 xor             eax,0
04162 
04163                 and             ecx,[GHMaskShifted16]
04164                 mov             esi,eax
04165 
04166                 mov             ebp,eax
04167                 and             esi,REDMASK2
04168 
04169                 and             ebp,GREENMASK2
04170                 mov             dword ptr[Red],esi
04171 
04172                 mov             dword ptr[Green],ebp
04174 
04175 
04176                 fild    qword ptr[Red]                  ; r    LB   LG   LR
04177 
04178                 mov             ebp,eax
04179 
04180                 fmul    st,st(3)                                ; R    LB   LG   LR
04181                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
04182 
04183                 and             ebp,BLUEMASK
04184                 and             ebx,[GWMaskShifted]
04185 
04186                 mov             dword ptr[Blue],ebp
04187 
04188                 fmul    st,st(3)                                ; G    R    LB   LG   LR
04189                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
04190                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
04191                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
04192                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
04193                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
04194                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
04195                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
04196                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
04197                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
04198                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
04199                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
04200 
04201                 mov             eax,dword ptr[Bucket]
04202                 mov             ebp,dword ptr[Bucket2]
04203 
04204                 fstp    qword ptr[Bucket]               ; LB   LG   LR
04205 
04206                 and             eax,REDMASK2
04207                 and             ebp,BLUEMASK
04208                 
04209                 mov             esi,dword ptr[Bucket]
04210                 or              ebp,eax
04211 
04212                 add             ecx,ebx
04213                 and             esi,GREENMASK2
04214 
04215                 shr             ecx,16
04216                 or              ebp,esi
04217 
04218                 xor             eax,0
04219                 mov             esi,pTex
04220 
04221                 rol             ebp,16
04222                 add             edx,dword ptr[DeltaV]
04223 
04224                 mov             ax,word ptr[2*ecx+esi]
04225                 mov             ecx,[ZVal]
04226 
04227                 mov             esi,[ZVal]
04228                 add             ecx,[ZDelta]
04229 
04230                 shr             esi,16
04231                 mov             [ZVal],ecx
04232 
04233                 mov             ecx,pZBufferPtr
04234 
04235                 cmp             si,word ptr[ecx+8]
04236                 jle             Skip2
04237 
04238                 mov             [edi+8],ebp
04239                 mov             word ptr[ecx+8],si
04240                 mov             word ptr[ecx+10],si
04241 
04242 Skip2:
04243                 mov             ecx,edx
04244 
04245                 add             ebx,dword ptr[DeltaU]
04246                 and             ecx,[GHMaskShifted16]
04247 
04248                 and             ebx,[GWMaskShifted]
04249                 xor             eax,0
04250 
04251                 add             ecx,ebx
04252                 mov             esi,pTex
04253 
04254                 shr             ecx,16
04255                 add             edx,dword ptr[DeltaV]
04256 
04257                 rol             eax,16
04258                 mov             ax,word ptr[2*ecx+esi]
04259 
04260                 mov             ecx,edx
04261                 xor             eax,0
04262 
04263                 and             ecx,[GHMaskShifted16]
04264                 mov             esi,eax
04265 
04266                 mov             ebp,eax
04267                 and             esi,REDMASK2
04268 
04269                 and             ebp,GREENMASK2
04270                 mov             dword ptr[Red],esi
04271 
04272                 mov             dword ptr[Green],ebp
04273                 add             ebx,dword ptr[DeltaU]
04275 
04276 
04277                 fild    qword ptr[Red]                  ; r    LB   LG   LR
04278 
04279                 mov             ebp,eax
04280 
04281                 fmul    st,st(3)                                ; R    LB   LG   LR
04282                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
04283 
04284                 and             ebp,BLUEMASK
04285                 and             ebx,[GWMaskShifted]
04286 
04287                 mov             dword ptr[Blue],ebp
04288 
04289                 fmul    st,st(3)                                ; G    R    LB   LG   LR
04290                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
04291                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
04292                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
04293                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
04294                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
04295                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
04296                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
04297                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
04298                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
04299                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
04300                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
04301 
04302                 mov             eax,dword ptr[Bucket]
04303                 mov             ebp,dword ptr[Bucket2]
04304 
04305                 fstp    qword ptr[Bucket]               ; LB   LG   LR
04306 
04307                 and             eax,REDMASK2
04308                 and             ebp,BLUEMASK
04309                 
04310                 mov             esi,dword ptr[Bucket]
04311                 or              ebp,eax
04312 
04313                 add             ecx,ebx
04314                 and             esi,GREENMASK2
04315 
04316                 shr             ecx,16
04317                 or              ebp,esi
04318 
04319                 xor             eax,0
04320                 mov             esi,pTex
04321 
04322                 rol             ebp,16
04323                 add             edx,dword ptr[DeltaV]
04324 
04325                 mov             ax,word ptr[2*ecx+esi]
04326                 mov             ecx,[ZVal]
04327 
04328                 mov             esi,[ZVal]
04329                 add             ecx,[ZDelta]
04330 
04331                 shr             esi,16
04332                 mov             [ZVal],ecx
04333 
04334                 mov             ecx,pZBufferPtr
04335 
04336                 cmp             si,word ptr[ecx+12]
04337                 jle             Skip3
04338 
04339                 mov             [edi+12],ebp
04340                 mov             word ptr[ecx+12],si
04341                 mov             word ptr[ecx+14],si
04342 
04343 Skip3:
04344                 mov             ecx,edx
04345 
04346                 add             ebx,dword ptr[DeltaU]
04347                 and             ecx,[GHMaskShifted16]
04348 
04349                 and             ebx,[GWMaskShifted]
04350                 xor             eax,0
04351 
04352                 add             ecx,ebx
04353                 mov             esi,pTex
04354 
04355                 shr             ecx,16
04356                 add             edx,dword ptr[DeltaV]
04357 
04358                 rol             eax,16
04359                 mov             ax,word ptr[2*ecx+esi]
04360 
04361                 mov             ecx,edx
04362                 xor             eax,0
04363 
04364                 and             ecx,[GHMaskShifted16]
04365                 mov             esi,eax
04366 
04367                 mov             ebp,eax
04368                 and             esi,REDMASK2
04369 
04370                 and             ebp,GREENMASK2
04371                 mov             dword ptr[Red],esi
04372 
04373                 mov             dword ptr[Green],ebp
04374                 add             ebx,dword ptr[DeltaU]
04376 
04377 
04378                 fild    qword ptr[Red]                  ; r    LB   LG   LR
04379 
04380                 mov             ebp,eax
04381 
04382                 fmul    st,st(3)                                ; R    LB   LG   LR
04383                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
04384 
04385                 and             ebp,BLUEMASK
04386                 and             ebx,[GWMaskShifted]
04387 
04388                 mov             dword ptr[Blue],ebp
04389 
04390                 fmul    st,st(3)                                ; G    R    LB   LG   LR
04391                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
04392                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
04393                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
04394                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
04395                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
04396                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
04397                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
04398                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
04399                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
04400                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
04401                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
04402 
04403                 mov             eax,dword ptr[Bucket]
04404                 mov             ebp,dword ptr[Bucket2]
04405 
04406                 fstp    qword ptr[Bucket]               ; LB   LG   LR
04407 
04408                 and             eax,REDMASK2
04409                 and             ebp,BLUEMASK
04410                 
04411                 mov             esi,dword ptr[Bucket]
04412                 or              ebp,eax
04413 
04414                 add             ecx,ebx
04415                 and             esi,GREENMASK2
04416 
04417                 shr             ecx,16
04418                 or              ebp,esi
04419 
04420                 xor             eax,0
04421                 mov             esi,pTex
04422 
04423                 rol             ebp,16
04424                 add             edx,dword ptr[DeltaV]
04425 
04426                 mov             ax,word ptr[2*ecx+esi]
04427                 mov             ecx,[ZVal]
04428 
04429                 mov             esi,[ZVal]
04430                 add             ecx,[ZDelta]
04431 
04432                 shr             esi,16
04433                 mov             [ZVal],ecx
04434 
04435                 mov             ecx,pZBufferPtr
04436 
04437                 cmp             si,word ptr[ecx+16]
04438                 jle             Skip4
04439 
04440                 mov             [edi+16],ebp
04441                 mov             word ptr[ecx+16],si
04442                 mov             word ptr[ecx+18],si
04443 
04444 Skip4:
04445                 mov             ecx,edx
04446 
04447                 add             ebx,dword ptr[DeltaU]
04448                 and             ecx,[GHMaskShifted16]
04449 
04450                 and             ebx,[GWMaskShifted]
04451                 xor             eax,0
04452 
04453                 add             ecx,ebx
04454                 mov             esi,pTex
04455 
04456                 shr             ecx,16
04457                 add             edx,dword ptr[DeltaV]
04458 
04459                 rol             eax,16
04460                 mov             ax,word ptr[2*ecx+esi]
04461 
04462                 mov             ecx,edx
04463                 xor             eax,0
04464 
04465                 and             ecx,[GHMaskShifted16]
04466                 mov             esi,eax
04467 
04468                 mov             ebp,eax
04469                 and             esi,REDMASK2
04470 
04471                 and             ebp,GREENMASK2
04472                 mov             dword ptr[Red],esi
04473 
04474                 mov             dword ptr[Green],ebp
04475                 add             ebx,dword ptr[DeltaU]
04477 
04478 
04479                 fild    qword ptr[Red]                  ; r    LB   LG   LR
04480 
04481                 mov             ebp,eax
04482 
04483                 fmul    st,st(3)                                ; R    LB   LG   LR
04484                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
04485 
04486                 and             ebp,BLUEMASK
04487                 and             ebx,[GWMaskShifted]
04488 
04489                 mov             dword ptr[Blue],ebp
04490 
04491                 fmul    st,st(3)                                ; G    R    LB   LG   LR
04492                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
04493                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
04494                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
04495                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
04496                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
04497                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
04498                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
04499                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
04500                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
04501                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
04502                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
04503 
04504                 mov             eax,dword ptr[Bucket]
04505                 mov             ebp,dword ptr[Bucket2]
04506 
04507                 fstp    qword ptr[Bucket]               ; LB   LG   LR
04508 
04509                 and             eax,REDMASK2
04510                 and             ebp,BLUEMASK
04511                 
04512                 mov             esi,dword ptr[Bucket]
04513                 or              ebp,eax
04514 
04515                 add             ecx,ebx
04516                 and             esi,GREENMASK2
04517 
04518                 shr             ecx,16
04519                 or              ebp,esi
04520 
04521                 xor             eax,0
04522                 mov             esi,pTex
04523 
04524                 rol             ebp,16
04525                 add             edx,dword ptr[DeltaV]
04526 
04527                 mov             ax,word ptr[2*ecx+esi]
04528                 mov             ecx,[ZVal]
04529 
04530                 mov             esi,[ZVal]
04531                 add             ecx,[ZDelta]
04532 
04533                 shr             esi,16
04534                 mov             [ZVal],ecx
04535 
04536                 mov             ecx,pZBufferPtr
04537 
04538                 cmp             si,word ptr[ecx+20]
04539                 jle             Skip5
04540 
04541                 mov             [edi+20],ebp
04542                 mov             word ptr[ecx+20],si
04543                 mov             word ptr[ecx+22],si
04544 
04545 Skip5:
04546                 mov             ecx,edx
04547 
04548                 add             ebx,dword ptr[DeltaU]
04549                 and             ecx,[GHMaskShifted16]
04550 
04551                 and             ebx,[GWMaskShifted]
04552                 xor             eax,0
04553 
04554                 add             ecx,ebx
04555                 mov             esi,pTex
04556 
04557                 shr             ecx,16
04558                 add             edx,dword ptr[DeltaV]
04559 
04560                 rol             eax,16
04561                 mov             ax,word ptr[2*ecx+esi]
04562 
04563                 mov             ecx,edx
04564                 xor             eax,0
04565 
04566                 and             ecx,[GHMaskShifted16]
04567                 mov             esi,eax
04568 
04569                 mov             ebp,eax
04570                 and             esi,REDMASK2
04571 
04572                 and             ebp,GREENMASK2
04573                 mov             dword ptr[Red],esi
04574 
04575                 mov             dword ptr[Green],ebp
04576                 add             ebx,dword ptr[DeltaU]
04578 
04579 
04580                 fild    qword ptr[Red]                  ; r    LB   LG   LR
04581 
04582                 mov             ebp,eax
04583 
04584                 fmul    st,st(3)                                ; R    LB   LG   LR
04585                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
04586 
04587                 and             ebp,BLUEMASK
04588                 and             ebx,[GWMaskShifted]
04589 
04590                 mov             dword ptr[Blue],ebp
04591 
04592                 fmul    st,st(3)                                ; G    R    LB   LG   LR
04593                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
04594                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
04595                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
04596                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
04597                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
04598                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
04599                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
04600                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
04601                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
04602                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
04603                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
04604 
04605                 mov             eax,dword ptr[Bucket]
04606                 mov             ebp,dword ptr[Bucket2]
04607 
04608                 fstp    qword ptr[Bucket]               ; LB   LG   LR
04609 
04610                 and             eax,REDMASK2
04611                 and             ebp,BLUEMASK
04612                 
04613                 mov             esi,dword ptr[Bucket]
04614                 or              ebp,eax
04615 
04616                 add             ecx,ebx
04617                 and             esi,GREENMASK2
04618 
04619                 shr             ecx,16
04620                 or              ebp,esi
04621 
04622                 xor             eax,0
04623                 mov             esi,pTex
04624 
04625                 rol             ebp,16
04626                 add             edx,dword ptr[DeltaV]
04627 
04628                 mov             ax,word ptr[2*ecx+esi]
04629                 mov             ecx,[ZVal]
04630 
04631                 mov             esi,[ZVal]
04632                 add             ecx,[ZDelta]
04633 
04634                 shr             esi,16
04635                 mov             [ZVal],ecx
04636 
04637                 mov             ecx,pZBufferPtr
04638 
04639                 cmp             si,word ptr[ecx+24]
04640                 jle             Skip6
04641 
04642                 mov             [edi+24],ebp
04643                 mov             word ptr[ecx+24],si
04644                 mov             word ptr[ecx+26],si
04645 
04646 Skip6:
04647                 mov             ecx,edx
04648 
04649                 add             ebx,dword ptr[DeltaU]
04650                 and             ecx,[GHMaskShifted16]
04651 
04652                 and             ebx,[GWMaskShifted]
04653                 xor             eax,0
04654 
04655                 add             ecx,ebx
04656                 mov             esi,pTex
04657 
04658                 shr             ecx,16
04659                 add             edx,dword ptr[DeltaV]
04660 
04661                 rol             eax,16
04662                 mov             ax,word ptr[2*ecx+esi]
04663 
04664                 mov             ecx,edx
04665                 xor             eax,0
04666 
04667                 and             ecx,[GHMaskShifted16]
04668                 mov             esi,eax
04669 
04670                 mov             ebp,eax
04671                 and             esi,REDMASK2
04672 
04673                 and             ebp,GREENMASK2
04674                 mov             dword ptr[Red],esi
04675 
04676                 mov             dword ptr[Green],ebp
04677                 add             ebx,dword ptr[DeltaU]
04679                 fild    qword ptr[Red]                  ; r    LB   LG   LR
04680 
04681                 mov             ebp,eax
04682 
04683                 fmul    st,st(3)                                ; R    LB   LG   LR
04684                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
04685 
04686                 and             ebp,BLUEMASK
04687                 and             ebx,[GWMaskShifted]
04688 
04689                 mov             dword ptr[Blue],ebp
04690 
04691                 fmul    st,st(3)                                ; G    R    LB   LG   LR
04692                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
04693                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
04694                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
04695                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
04696                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
04697                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
04698                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
04699                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
04700                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
04701                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
04702                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
04703 
04704                 mov             eax,dword ptr[Bucket]
04705                 mov             ebp,dword ptr[Bucket2]
04706 
04707                 fstp    qword ptr[Bucket]               ; LB   LG   LR
04708 
04709                 and             eax,REDMASK2
04710                 and             ebp,BLUEMASK
04711                 
04712                 mov             esi,dword ptr[Bucket]
04713                 or              ebp,eax
04714 
04715                 fstp    dword ptr[Bucket]
04716                 fstp    dword ptr[Bucket2]
04717                 fstp    dword ptr[Bucket]
04718 
04719                 and             esi,GREENMASK2
04720 
04721                 fld             dword ptr[FTemp5]
04722                 fld             dword ptr[FTemp4]
04723 
04724                 or              ebp,esi
04725 
04726                 fld             dword ptr[FTemp3]
04727                 fld             dword ptr[FTemp2]
04728 
04729                 rol             ebp,16
04730 
04731                 fld             dword ptr[FTemp1]
04732                 fld             dword ptr[FTemp0]
04733                 mov             ecx,[ZVal]
04734 
04735                 mov             esi,[ZVal]
04736                 add             ecx,[ZDelta]
04737 
04738                 shr             esi,16
04739                 mov             [ZVal],ecx
04740 
04741                 mov             ecx,pZBufferPtr
04742 
04743                 cmp             si,word ptr[ecx+28]
04744                 jle             Skip7
04745 
04746                 mov             [edi+28],ebp
04747                 mov             word ptr[ecx+28],si
04748                 mov             word ptr[ecx+30],si
04749 
04750 Skip7:
04751                 pop             ebp
04752 
04753 
04754                 ; get corrected right side deltas ; st0  st1  st2  st3  st4  st5  st6  st7
04755                                                                                 ; ZR   UZR  ZRi  VZR  UL   VL
04756                 fld             st                                              ; ZR   ZR   UZR  ZRi  VZR  UL   VL
04757                 fmul    st,st(4)                                ; VR   ZR   UZR  ZRi  VZR  UL   VL
04758                 fxch    st(1)                                   ; ZR   VR   UZR  ZRi  VZR  UL   VL
04759                 fmul    st,st(2)                                ; UR   VR   UZR  ZRi  VZR  UL   VL
04760 
04761                 add             edi,32                                  ; move screen pointer to start of next aspan
04762                 add             [pZBufferPtr],32
04763                 dec             [NumASpans]                     ; dec num affine spans
04764                 jnz             SpanLoop16
04765 
04766 HandleLeftoverPixels16:
04767 
04768                 mov             esi,[pTex]
04769 
04770                 cmp             [RemainingCount],0
04771                 jz              FPUReturn16     
04772 
04773                 //need one more stack spot
04774                 fstp    dword ptr[FloatTemp]    ; VR   UZR  ZRi  VZR  UL   VL
04775                 fld             st(4)                                   ; UL   VR   UZR  ZRi  VZR  UL   VL
04776                 fmul    [GLMapMulU]                             ; ULL  VR   UZR  ZRi  VZR  UL   VL
04777                 fld             st(5)                                   ; UL   ULL  VR   UZR  ZRi  VZR  UL   VL
04778                 fadd    qword ptr[MipMagic]             ; ULk  ULL  VR   UZR  ZRi  VZR  UL   VL
04779                 fxch    st(1)                                   ; ULL  ULk  VR   UZR  ZRi  VZR  UL   VL
04780                 fadd    qword ptr[MipMagic]             ; ULLk ULk  VR   UZR  ZRi  VZR  UL   VL
04781                 fxch    st(1)                                   ; ULk  ULLk VR   UZR  ZRi  VZR  UL   VL
04782                 fstp    qword ptr[Bucket]               ; ULLk VR   UZR  ZRi  VZR  UL   VL
04783                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
04784 
04785                 mov             ebx,dword ptr[Bucket]
04786                 mov             eax,dword ptr[Bucket2]
04787 
04788                 fld             st(5)                                   ; VL   VR   UZR  ZRi  VZR  UL   VL
04789                 fmul    [GLMapMulV]                             ; VLL  VR   UZR  ZRi  VZR  UL   VL
04790 
04791                 add             ebx,dword ptr[UAdjust]
04792                 add             eax,dword ptr[UAdjustL]
04793 
04794                 mov             [U1],ebx
04795                 mov             [UFixed],eax
04796 
04797                 fld             st(6)                                   ; VL   VLL  VR   UZR  ZRi  VZR  UL   VL
04798                 fadd    qword ptr[MipMagic]             ; VLk  VLL  VR   UZR  ZRi  VZR  UL   VL
04799                 fxch    st(1)                                   ; VLL  VLk  VR   UZR  ZRi  VZR  UL   VL
04800                 fadd    qword ptr[MipMagic]             ; VLLk VLk  VR   UZR  ZRi  VZR  UL   VL
04801                 fxch    st(1)                                   ; VLk  VLLk VR   UZR  ZRi  VZR  UL   VL
04802                 fstp    qword ptr[Bucket]               ; VLLk VR   UZR  ZRi  VZR  UL   VL
04803                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
04804 
04805                 mov             ebx,dword ptr[Bucket]
04806                 mov             eax,dword ptr[Bucket2]
04807 
04808                 fld             dword ptr[FloatTemp]    ; UR   VR   UZR  ZRi  VZR  UL   dV
04809 
04810                 add             ebx,dword ptr[VAdjust]
04811                 add             eax,dword ptr[VAdjustL]
04812 
04813                 mov             [V1],ebx
04814                 mov             [VFixed],eax
04815 
04816                 dec             [RemainingCount]
04817                 jz              OnePixelSpan16
04818 
04819 
04820                 //must get rid of this wasted time
04821                 fstp    [FloatTemp]                             ; inv. inv. inv. inv. UL   VL
04822                 fstp    [FloatTemp]                             ; inv. inv. inv. UL   VL
04823                 fstp    [FloatTemp]                             ; inv. inv. UL   VL
04824                 fstp    [FloatTemp]                             ; inv. UL   VL
04825                 fstp    [FloatTemp]                             ; UL   VL
04826                 fild    [y]                                             ; y    UL   VL
04827                 fild    [x2]                                    ; xr   y    UL   VL
04828 
04829                 fld             [UDivZStepY]                    ; UZdY xr   y    UL   VL
04830                 fld             [UDivZStepX]                    ; UZdX UZdY xr   y    UL   VL
04831                 fmul    st,st(2)                                ; UZX  UZdY xr   y    UL   VL
04832                 fld             [VDivZStepY]                    ; VZdY UZX  UZdY xr   y    UL   VL
04833                 fld             [VDivZStepX]                    ; VZdX VZdY UZX  UZdY xr   y    UL   VL
04834                 fxch    st(3)                                   ; UZdy VZdY UZX  VZdX xr   y    UL   VL
04835                 fmul    st,st(5)                                ; UZY  VZdY UZX  VZdX xr   y    UL   VL
04836                 fxch    st(2)                                   ; UZX  VZdY UZY  VZdX xr   y    UL   VL
04837                 fadd    [UDivZOrigin]                   ; UZXS VZdY UZY  VZdX xr   y    UL   VL
04838                 fxch    st(3)                                   ; VZdX VZdY UZY  UZXS xr   y    UL   VL
04839                 fmul    st,st(4)                                ; VZX  VZdY UZY  UZXS xr   y    UL   VL
04840                 fxch    st(2)                                   ; UZY  VZdY VZX  UZXS xr   y    UL   VL
04841                 faddp   st(3),st                                ; VZdY VZX  UZ   xr   y    UL   VL
04842                 fmul    st,st(4)                                ; VZY  VZX  UZ   xr   y    UL   VL
04843                 fxch    st(1)                                   ; VZX  VZY  UZ   xr   y    UL   VL
04844                 fadd    [VDivZOrigin]                   ; VZXS VZY  UZ   xr   y    UL   VL
04845                 fld             [ZiStepX]                               ; ZdX  VZXS VZY  UZ   xr   y    UL   VL
04846                 fmulp   st(4),st                                ; VZXS VZY  UZ   ZX   y    UL   VL
04847                 faddp   st(1),st                                ; VZ   UZ   ZX   y    UL   VL
04848                 fld             [ZiStepY]                               ; ZdY  VZ   UZ   ZX   y    UL   VL
04849                 fmulp   st(4),st                                ; VZ   UZ   ZX   ZY   UL   VL
04850                 fxch    st(2)                                   ; ZX   UZ   VZ   ZY   UL   VL
04851                 fadd    [ZiOrigin]                              ; ZXS  UZ   VZ   ZY   UL   VL
04852 
04853                 faddp   st(3),st                                ; UZ   VZ   Zi   UL   VL
04854                 fld1                                                    ; 1    UZ   VZ   Zi   UL   VL
04855                 fdiv    st,st(3)                                ; ZR   UZ   VZ   Zi   UL   VL
04856 
04857                 fld             st                                              ; ZR   ZR   UZ   VZ   Zi   UL   VL
04858                 fmul    st,st(3)                                ; VR   ZR   UZ   VZ   Zi   UL   VL
04859                 fxch    st(1)                                   ; ZR   VR   UZ   VZ   Zi   UL   VL
04860                 fmul    st,st(2)                                ; UR   VR   UZ   VZ   Zi   UL   VL
04861 
04862                 //lazy idiv below... should 1/int mul mul
04863 
04864                 ; calculate deltas                              ; st0  st1  st2  st3  st4  st5  st6  st7
04865                 fsubr   st(5),st                                ; UR   VR   inv. inv. inv. dU   VL
04866                 fxch    st(1)                                   ; VR   UR   inv. inv. inv. dU   VL
04867                 fsubr   st(6),st                                ; VR   UR   inv. inv. inv. dU   dV
04868                 fxch    st(6)                                   ; dV   UR   inv. inv. inv. dU   VR
04869                 fidiv   dword ptr[RemainingCount];dv   UR   inv. inv. inv. dU   VR
04870                 fadd    qword ptr[MipMagic]             ; dvk  UR   inv. inv. inv. dU   VR
04871                 fxch    st(5)                                   ; dU   UR   inv. inv. inv. dvk  VR
04872                 fidiv   dword ptr[RemainingCount];du   UR   inv. inv. inv. dvk  VR
04873                 fadd    qword ptr[MipMagic]             ; duk  UR   inv. inv. inv. dvk  VR
04874                 fxch    st(5)                                   ; dvk  UR   inv. inv. inv. duk  VR
04875                 fstp    qword ptr[DeltaV]               ; UR   inv. inv. inv. duk  VR
04876                 fxch    st(4)                                   ; duk  inv. inv. inv. UR   VR
04877                 fstp    qword ptr[DeltaU]               ; inv. inv. inv. UR   VR
04878                 fld             st(1)                                   ; inv. inv. inv. inv. UR   VR
04879                 fld             st(2)                                   ; inv. inv. inv. inv. inv. UR   VR
04880 
04881 OnePixelSpan16:
04882                 // Clamp U/V
04883                 mov             ebx,[UFixed]
04884                 cmp             ebx,MaxU
04885                 jle             TryClampU116
04886                 mov             ecx,MaxU
04887                 mov             dword ptr[UFixed],ecx
04888                 jmp             NoClampU116
04889 
04890 TryClampU116:
04891                 cmp             ebx,0
04892                 jge             NoClampU116
04893                 mov             dword ptr[UFixed],0
04894 NoClampU116:
04895                 mov             eax,[VFixed]
04896                 cmp             eax,MaxV
04897                 jle             TryClampV116
04898                 mov             ecx,MaxV
04899                 mov             dword ptr[VFixed],ecx
04900                 jmp             NoClampV116
04901 
04902 TryClampV116:
04903                 cmp             eax,0
04904                 jge             NoClampV116
04905                 mov             dword ptr[VFixed],0
04906 
04907 NoClampV116:
04908                 mov             esi,dword ptr[UFixed]
04909                 mov             eax,dword ptr[VFixed]
04910 
04911                 mov ecx, GMipLevel4_8
04912                 sar esi, cl
04913                 sar eax, cl
04914                 and esi, 0ffh
04915                 and eax, 0ffh
04916                 mov UDist, esi
04917                 mov VDist, eax
04918 
04919                 mov esi,dword ptr[UFixed]
04920                 mov eax,dword ptr[VFixed]
04921                 mov ecx, GMipLevel20
04922                 shr esi, cl
04923                 shr eax, cl
04924 
04925                 imul eax, GLightWidth
04926                 add esi, eax
04927 
04928                 mov edx, esi
04929                 shl esi, 1
04930                 add edx, esi
04931 
04932                 add edx, GLightData
04933 
04934                 // Interpolate accross top
04935                 xor ecx, ecx
04936                 mov cl, [edx+3]
04937                 mov eax, ecx
04938                 mov cl, [edx+0]
04939                 sub eax, ecx
04940                 imul eax, UDist
04941                 shl ecx, 8
04942                 add eax, ecx
04943                 mov [R1], eax
04944 
04945                 xor ecx, ecx
04946                 mov cl, [edx+4]
04947                 mov eax, ecx
04948                 mov cl, [edx+1]
04949                 sub eax, ecx
04950                 imul eax, UDist
04951                 shl ecx, 8
04952                 add eax, ecx
04953                 mov [G1], eax
04954 
04955                 xor ecx, ecx
04956                 mov cl, [edx+5]
04957                 mov eax, ecx
04958                 mov cl, [edx+2]
04959                 sub eax, ecx
04960                 imul eax, UDist
04961                 shl ecx, 8
04962                 add eax, ecx
04963                 mov [B1], eax
04964 
04965                 add edx, GLightWidth
04966                 add edx, GLightWidth
04967                 add edx, GLightWidth
04968 
04969                 // Interpolate accross bottom
04970                 xor ecx, ecx
04971                 mov cl, [edx+3]
04972                 mov eax, ecx
04973                 mov cl, [edx+0]
04974                 sub eax, ecx
04975                 imul eax, UDist
04976                 shl ecx, 8
04977                 add eax, ecx
04978                 mov [R2], eax
04979 
04980                 xor ecx, ecx
04981                 mov cl, [edx+4]
04982                 mov eax, ecx
04983                 mov cl, [edx+1]
04984                 sub eax, ecx
04985                 imul eax, UDist
04986                 shl ecx, 8
04987                 add eax, ecx
04988                 mov [G2], eax
04989 
04990                 xor ecx, ecx
04991                 mov cl, [edx+5]
04992                 mov eax, ecx
04993                 mov cl, [edx+2]
04994                 sub eax, ecx
04995                 imul eax, UDist
04996                 shl ecx, 8
04997                 add eax, ecx
04998                 mov [B2], eax
04999 
05000                 // Interpolate down
05001                 mov eax, [R2]
05002                 sub eax, [R1]
05003                 imul eax, VDist
05004                 sar eax, 8
05005                 add eax, [R1]
05006                 shr eax, 8
05007                 and     eax,0feh
05008 
05009                 mov [RR1], eax
05010 
05011                 mov eax, [G2]
05012                 sub eax, [G1]
05013                 imul eax, VDist
05014                 sar eax, 8
05015                 add eax, [G1]
05016                 shr eax, 8
05017                 and     eax,0feh
05018 
05019                 mov [GG1], eax
05020 
05021                 mov eax, [B2]
05022                 sub eax, [B1]
05023                 imul eax, VDist
05024                 sar eax, 8
05025                 add eax, [B1]
05026                 shr eax, 8
05027                 and     eax,0feh
05028 
05029                 mov [BB1], eax
05030 
05031                 fstp    [FTemp0]
05032                 fstp    [FTemp1]
05033                 fstp    [FTemp2]
05034                 fstp    [FTemp3]
05035                 fstp    [FTemp4]
05036                 fstp    [FTemp5]
05037 
05038                 mov             ebx,dword ptr[U1]
05039                 mov             edx,dword ptr[V1]
05040 
05041                 fild    [RR1]                                   ; LR
05042                 fild    [GG1]                                   ; LG   LR
05043                 fild    [BB1]                                   ; LB   LG   LR
05044 
05045                 mov             ecx,[VShift]
05046                 add             edx,dword ptr[VAdjust2]
05047 
05048                 add             ebx,dword ptr[UAdjust2]
05049                 mov             eax,dword ptr[DeltaV]
05050 
05051                 shl             eax,cl
05052                 mov             esi,pTex
05053 
05054                 shl             edx,cl
05055                 mov             dword ptr[DeltaV],eax
05056 
05057                 mov             eax,[ZDelta]
05058                 mov             ecx,[ZVal]
05059 
05060                 sar             eax,1
05061                 push    ebp
05062 
05063                 mov             [ZDelta],eax
05064 
05065 LeftoverLoop16:
05066                 mov             eax,edx
05067                 and             ebx,[GWMaskShifted]
05068 
05069                 and             eax,[GHMaskShifted16]
05070 
05071                 add             eax,ebx
05072                 add             ebx,dword ptr[DeltaU]
05073 
05074                 shr             eax,16
05075                 add             edi,2
05076 
05077                 mov             ax,word ptr[2*eax+esi]
05078                 add             edx,dword ptr[DeltaV]
05079 
05080                 xor             eax,0
05081 
05082                 mov             esi,eax
05083                 mov             ebp,eax
05084 
05085                 and             esi,REDMASK2
05086                 and             ebp,GREENMASK2
05087 
05088                 mov             dword ptr[Red],esi
05089                 mov             dword ptr[Green],ebp
05090 
05091                 fild    qword ptr[Red]                  ; r    LB   LG   LR
05092 
05093                 mov             ebp,eax
05094 
05095                 fmul    st,st(3)                                ; R    LB   LG   LR
05096                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
05097 
05098                 and             ebp,BLUEMASK
05099 
05100                 mov             dword ptr[Blue],ebp
05101 
05102                 fmul    st,st(3)                                ; G    R    LB   LG   LR
05103                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
05104                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
05105                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
05106                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
05107                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
05108                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
05109                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
05110                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
05111                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
05112                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
05113                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
05114 
05115                 mov             eax,dword ptr[Bucket]
05116                 mov             ebp,dword ptr[Bucket2]
05117 
05118                 fstp    qword ptr[Bucket]               ; LB   LG   LR
05119 
05120                 and             eax,REDMASK2
05121                 and             ebp,BLUEMASK
05122                 
05123                 mov             esi,dword ptr[Bucket]
05124                 or              ebp,eax
05125 
05126                 and             esi,GREENMASK2
05127                 mov             eax,ecx
05128 
05129                 or              ebp,esi
05130 
05131                 shr             eax,16
05132                 mov             esi,pZBufferPtr
05133 
05134                 cmp             ax,word ptr[esi]
05135                 jle             SkipLeftOver
05136 
05137                 mov             word ptr[edi-2],bp
05138                 mov             word ptr[esi],ax
05139 
05140 SkipLeftOver:
05141                 add             ecx,[ZDelta]
05142                 mov             esi,pTex
05143 
05144                 add             pZBufferPtr,2
05145 
05146                 dec             [RemainingCount]
05147                 jge             LeftoverLoop16
05148 
05149                 pop             ebp
05150 
05151 
05152 FPUReturn16:
05153                 ffree   st(0)
05154                 ffree   st(1)
05155                 ffree   st(2)
05156                 ffree   st(3)
05157                 ffree   st(4)
05158                 ffree   st(5)
05159                 ffree   st(6)
05160 
05161 Return16:
05162                 pop             edi
05163                 pop             esi
05164                 pop             ecx
05165                 pop             ebx
05166         }
05167 }

void DrawSpan16_AsmLitZWrite555X86FPU int32  x1,
int32  x2,
int32  y
 

Definition at line 5169 of file x86span555.c.

References B, B1, B2, BB1, Blue, BLUEMASK, Bucket, Bucket2, DeltaU, DeltaV, Dest, FloatTemp, FTemp0, FTemp1, FTemp2, FTemp3, FTemp4, FTemp5, G, G1, G2, GBitPtr16, GG1, GHMaskShifted16, GLightData, GLightWidth, GLMapMulU, GLMapMulV, GMipLevel20, GMipLevel4_8, Green, GREENMASK2, GWMaskShifted, Magic, MaxU, MaxV, MipMagic, MipMagic2, NumASpans, or, pointer, pTex, pZBufferPtr, r, R, R1, R2, Red, REDMASK2, RemainingCount, RR1, TDest, Two, U1, UAdjust, UAdjust2, UAdjustL, UDist, UDivZ16StepX, UDivZOrigin, UDivZStepX, UDivZStepY, UFixed, V1, VAdjust, VAdjust2, VAdjustL, VDist, VDivZ16StepX, VDivZOrigin, VDivZStepX, VDivZStepY, VFixed, VShift, y, ZBufferPrec, ZDelta, Zi, Zi16StepX, ZiOrigin, ZiStepX, ZiStepY, and ZVal.

Referenced by AddSpanDraw().

05170 {
05171         TDest   =Dest;
05172         _asm
05173         {
05174                 push    ebx
05175                 push    ecx
05176                 push    esi
05177                 push    edi
05178 
05179                 mov             eax,x1
05180                 mov             ecx,x2
05181                 sub             ecx,eax
05182                 jle             Return16
05183 
05184                 mov             edi,[GBitPtr16]
05185                 mov             pTex,edi
05186 
05187                 fild    [y]                                             ; y
05188 
05189                 mov             esi,x1
05190                 mov             edi,[TDest]
05191 
05192                 shl             esi,1
05193                 mov             eax,ecx
05194 
05195                 add             edi,esi
05196                 add             pZBufferPtr,esi
05197 
05198                 shr             ecx,4
05199                 and             eax,15
05200                 _emit 75h
05201                 _emit 06h
05202                 dec             ecx
05203                 mov             eax,16
05204 
05205                 mov             [NumASpans],ecx
05206                 mov             [RemainingCount],eax
05207 
05208                 fild [x1]                                               ; x    y
05209 
05210                 //decoder won't keep up with these huge instructions
05211                 //need to find some int instructions to cram in here somewhere
05212                 fld             [UDivZStepY]                    ; UZdY x    y
05213                 fld             [UDivZStepX]                    ; UZdX UZdY x    y
05214                 fmul    st,st(2)                                ; UZX  UZdY x    y
05215                 fld             [VDivZStepY]                    ; VZdY UZX  UZdY x    y
05216                 fld             [VDivZStepX]                    ; VZdX VZdY UZX  UZdY x    y
05217                 fxch    st(3)                                   ; UZdy VZdY UZX  VZdX x    y
05218                 fmul    st,st(5)                                ; UZY  VZdY UZX  VZdX x    y
05219                 fxch    st(2)                                   ; UZX  VZdY UZY  VZdX x    y
05220                 fadd    [UDivZOrigin]                   ; UZXS VZdY UZY  VZdX x    y
05221                 fxch    st(3)                                   ; VZdX VZdY UZY  UZXS x    y
05222                 fmul    st,st(4)                                ; VZX  VZdY UZY  UZXS x    y
05223                 fxch    st(2)                                   ; UZY  VZdY VZX  UZXS x    y
05224                 faddp   st(3),st                                ; VZdY VZX  UZ   x    y
05225                 fmul    st,st(4)                                ; VZY  VZX  UZ   x    y
05226                 fxch    st(1)                                   ; VZX  VZY  UZ   x    y
05227                 fadd    [VDivZOrigin]                   ; VZXS VZY  UZ   x    y
05228                 fld             [ZiStepX]                               ; ZdX  VZXS VZY  UZ   x    y
05229 
05230                 //zbuffer step action
05231                 fld             [ZiStepX]
05232                 fmul    dword ptr[ZBufferPrec]
05233                 fmul    dword ptr[Two]
05234                 fistp   dword ptr[ZDelta]
05235 
05236                 fmulp   st(4),st                                ; VZXS VZY  UZ   ZX   y
05237                 faddp   st(1),st                                ; VZ   UZ   ZX   y
05238                 fld             [ZiStepY]                               ; ZdY  VZ   UZ   ZX   y
05239                 fmulp   st(4),st                                ; VZ   UZ   ZX   ZY
05240                 fxch    st(2)                                   ; ZX   UZ   VZ   ZY
05241                 fadd    [ZiOrigin]                              ; ZXS  UZ   VZ   ZY
05242 
05243                 //room for two cycles of int instructions here
05244 
05245                 faddp   st(3),st                                ; UZ   VZ   Zi
05246                 fld1                                                    ; 1    UZ   VZ   Zi
05247                 fdiv    st,st(3)                                ; ZL   UZ   VZ   Zi
05248 
05249                 //room for 18 cycles of int instructions here
05250 
05251                 fld             st                                              ; ZL   ZL   UZ   VZ   Zi
05252                 fmul    st,st(3)                                ; VL   ZL   UZ   VZ   Zi
05253                 fxch    st(4)                                   ; Zi   ZL   UZ   VZ   VL
05254 
05255                 //zbuffer action
05256                 fld             st
05257                 fmul    dword ptr[ZBufferPrec]
05258                 fistp   dword ptr[ZVal]
05259 
05260                 fadd    [Zi16StepX]                             ; ZRi  ZL   UZ   VZ   VL
05261                 fxch    st(1)                                   ; ZL   ZRi  UZ   VZ   VL
05262                 fmul    st,st(2)                                ; UL   ZRi  UZ   VZ   VL
05263                 fxch    st(3)                                   ; VZ   ZRi  UZ   UL   VL
05264                 fadd    [VDivZ16StepX]                  ; VZR  ZRi  UZ   UL   VL
05265                 fxch    st(2)                                   ; UZ   ZRi  VZR  UL   VL
05266                 fadd    [UDivZ16StepX]                  ; UZR  ZRi  VZR  UL   VL
05267                 fld1                                                    ; 1    UZR  ZRi  VZR  UL   VL
05268                 fdiv    st,st(2)                                ; ZR   UZR  ZRi  VZR  UL   VL
05269 
05270                 //room for 18 cycles of int stuff here
05271 
05272                 fld             st                                              ; ZR   ZR   UZR  ZRi  VZR  UL   VL
05273                 fmul    st,st(4)                                ; VR   ZR   UZR  ZRi  VZR  UL   VL
05274                 fxch    st(1)                                   ; ZR   VR   UZR  ZRi  VZR  UL   VL
05275                 //fmul stall one cycle
05276                 fmul    st,st(2)                                ; UR   VR   UZR  ZRi  VZR  UL   VL
05277 
05278                 test    ecx,ecx
05279                 jz              HandleLeftoverPixels16
05280 
05281 SpanLoop16:
05282                 //need one more stack spot
05283                 fstp    dword ptr[FloatTemp]    ; VR   UZR  ZRi  VZR  UL   VL
05284                 fld             st(4)                                   ; UL   VR   UZR  ZRi  VZR  UL   VL
05285                 fmul    [GLMapMulU]                             ; ULL  VR   UZR  ZRi  VZR  UL   VL
05286                 fld             st(5)                                   ; UL   ULL  VR   UZR  ZRi  VZR  UL   VL
05287                 fadd    qword ptr[MipMagic]             ; ULk  ULL  VR   UZR  ZRi  VZR  UL   VL
05288                 fxch    st(1)                                   ; ULL  ULk  VR   UZR  ZRi  VZR  UL   VL
05289                 fadd    qword ptr[MipMagic]             ; ULLk ULk  VR   UZR  ZRi  VZR  UL   VL
05290                 fxch    st(1)                                   ; ULk  ULLk VR   UZR  ZRi  VZR  UL   VL
05291                 fstp    qword ptr[Bucket]               ; ULLk VR   UZR  ZRi  VZR  UL   VL
05292                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
05293 
05294                 mov             ebx,dword ptr[Bucket]
05295                 mov             eax,dword ptr[Bucket2]
05296 
05297                 fld             st(5)                                   ; VL   VR   UZR  ZRi  VZR  UL   VL
05298                 fmul    [GLMapMulV]                             ; VLL  VR   UZR  ZRi  VZR  UL   VL
05299 
05300                 add             ebx,dword ptr[UAdjust]
05301                 add             eax,dword ptr[UAdjustL]
05302 
05303                 mov             [U1],ebx
05304                 mov             [UFixed],eax
05305 
05306                 fld             st(6)                                   ; VL   VLL  VR   UZR  ZRi  VZR  UL   VL
05307                 fadd    qword ptr[MipMagic]             ; VLk  VLL  VR   UZR  ZRi  VZR  UL   VL
05308                 fxch    st(1)                                   ; VLL  VLk  VR   UZR  ZRi  VZR  UL   VL
05309                 fadd    qword ptr[MipMagic]             ; VLLk VLk  VR   UZR  ZRi  VZR  UL   VL
05310                 fxch    st(1)                                   ; VLk  VLLk VR   UZR  ZRi  VZR  UL   VL
05311                 fstp    qword ptr[Bucket]               ; VLLk VR   UZR  ZRi  VZR  UL   VL
05312                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
05313                 fsubr   st(5),st                                ; VR   UZR  ZRi  VZR  UL   dV
05314 
05315                 mov             ebx,dword ptr[Bucket]
05316                 mov             eax,dword ptr[Bucket2]
05317 
05318                 fld             dword ptr[FloatTemp]    ; UR   VR   UZR  ZRi  VZR  UL   dV
05319 
05320                 add             ebx,dword ptr[VAdjust]
05321                 add             eax,dword ptr[VAdjustL]
05322 
05323                 mov             [V1],ebx
05324                 mov             [VFixed],eax
05325 
05326                 fsubr   st(5),st                                ; UR   VR   UZR  ZRi  VZR  dU   dV
05327                 fxch    st(6)                                   ; dV   VR   UZR  ZRi  VZR  dU   UR
05328                 fadd    qword ptr[MipMagic2]    ; dVk  VR   UZR  ZRi  VZR  dU   UR
05329                 fxch    st(5)                                   ; dU   VR   UZR  ZRi  VZR  dVk  UR
05330                 fadd    qword ptr[MipMagic2]    ; dUk  VR   UZR  ZRi  VZR  dVk  UR
05331                 fxch    st(5)                                   ; dVk  VR   UZR  ZRi  VZR  dUk  UR
05332                 fstp    qword ptr[DeltaV]               ; VR   UZR  ZRi  VZR  dUk  UR
05333                 fxch    st(5)                                   ; UR   UZR  ZRi  VZR  dUk  VR
05334                 //gotta do this to get em lined back up right
05335                 fxch    st(4)                                   ; dUk  UZR  ZRi  VZR  UR   VR
05336                 fstp    qword ptr[DeltaU]               ; UZR  ZRi  VZR  UR   VR
05337 
05338                 //right becomes left                    ; UZL  ZLi  VZL  UL   VL
05339                 fadd    [UDivZ16StepX]                  ; UZR  ZLi  VZL  UL   VL
05340                 fxch    st(1)                                   ; ZLi  UZR  VZL  UL   VL
05341                 fadd    [Zi16StepX]                             ; ZRi  UZR  VZL  UL   VL
05342                 fxch    st(2)                                   ; VZL  UZR  ZRi  UL   VL
05343                 fadd    [VDivZ16StepX]                  ; VZR  UZR  ZRi  UL   VL
05344                 fxch    st(2)                                   ; ZRi  UZR  VZR  UL   VL
05345                 fxch    st(1)                                   ; UZR  ZRi  VZR  UL   VL
05346                 fld1                                                    ; 1    UZR  ZRi  VZR  UL   VL
05347                 fdiv    st,st(2)                                ; ZR   UZR  ZRi  VZR  UL   VL
05348 
05349                 // Clamp U/V
05350                 mov             ebx,[UFixed]
05351                 cmp             ebx,MaxU
05352                 jle             TryClampU016
05353                 mov             ecx,MaxU
05354                 mov             dword ptr[UFixed],ecx
05355                 jmp             NoClampU016
05356 
05357 TryClampU016:
05358                 cmp             ebx,0
05359                 jge             NoClampU016
05360                 mov             dword ptr[UFixed],0
05361 NoClampU016:
05362                 mov             eax,[VFixed]
05363                 cmp             eax,MaxV
05364                 jle             TryClampV016
05365                 mov             ecx,MaxV
05366                 mov             dword ptr[VFixed],ecx
05367                 jmp             NoClampV016
05368 
05369 TryClampV016:
05370                 cmp             eax,0
05371                 jge             NoClampV016
05372                 mov             dword ptr[VFixed],0
05373 
05374 NoClampV016:
05375 
05376 
05377                 mov esi,dword ptr[UFixed]
05378                 mov eax,dword ptr[VFixed]
05379 
05380 
05381                 mov ecx, GMipLevel4_8
05382                 sar esi, cl
05383                 sar eax, cl
05384                 and esi, 0ffh
05385                 and eax, 0ffh
05386                 mov UDist, esi
05387                 mov VDist, eax
05388 
05389                 mov esi,dword ptr[UFixed]
05390                 mov eax,dword ptr[VFixed]
05391                 mov ecx, GMipLevel20
05392                 shr esi, cl
05393                 shr eax, cl
05394 
05395                 imul eax, GLightWidth
05396                 add esi, eax
05397 
05398                 mov edx, esi
05399                 shl esi, 1
05400                 add edx, esi
05401 
05402                 add edx, GLightData
05403 
05404                 // Interpolate accross top
05405                 xor ecx, ecx
05406                 mov cl, [edx+3]
05407                 mov eax, ecx
05408                 mov cl, [edx+0]
05409                 sub eax, ecx
05410                 imul eax, UDist
05411                 shl ecx, 8
05412                 add eax, ecx
05413                 mov [R1], eax
05414 
05415                 xor ecx, ecx
05416                 mov cl, [edx+4]
05417                 mov eax, ecx
05418                 mov cl, [edx+1]
05419                 sub eax, ecx
05420                 imul eax, UDist
05421                 shl ecx, 8
05422                 add eax, ecx
05423                 mov [G1], eax
05424 
05425                 xor ecx, ecx
05426                 mov cl, [edx+5]
05427                 mov eax, ecx
05428                 mov cl, [edx+2]
05429                 sub eax, ecx
05430                 imul eax, UDist
05431                 shl ecx, 8
05432                 add eax, ecx
05433                 mov [B1], eax
05434 
05435                 add edx, GLightWidth
05436                 add edx, GLightWidth
05437                 add edx, GLightWidth
05438 
05439                 // Interpolate accross bottom
05440                 xor ecx, ecx
05441                 mov cl, [edx+3]
05442                 mov eax, ecx
05443                 mov cl, [edx+0]
05444                 sub eax, ecx
05445                 imul eax, UDist
05446                 shl ecx, 8
05447                 add eax, ecx
05448                 mov [R2], eax
05449 
05450                 xor ecx, ecx
05451                 mov cl, [edx+4]
05452                 mov eax, ecx
05453                 mov cl, [edx+1]
05454                 sub eax, ecx
05455                 imul eax, UDist
05456                 shl ecx, 8
05457                 add eax, ecx
05458                 mov [G2], eax
05459 
05460                 xor ecx, ecx
05461                 mov cl, [edx+5]
05462                 mov eax, ecx
05463                 mov cl, [edx+2]
05464                 sub eax, ecx
05465                 imul eax, UDist
05466                 shl ecx, 8
05467                 add eax, ecx
05468                 mov [B2], eax
05469 
05470                 // Interpolate down
05471                 mov eax, [R2]
05472                 sub eax, [R1]
05473                 imul eax, VDist
05474                 sar eax, 8
05475                 add eax, [R1]
05476                 shr eax, 8
05477                 and     eax,0feh
05478 
05479                 mov [RR1], eax
05480 
05481                 mov eax, [G2]
05482                 sub eax, [G1]
05483                 imul eax, VDist
05484                 sar eax, 8
05485                 add eax, [G1]
05486                 shr eax, 8
05487                 and     eax,0feh
05488 
05489                 mov [GG1], eax
05490 
05491                 mov eax, [B2]
05492                 sub eax, [B1]
05493                 imul eax, VDist
05494                 sar eax, 8
05495                 add eax, [B1]
05496                 shr eax, 8
05497                 and     eax,0feh
05498 
05499                 mov [BB1], eax
05500 
05501                 fstp    [FTemp0]                                ; UZR  ZRi  VZR  UL   VL
05502                 fstp    [FTemp1]                                ; ZRi  VZR  UL   VL
05503                 fstp    [FTemp2]                                ; VZR  UL   VL
05504                 fstp    [FTemp3]                                ; UL   VL
05505                 fstp    [FTemp4]                                ; VL
05506                 fstp    [FTemp5]                                ; 
05507 
05508                 fild    [RR1]                                   ; LR
05509                 fild    [GG1]                                   ; LG   LR
05510                 fild    [BB1]                                   ; LB   LG   LR
05511                 
05512                 
05513                 mov             ebx,dword ptr[U1]
05514                 mov             eax,dword ptr[V1]
05515 
05516                 add             ebx,dword ptr[UAdjust2]
05517                 add             eax,dword ptr[VAdjust2]
05518 
05519                 mov             ecx,[VShift]
05520                 mov             dword ptr[Bucket],ebx
05521 
05522                 shl             eax,cl
05523 
05524                 push    ebp
05525 
05526                 mov             dword ptr[Bucket2],eax
05527                 mov             ebp,dword ptr[DeltaV]
05528 
05529                 and             eax,[GHMaskShifted16]
05530                 and             ebx,[GWMaskShifted]
05531 
05532                 shl             ebp,cl
05533                 add             eax,ebx
05534 
05535                 mov             edx,dword ptr[Bucket2]
05536                 mov             esi,pTex
05537 
05538                 shr             eax,16
05539                 mov             dword ptr[DeltaV],ebp
05540 
05541                 mov             ebx,dword ptr[Bucket]
05542 
05543                 mov             ax,word ptr[2*eax+esi]
05544                 add             edx,dword ptr[DeltaV]
05545 
05546                 xor             eax,0
05547                 mov             ecx,edx
05548 
05549                 add             ebx,dword ptr[DeltaU]
05550                 and             ecx,[GHMaskShifted16]
05551 
05552                 rol             eax,16
05553                 and             ebx,[GWMaskShifted]
05554 
05555                 xor             eax,0
05556                 add             ecx,ebx
05557 
05558                 add             edx,dword ptr[DeltaV]
05559                 mov             esi,pTex
05560 
05561                 shr             ecx,16
05562                 add             ebx,dword ptr[DeltaU]
05563 
05564                 mov             ax,word ptr[2*ecx+esi]
05565                 mov             ecx,edx
05566 
05567                 xor             eax,0
05568                 and             ecx,[GHMaskShifted16]
05569 
05570                 mov             esi,eax
05571                 mov             ebp,eax
05572 
05573                 and             esi,REDMASK2
05574                 and             ebp,GREENMASK2
05575 
05576                 mov             dword ptr[Red],esi
05577                 mov             dword ptr[Green],ebp
05578 
05579                 fild    qword ptr[Red]                  ; r    LB   LG   LR
05580 
05581                 mov             ebp,eax
05582 
05583                 fmul    st,st(3)                                ; R    LB   LG   LR
05584                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
05585 
05586                 and             ebp,BLUEMASK
05587                 and             ebx,[GWMaskShifted]
05588 
05589                 mov             dword ptr[Blue],ebp
05590 
05591                 fmul    st,st(3)                                ; G    R    LB   LG   LR
05592                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
05593                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
05594                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
05595                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
05596                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
05597                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
05598                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
05599                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
05600                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
05601                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
05602                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
05603 
05604                 mov             eax,dword ptr[Bucket]
05605                 mov             ebp,dword ptr[Bucket2]
05606 
05607                 fstp    qword ptr[Bucket]               ; LB   LG   LR
05608 
05609                 and             eax,REDMASK2
05610                 and             ebp,BLUEMASK
05611                 
05612                 mov             esi,dword ptr[Bucket]
05613                 or              ebp,eax
05614 
05615                 add             ecx,ebx
05616                 and             esi,GREENMASK2
05617 
05618                 shr             ecx,16
05619                 or              ebp,esi
05620 
05621                 xor             eax,0
05622                 mov             esi,pTex
05623 
05624                 rol             ebp,16
05625                 add             edx,dword ptr[DeltaV]
05626 
05627                 mov             ax,word ptr[2*ecx+esi]
05628                 mov             ecx,[ZVal]
05629 
05630                 mov             esi,[ZVal]
05631                 add             ecx,[ZDelta]
05632 
05633                 shr             esi,16
05634                 mov             [ZVal],ecx
05635 
05636                 mov             ecx,pZBufferPtr
05637                 mov             [edi+0],ebp
05638 
05639                 mov             word ptr[ecx+0],si
05640                 mov             word ptr[ecx+2],si
05641                 mov             ecx,edx
05642 
05643                 add             ebx,dword ptr[DeltaU]
05644                 and             ecx,[GHMaskShifted16]
05645 
05646                 and             ebx,[GWMaskShifted]
05647                 xor             eax,0
05648 
05649                 add             ecx,ebx
05650                 mov             esi,pTex
05651 
05652                 rol             eax,16
05653                 add             edx,dword ptr[DeltaV]
05654 
05655                 shr             ecx,16
05656                 add             ebx,dword ptr[DeltaU]
05657 
05658                 mov             ax,word ptr[2*ecx+esi]
05659 
05660                 mov             ecx,edx
05661                 xor             eax,0
05662 
05663                 and             ecx,[GHMaskShifted16]
05664                 mov             esi,eax
05665 
05666                 mov             ebp,eax
05667                 and             esi,REDMASK2
05668 
05669                 and             ebp,GREENMASK2
05670                 mov             dword ptr[Red],esi
05671 
05672                 mov             dword ptr[Green],ebp
05674 
05675 
05676                 fild    qword ptr[Red]                  ; r    LB   LG   LR
05677 
05678                 mov             ebp,eax
05679 
05680                 fmul    st,st(3)                                ; R    LB   LG   LR
05681                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
05682 
05683                 and             ebp,BLUEMASK
05684                 and             ebx,[GWMaskShifted]
05685 
05686                 mov             dword ptr[Blue],ebp
05687 
05688                 fmul    st,st(3)                                ; G    R    LB   LG   LR
05689                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
05690                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
05691                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
05692                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
05693                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
05694                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
05695                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
05696                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
05697                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
05698                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
05699                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
05700 
05701                 mov             eax,dword ptr[Bucket]
05702                 mov             ebp,dword ptr[Bucket2]
05703 
05704                 fstp    qword ptr[Bucket]               ; LB   LG   LR
05705 
05706                 and             eax,REDMASK2
05707                 and             ebp,BLUEMASK
05708                 
05709                 mov             esi,dword ptr[Bucket]
05710                 or              ebp,eax
05711 
05712                 add             ecx,ebx
05713                 and             esi,GREENMASK2
05714 
05715                 shr             ecx,16
05716                 or              ebp,esi
05717 
05718                 xor             eax,0
05719                 mov             esi,pTex
05720 
05721                 rol             ebp,16
05722                 add             edx,dword ptr[DeltaV]
05723 
05724                 mov             ax,word ptr[2*ecx+esi]
05725                 mov             ecx,[ZVal]
05726 
05727                 mov             esi,[ZVal]
05728                 add             ecx,[ZDelta]
05729 
05730                 shr             esi,16
05731                 mov             [ZVal],ecx
05732 
05733                 mov             ecx,pZBufferPtr
05734                 mov             [edi+4],ebp
05735 
05736                 mov             word ptr[ecx+4],si
05737                 mov             word ptr[ecx+6],si
05738                 mov             ecx,edx
05739 
05740                 add             ebx,dword ptr[DeltaU]
05741                 and             ecx,[GHMaskShifted16]
05742 
05743                 and             ebx,[GWMaskShifted]
05744                 xor             eax,0
05745 
05746                 add             ecx,ebx
05747                 mov             esi,pTex
05748 
05749                 rol             eax,16
05750                 add             edx,dword ptr[DeltaV]
05751 
05752                 shr             ecx,16
05753                 add             ebx,dword ptr[DeltaU]
05754 
05755                 mov             ax,word ptr[2*ecx+esi]
05756 
05757                 mov             ecx,edx
05758                 xor             eax,0
05759 
05760                 and             ecx,[GHMaskShifted16]
05761                 mov             esi,eax
05762 
05763                 mov             ebp,eax
05764                 and             esi,REDMASK2
05765 
05766                 and             ebp,GREENMASK2
05767                 mov             dword ptr[Red],esi
05768 
05769                 mov             dword ptr[Green],ebp
05771 
05772 
05773                 fild    qword ptr[Red]                  ; r    LB   LG   LR
05774 
05775                 mov             ebp,eax
05776 
05777                 fmul    st,st(3)                                ; R    LB   LG   LR
05778                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
05779 
05780                 and             ebp,BLUEMASK
05781                 and             ebx,[GWMaskShifted]
05782 
05783                 mov             dword ptr[Blue],ebp
05784 
05785                 fmul    st,st(3)                                ; G    R    LB   LG   LR
05786                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
05787                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
05788                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
05789                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
05790                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
05791                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
05792                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
05793                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
05794                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
05795                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
05796                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
05797 
05798                 mov             eax,dword ptr[Bucket]
05799                 mov             ebp,dword ptr[Bucket2]
05800 
05801                 fstp    qword ptr[Bucket]               ; LB   LG   LR
05802 
05803                 and             eax,REDMASK2
05804                 and             ebp,BLUEMASK
05805                 
05806                 mov             esi,dword ptr[Bucket]
05807                 or              ebp,eax
05808 
05809                 add             ecx,ebx
05810                 and             esi,GREENMASK2
05811 
05812                 shr             ecx,16
05813                 or              ebp,esi
05814 
05815                 xor             eax,0
05816                 mov             esi,pTex
05817 
05818                 rol             ebp,16
05819                 add             edx,dword ptr[DeltaV]
05820 
05821                 mov             ax,word ptr[2*ecx+esi]
05822                 mov             ecx,[ZVal]
05823 
05824                 mov             esi,[ZVal]
05825                 add             ecx,[ZDelta]
05826 
05827                 shr             esi,16
05828                 mov             [ZVal],ecx
05829 
05830                 mov             ecx,pZBufferPtr
05831                 mov             [edi+8],ebp
05832 
05833                 mov             word ptr[ecx+8],si
05834                 mov             word ptr[ecx+10],si
05835                 mov             ecx,edx
05836 
05837                 add             ebx,dword ptr[DeltaU]
05838                 and             ecx,[GHMaskShifted16]
05839 
05840                 and             ebx,[GWMaskShifted]
05841                 xor             eax,0
05842 
05843                 add             ecx,ebx
05844                 mov             esi,pTex
05845 
05846                 shr             ecx,16
05847                 add             edx,dword ptr[DeltaV]
05848 
05849                 rol             eax,16
05850                 mov             ax,word ptr[2*ecx+esi]
05851 
05852                 mov             ecx,edx
05853                 xor             eax,0
05854 
05855                 and             ecx,[GHMaskShifted16]
05856                 mov             esi,eax
05857 
05858                 mov             ebp,eax
05859                 and             esi,REDMASK2
05860 
05861                 and             ebp,GREENMASK2
05862                 mov             dword ptr[Red],esi
05863 
05864                 mov             dword ptr[Green],ebp
05865                 add             ebx,dword ptr[DeltaU]
05867 
05868 
05869                 fild    qword ptr[Red]                  ; r    LB   LG   LR
05870 
05871                 mov             ebp,eax
05872 
05873                 fmul    st,st(3)                                ; R    LB   LG   LR
05874                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
05875 
05876                 and             ebp,BLUEMASK
05877                 and             ebx,[GWMaskShifted]
05878 
05879                 mov             dword ptr[Blue],ebp
05880 
05881                 fmul    st,st(3)                                ; G    R    LB   LG   LR
05882                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
05883                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
05884                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
05885                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
05886                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
05887                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
05888                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
05889                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
05890                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
05891                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
05892                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
05893 
05894                 mov             eax,dword ptr[Bucket]
05895                 mov             ebp,dword ptr[Bucket2]
05896 
05897                 fstp    qword ptr[Bucket]               ; LB   LG   LR
05898 
05899                 and             eax,REDMASK2
05900                 and             ebp,BLUEMASK
05901                 
05902                 mov             esi,dword ptr[Bucket]
05903                 or              ebp,eax
05904 
05905                 add             ecx,ebx
05906                 and             esi,GREENMASK2
05907 
05908                 shr             ecx,16
05909                 or              ebp,esi
05910 
05911                 xor             eax,0
05912                 mov             esi,pTex
05913 
05914                 rol             ebp,16
05915                 add             edx,dword ptr[DeltaV]
05916 
05917                 mov             ax,word ptr[2*ecx+esi]
05918                 mov             ecx,[ZVal]
05919 
05920                 mov             esi,[ZVal]
05921                 add             ecx,[ZDelta]
05922 
05923                 shr             esi,16
05924                 mov             [ZVal],ecx
05925 
05926                 mov             ecx,pZBufferPtr
05927                 mov             [edi+12],ebp
05928 
05929                 mov             word ptr[ecx+12],si
05930                 mov             word ptr[ecx+14],si
05931                 mov             ecx,edx
05932 
05933                 add             ebx,dword ptr[DeltaU]
05934                 and             ecx,[GHMaskShifted16]
05935 
05936                 and             ebx,[GWMaskShifted]
05937                 xor             eax,0
05938 
05939                 add             ecx,ebx
05940                 mov             esi,pTex
05941 
05942                 shr             ecx,16
05943                 add             edx,dword ptr[DeltaV]
05944 
05945                 rol             eax,16
05946                 mov             ax,word ptr[2*ecx+esi]
05947 
05948                 mov             ecx,edx
05949                 xor             eax,0
05950 
05951                 and             ecx,[GHMaskShifted16]
05952                 mov             esi,eax
05953 
05954                 mov             ebp,eax
05955                 and             esi,REDMASK2
05956 
05957                 and             ebp,GREENMASK2
05958                 mov             dword ptr[Red],esi
05959 
05960                 mov             dword ptr[Green],ebp
05961                 add             ebx,dword ptr[DeltaU]
05963 
05964 
05965                 fild    qword ptr[Red]                  ; r    LB   LG   LR
05966 
05967                 mov             ebp,eax
05968 
05969                 fmul    st,st(3)                                ; R    LB   LG   LR
05970                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
05971 
05972                 and             ebp,BLUEMASK
05973                 and             ebx,[GWMaskShifted]
05974 
05975                 mov             dword ptr[Blue],ebp
05976 
05977                 fmul    st,st(3)                                ; G    R    LB   LG   LR
05978                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
05979                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
05980                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
05981                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
05982                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
05983                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
05984                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
05985                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
05986                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
05987                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
05988                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
05989 
05990                 mov             eax,dword ptr[Bucket]
05991                 mov             ebp,dword ptr[Bucket2]
05992 
05993                 fstp    qword ptr[Bucket]               ; LB   LG   LR
05994 
05995                 and             eax,REDMASK2
05996                 and             ebp,BLUEMASK
05997                 
05998                 mov             esi,dword ptr[Bucket]
05999                 or              ebp,eax
06000 
06001                 add             ecx,ebx
06002                 and             esi,GREENMASK2
06003 
06004                 shr             ecx,16
06005                 or              ebp,esi
06006 
06007                 xor             eax,0
06008                 mov             esi,pTex
06009 
06010                 rol             ebp,16
06011                 add             edx,dword ptr[DeltaV]
06012 
06013                 mov             ax,word ptr[2*ecx+esi]
06014                 mov             ecx,[ZVal]
06015 
06016                 mov             esi,[ZVal]
06017                 add             ecx,[ZDelta]
06018 
06019                 shr             esi,16
06020                 mov             [ZVal],ecx
06021 
06022                 mov             ecx,pZBufferPtr
06023                 mov             [edi+16],ebp
06024 
06025                 mov             word ptr[ecx+16],si
06026                 mov             word ptr[ecx+18],si
06027                 mov             ecx,edx
06028 
06029                 add             ebx,dword ptr[DeltaU]
06030                 and             ecx,[GHMaskShifted16]
06031 
06032                 and             ebx,[GWMaskShifted]
06033                 xor             eax,0
06034 
06035                 add             ecx,ebx
06036                 mov             esi,pTex
06037 
06038                 shr             ecx,16
06039                 add             edx,dword ptr[DeltaV]
06040 
06041                 rol             eax,16
06042                 mov             ax,word ptr[2*ecx+esi]
06043 
06044                 mov             ecx,edx
06045                 xor             eax,0
06046 
06047                 and             ecx,[GHMaskShifted16]
06048                 mov             esi,eax
06049 
06050                 mov             ebp,eax
06051                 and             esi,REDMASK2
06052 
06053                 and             ebp,GREENMASK2
06054                 mov             dword ptr[Red],esi
06055 
06056                 mov             dword ptr[Green],ebp
06057                 add             ebx,dword ptr[DeltaU]
06059 
06060 
06061                 fild    qword ptr[Red]                  ; r    LB   LG   LR
06062 
06063                 mov             ebp,eax
06064 
06065                 fmul    st,st(3)                                ; R    LB   LG   LR
06066                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
06067 
06068                 and             ebp,BLUEMASK
06069                 and             ebx,[GWMaskShifted]
06070 
06071                 mov             dword ptr[Blue],ebp
06072 
06073                 fmul    st,st(3)                                ; G    R    LB   LG   LR
06074                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
06075                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
06076                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
06077                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
06078                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
06079                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
06080                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
06081                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
06082                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
06083                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
06084                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
06085 
06086                 mov             eax,dword ptr[Bucket]
06087                 mov             ebp,dword ptr[Bucket2]
06088 
06089                 fstp    qword ptr[Bucket]               ; LB   LG   LR
06090 
06091                 and             eax,REDMASK2
06092                 and             ebp,BLUEMASK
06093                 
06094                 mov             esi,dword ptr[Bucket]
06095                 or              ebp,eax
06096 
06097                 add             ecx,ebx
06098                 and             esi,GREENMASK2
06099 
06100                 shr             ecx,16
06101                 or              ebp,esi
06102 
06103                 xor             eax,0
06104                 mov             esi,pTex
06105 
06106                 rol             ebp,16
06107                 add             edx,dword ptr[DeltaV]
06108 
06109                 mov             ax,word ptr[2*ecx+esi]
06110                 mov             ecx,[ZVal]
06111 
06112                 mov             esi,[ZVal]
06113                 add             ecx,[ZDelta]
06114 
06115                 shr             esi,16
06116                 mov             [ZVal],ecx
06117 
06118                 mov             ecx,pZBufferPtr
06119                 mov             [edi+20],ebp
06120 
06121                 mov             word ptr[ecx+20],si
06122                 mov             word ptr[ecx+22],si
06123                 mov             ecx,edx
06124 
06125                 add             ebx,dword ptr[DeltaU]
06126                 and             ecx,[GHMaskShifted16]
06127 
06128                 and             ebx,[GWMaskShifted]
06129                 xor             eax,0
06130 
06131                 add             ecx,ebx
06132                 mov             esi,pTex
06133 
06134                 shr             ecx,16
06135                 add             edx,dword ptr[DeltaV]
06136 
06137                 rol             eax,16
06138                 mov             ax,word ptr[2*ecx+esi]
06139 
06140                 mov             ecx,edx
06141                 xor             eax,0
06142 
06143                 and             ecx,[GHMaskShifted16]
06144                 mov             esi,eax
06145 
06146                 mov             ebp,eax
06147                 and             esi,REDMASK2
06148 
06149                 and             ebp,GREENMASK2
06150                 mov             dword ptr[Red],esi
06151 
06152                 mov             dword ptr[Green],ebp
06153                 add             ebx,dword ptr[DeltaU]
06155 
06156 
06157                 fild    qword ptr[Red]                  ; r    LB   LG   LR
06158 
06159                 mov             ebp,eax
06160 
06161                 fmul    st,st(3)                                ; R    LB   LG   LR
06162                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
06163 
06164                 and             ebp,BLUEMASK
06165                 and             ebx,[GWMaskShifted]
06166 
06167                 mov             dword ptr[Blue],ebp
06168 
06169                 fmul    st,st(3)                                ; G    R    LB   LG   LR
06170                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
06171                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
06172                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
06173                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
06174                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
06175                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
06176                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
06177                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
06178                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
06179                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
06180                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
06181 
06182                 mov             eax,dword ptr[Bucket]
06183                 mov             ebp,dword ptr[Bucket2]
06184 
06185                 fstp    qword ptr[Bucket]               ; LB   LG   LR
06186 
06187                 and             eax,REDMASK2
06188                 and             ebp,BLUEMASK
06189                 
06190                 mov             esi,dword ptr[Bucket]
06191                 or              ebp,eax
06192 
06193                 add             ecx,ebx
06194                 and             esi,GREENMASK2
06195 
06196                 shr             ecx,16
06197                 or              ebp,esi
06198 
06199                 xor             eax,0
06200                 mov             esi,pTex
06201 
06202                 rol             ebp,16
06203                 add             edx,dword ptr[DeltaV]
06204 
06205                 mov             ax,word ptr[2*ecx+esi]
06206                 mov             ecx,[ZVal]
06207 
06208                 mov             esi,[ZVal]
06209                 add             ecx,[ZDelta]
06210 
06211                 shr             esi,16
06212                 mov             [ZVal],ecx
06213 
06214                 mov             ecx,pZBufferPtr
06215                 mov             [edi+24],ebp
06216 
06217                 mov             word ptr[ecx+24],si
06218                 mov             word ptr[ecx+26],si
06219                 mov             ecx,edx
06220 
06221                 add             ebx,dword ptr[DeltaU]
06222                 xor             eax,0
06223 
06224                 and             ecx,[GHMaskShifted16]
06225                 mov             esi,pTex
06226 
06227                 add             ecx,ebx
06228 
06229                 shr             ecx,16
06230                 add             edx,dword ptr[DeltaV]
06231 
06232                 rol             eax,16
06233                 mov             ax,word ptr[2*ecx+esi]
06234 
06235 //              mov             ecx,edx
06236                 xor             eax,0
06237 
06238                 mov             esi,eax
06239 
06240                 mov             ebp,eax
06241                 and             esi,REDMASK2
06242 
06243                 and             ebp,GREENMASK2
06244                 mov             dword ptr[Red],esi
06245 
06246                 mov             dword ptr[Green],ebp
06247 //              add             ebx,dword ptr[DeltaU]
06249                 fild    qword ptr[Red]                  ; r    LB   LG   LR
06250 
06251                 mov             ebp,eax
06252 
06253                 fmul    st,st(3)                                ; R    LB   LG   LR
06254                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
06255 
06256                 and             ebp,BLUEMASK
06257 //              and             ebx,[GWMaskShifted]
06258 
06259                 mov             dword ptr[Blue],ebp
06260 
06261                 fmul    st,st(3)                                ; G    R    LB   LG   LR
06262                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
06263                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
06264                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
06265                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
06266                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
06267                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
06268                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
06269                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
06270                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
06271                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
06272                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
06273 
06274                 mov             eax,dword ptr[Bucket]
06275                 mov             ebp,dword ptr[Bucket2]
06276 
06277                 fstp    qword ptr[Bucket]               ; LB   LG   LR
06278 
06279                 and             eax,REDMASK2
06280                 and             ebp,BLUEMASK
06281                 
06282                 mov             esi,dword ptr[Bucket]
06283                 or              ebp,eax
06284 
06285                 fstp    dword ptr[Bucket]
06286                 fstp    dword ptr[Bucket2]
06287                 fstp    dword ptr[Bucket]
06288 
06289                 and             esi,GREENMASK2
06290 
06291                 fld             dword ptr[FTemp5]
06292                 fld             dword ptr[FTemp4]
06293 
06294                 or              ebp,esi
06295 
06296                 fld             dword ptr[FTemp3]
06297                 fld             dword ptr[FTemp2]
06298 
06299                 rol             ebp,16
06300 
06301                 fld             dword ptr[FTemp1]
06302                 fld             dword ptr[FTemp0]
06303                 mov             ecx,[ZVal]
06304 
06305                 mov             esi,[ZVal]
06306                 add             ecx,[ZDelta]
06307 
06308                 shr             esi,16
06309                 mov             [ZVal],ecx
06310 
06311                 mov             ecx,pZBufferPtr
06312                 mov             [edi+28],ebp
06313 
06314                 mov             word ptr[ecx+28],si
06315                 mov             word ptr[ecx+30],si
06316                 pop             ebp
06317 
06318 
06319                 ; get corrected right side deltas ; st0  st1  st2  st3  st4  st5  st6  st7
06320                                                                                 ; ZR   UZR  ZRi  VZR  UL   VL
06321                 fld             st                                              ; ZR   ZR   UZR  ZRi  VZR  UL   VL
06322                 fmul    st,st(4)                                ; VR   ZR   UZR  ZRi  VZR  UL   VL
06323                 fxch    st(1)                                   ; ZR   VR   UZR  ZRi  VZR  UL   VL
06324                 fmul    st,st(2)                                ; UR   VR   UZR  ZRi  VZR  UL   VL
06325 
06326                 add             edi,32                                  ; move screen pointer to start of next aspan
06327                 add             pZBufferPtr,32
06328                 dec             [NumASpans]                     ; dec num affine spans
06329                 jnz             SpanLoop16
06330 
06331 HandleLeftoverPixels16:
06332 
06333                 mov             esi,[pTex]
06334 
06335 
06336                 cmp             [RemainingCount],0
06337                 jz              FPUReturn16
06338 
06339                 //need one more stack spot
06340                 fstp    dword ptr[FloatTemp]    ; VR   UZR  ZRi  VZR  UL   VL
06341                 fld             st(4)                                   ; UL   VR   UZR  ZRi  VZR  UL   VL
06342                 fmul    [GLMapMulU]                             ; ULL  VR   UZR  ZRi  VZR  UL   VL
06343                 fld             st(5)                                   ; UL   ULL  VR   UZR  ZRi  VZR  UL   VL
06344                 fadd    qword ptr[MipMagic]             ; ULk  ULL  VR   UZR  ZRi  VZR  UL   VL
06345                 fxch    st(1)                                   ; ULL  ULk  VR   UZR  ZRi  VZR  UL   VL
06346                 fadd    qword ptr[MipMagic]             ; ULLk ULk  VR   UZR  ZRi  VZR  UL   VL
06347                 fxch    st(1)                                   ; ULk  ULLk VR   UZR  ZRi  VZR  UL   VL
06348                 fstp    qword ptr[Bucket]               ; ULLk VR   UZR  ZRi  VZR  UL   VL
06349                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
06350 
06351                 mov             ebx,dword ptr[Bucket]
06352                 mov             eax,dword ptr[Bucket2]
06353 
06354                 fld             st(5)                                   ; VL   VR   UZR  ZRi  VZR  UL   VL
06355                 fmul    [GLMapMulV]                             ; VLL  VR   UZR  ZRi  VZR  UL   VL
06356 
06357                 add             ebx,dword ptr[UAdjust]
06358                 add             eax,dword ptr[UAdjustL]
06359 
06360                 mov             [U1],ebx
06361                 mov             [UFixed],eax
06362 
06363                 fld             st(6)                                   ; VL   VLL  VR   UZR  ZRi  VZR  UL   VL
06364                 fadd    qword ptr[MipMagic]             ; VLk  VLL  VR   UZR  ZRi  VZR  UL   VL
06365                 fxch    st(1)                                   ; VLL  VLk  VR   UZR  ZRi  VZR  UL   VL
06366                 fadd    qword ptr[MipMagic]             ; VLLk VLk  VR   UZR  ZRi  VZR  UL   VL
06367                 fxch    st(1)                                   ; VLk  VLLk VR   UZR  ZRi  VZR  UL   VL
06368                 fstp    qword ptr[Bucket]               ; VLLk VR   UZR  ZRi  VZR  UL   VL
06369                 fstp    qword ptr[Bucket2]              ; VR   UZR  ZRi  VZR  UL   VL
06370 
06371                 mov             ebx,dword ptr[Bucket]
06372                 mov             eax,dword ptr[Bucket2]
06373 
06374                 fld             dword ptr[FloatTemp]    ; UR   VR   UZR  ZRi  VZR  UL   dV
06375 
06376                 add             ebx,dword ptr[VAdjust]
06377                 add             eax,dword ptr[VAdjustL]
06378 
06379                 mov             [V1],ebx
06380                 mov             [VFixed],eax
06381 
06382                 dec             [RemainingCount]
06383                 jz              OnePixelSpan16
06384 
06385 
06386                 //must get rid of this wasted time
06387                 fstp    [FloatTemp]                             ; inv. inv. inv. inv. UL   VL
06388                 fstp    [FloatTemp]                             ; inv. inv. inv. UL   VL
06389                 fstp    [FloatTemp]                             ; inv. inv. UL   VL
06390                 fstp    [FloatTemp]                             ; inv. UL   VL
06391                 fstp    [FloatTemp]                             ; UL   VL
06392                 fild    [y]                                             ; y    UL   VL
06393                 fild    [x2]                                    ; xr   y    UL   VL
06394 
06395                 fld             [UDivZStepY]                    ; UZdY xr   y    UL   VL
06396                 fld             [UDivZStepX]                    ; UZdX UZdY xr   y    UL   VL
06397                 fmul    st,st(2)                                ; UZX  UZdY xr   y    UL   VL
06398                 fld             [VDivZStepY]                    ; VZdY UZX  UZdY xr   y    UL   VL
06399                 fld             [VDivZStepX]                    ; VZdX VZdY UZX  UZdY xr   y    UL   VL
06400                 fxch    st(3)                                   ; UZdy VZdY UZX  VZdX xr   y    UL   VL
06401                 fmul    st,st(5)                                ; UZY  VZdY UZX  VZdX xr   y    UL   VL
06402                 fxch    st(2)                                   ; UZX  VZdY UZY  VZdX xr   y    UL   VL
06403                 fadd    [UDivZOrigin]                   ; UZXS VZdY UZY  VZdX xr   y    UL   VL
06404                 fxch    st(3)                                   ; VZdX VZdY UZY  UZXS xr   y    UL   VL
06405                 fmul    st,st(4)                                ; VZX  VZdY UZY  UZXS xr   y    UL   VL
06406                 fxch    st(2)                                   ; UZY  VZdY VZX  UZXS xr   y    UL   VL
06407                 faddp   st(3),st                                ; VZdY VZX  UZ   xr   y    UL   VL
06408                 fmul    st,st(4)                                ; VZY  VZX  UZ   xr   y    UL   VL
06409                 fxch    st(1)                                   ; VZX  VZY  UZ   xr   y    UL   VL
06410                 fadd    [VDivZOrigin]                   ; VZXS VZY  UZ   xr   y    UL   VL
06411                 fld             [ZiStepX]                               ; ZdX  VZXS VZY  UZ   xr   y    UL   VL
06412                 fmulp   st(4),st                                ; VZXS VZY  UZ   ZX   y    UL   VL
06413                 faddp   st(1),st                                ; VZ   UZ   ZX   y    UL   VL
06414                 fld             [ZiStepY]                               ; ZdY  VZ   UZ   ZX   y    UL   VL
06415                 fmulp   st(4),st                                ; VZ   UZ   ZX   ZY   UL   VL
06416                 fxch    st(2)                                   ; ZX   UZ   VZ   ZY   UL   VL
06417                 fadd    [ZiOrigin]                              ; ZXS  UZ   VZ   ZY   UL   VL
06418 
06419                 faddp   st(3),st                                ; UZ   VZ   Zi   UL   VL
06420                 fld1                                                    ; 1    UZ   VZ   Zi   UL   VL
06421                 fdiv    st,st(3)                                ; ZR   UZ   VZ   Zi   UL   VL
06422 
06423                 fld             st                                              ; ZR   ZR   UZ   VZ   Zi   UL   VL
06424                 fmul    st,st(3)                                ; VR   ZR   UZ   VZ   Zi   UL   VL
06425                 fxch    st(1)                                   ; ZR   VR   UZ   VZ   Zi   UL   VL
06426                 fmul    st,st(2)                                ; UR   VR   UZ   VZ   Zi   UL   VL
06427 
06428                 //lazy idiv below... should 1/int mul mul
06429 
06430                 ; calculate deltas                              ; st0  st1  st2  st3  st4  st5  st6  st7
06431                 fsubr   st(5),st                                ; UR   VR   inv. inv. inv. dU   VL
06432                 fxch    st(1)                                   ; VR   UR   inv. inv. inv. dU   VL
06433                 fsubr   st(6),st                                ; VR   UR   inv. inv. inv. dU   dV
06434                 fxch    st(6)                                   ; dV   UR   inv. inv. inv. dU   VR
06435                 fidiv   dword ptr[RemainingCount];dv   UR   inv. inv. inv. dU   VR
06436                 fadd    qword ptr[MipMagic]             ; dvk  UR   inv. inv. inv. dU   VR
06437                 fxch    st(5)                                   ; dU   UR   inv. inv. inv. dvk  VR
06438                 fidiv   dword ptr[RemainingCount];du   UR   inv. inv. inv. dvk  VR
06439                 fadd    qword ptr[MipMagic]             ; duk  UR   inv. inv. inv. dvk  VR
06440                 fxch    st(5)                                   ; dvk  UR   inv. inv. inv. duk  VR
06441                 fstp    qword ptr[DeltaV]               ; UR   inv. inv. inv. duk  VR
06442                 fxch    st(4)                                   ; duk  inv. inv. inv. UR   VR
06443                 fstp    qword ptr[DeltaU]               ; inv. inv. inv. UR   VR
06444                 fld             st(1)                                   ; inv. inv. inv. inv. UR   VR
06445                 fld             st(2)                                   ; inv. inv. inv. inv. inv. UR   VR
06446 
06447 OnePixelSpan16:
06448                 // Clamp U/V
06449                 mov             ebx,[UFixed]
06450                 cmp             ebx,MaxU
06451                 jle             TryClampU116
06452                 mov             ecx,MaxU
06453                 mov             dword ptr[UFixed],ecx
06454                 jmp             NoClampU116
06455 
06456 TryClampU116:
06457                 cmp             ebx,0
06458                 jge             NoClampU116
06459                 mov             dword ptr[UFixed],0
06460 NoClampU116:
06461                 mov             eax,[VFixed]
06462                 cmp             eax,MaxV
06463                 jle             TryClampV116
06464                 mov             ecx,MaxV
06465                 mov             dword ptr[VFixed],ecx
06466                 jmp             NoClampV116
06467 
06468 TryClampV116:
06469                 cmp             eax,0
06470                 jge             NoClampV116
06471                 mov             dword ptr[VFixed],0
06472 
06473 NoClampV116:
06474                 mov             esi,dword ptr[UFixed]
06475                 mov             eax,dword ptr[VFixed]
06476 
06477                 mov ecx, GMipLevel4_8
06478                 sar esi, cl
06479                 sar eax, cl
06480                 and esi, 0ffh
06481                 and eax, 0ffh
06482                 mov UDist, esi
06483                 mov VDist, eax
06484 
06485                 mov esi,dword ptr[UFixed]
06486                 mov eax,dword ptr[VFixed]
06487                 mov ecx, GMipLevel20
06488                 shr esi, cl
06489                 shr eax, cl
06490 
06491                 imul eax, GLightWidth
06492                 add esi, eax
06493 
06494                 mov edx, esi
06495                 shl esi, 1
06496                 add edx, esi
06497 
06498                 add edx, GLightData
06499 
06500                 // Interpolate accross top
06501                 xor ecx, ecx
06502                 mov cl, [edx+3]
06503                 mov eax, ecx
06504                 mov cl, [edx+0]
06505                 sub eax, ecx
06506                 imul eax, UDist
06507                 shl ecx, 8
06508                 add eax, ecx
06509                 mov [R1], eax
06510 
06511                 xor ecx, ecx
06512                 mov cl, [edx+4]
06513                 mov eax, ecx
06514                 mov cl, [edx+1]
06515                 sub eax, ecx
06516                 imul eax, UDist
06517                 shl ecx, 8
06518                 add eax, ecx
06519                 mov [G1], eax
06520 
06521                 xor ecx, ecx
06522                 mov cl, [edx+5]
06523                 mov eax, ecx
06524                 mov cl, [edx+2]
06525                 sub eax, ecx
06526                 imul eax, UDist
06527                 shl ecx, 8
06528                 add eax, ecx
06529                 mov [B1], eax
06530 
06531                 add edx, GLightWidth
06532                 add edx, GLightWidth
06533                 add edx, GLightWidth
06534 
06535                 // Interpolate accross bottom
06536                 xor ecx, ecx
06537                 mov cl, [edx+3]
06538                 mov eax, ecx
06539                 mov cl, [edx+0]
06540                 sub eax, ecx
06541                 imul eax, UDist
06542                 shl ecx, 8
06543                 add eax, ecx
06544                 mov [R2], eax
06545 
06546                 xor ecx, ecx
06547                 mov cl, [edx+4]
06548                 mov eax, ecx
06549                 mov cl, [edx+1]
06550                 sub eax, ecx
06551                 imul eax, UDist
06552                 shl ecx, 8
06553                 add eax, ecx
06554                 mov [G2], eax
06555 
06556                 xor ecx, ecx
06557                 mov cl, [edx+5]
06558                 mov eax, ecx
06559                 mov cl, [edx+2]
06560                 sub eax, ecx
06561                 imul eax, UDist
06562                 shl ecx, 8
06563                 add eax, ecx
06564                 mov [B2], eax
06565 
06566                 // Interpolate down
06567                 mov eax, [R2]
06568                 sub eax, [R1]
06569                 imul eax, VDist
06570                 sar eax, 8
06571                 add eax, [R1]
06572                 shr eax, 8
06573                 and     eax,0feh
06574 
06575                 mov [RR1], eax
06576 
06577                 mov eax, [G2]
06578                 sub eax, [G1]
06579                 imul eax, VDist
06580                 sar eax, 8
06581                 add eax, [G1]
06582                 shr eax, 8
06583                 and     eax,0feh
06584 
06585                 mov [GG1], eax
06586 
06587                 mov eax, [B2]
06588                 sub eax, [B1]
06589                 imul eax, VDist
06590                 sar eax, 8
06591                 add eax, [B1]
06592                 shr eax, 8
06593                 and     eax,0feh
06594 
06595                 mov [BB1], eax
06596 
06597                 fstp    [FTemp0]
06598                 fstp    [FTemp1]
06599                 fstp    [FTemp2]
06600                 fstp    [FTemp3]
06601                 fstp    [FTemp4]
06602                 fstp    [FTemp5]
06603 
06604                 mov             ebx,dword ptr[U1]
06605                 mov             edx,dword ptr[V1]
06606 
06607                 fild    [RR1]                                   ; LR
06608                 fild    [GG1]                                   ; LG   LR
06609                 fild    [BB1]                                   ; LB   LG   LR
06610 
06611                 mov             ecx,[VShift]
06612                 add             edx,dword ptr[VAdjust2]
06613 
06614                 add             ebx,dword ptr[UAdjust2]
06615                 mov             eax,dword ptr[DeltaV]
06616 
06617                 shl             eax,cl
06618                 mov             esi,pTex
06619 
06620                 shl             edx,cl
06621                 mov             dword ptr[DeltaV],eax
06622 
06623                 mov             eax,[ZDelta]
06624                 mov             ecx,[ZVal]
06625 
06626                 sar             eax,1
06627                 push    ebp
06628 
06629                 mov             [ZDelta],eax
06630 
06631 LeftoverLoop16:
06632                 mov             eax,edx
06633                 and             ebx,[GWMaskShifted]
06634 
06635                 and             eax,[GHMaskShifted16]
06636 
06637                 add             eax,ebx
06638                 add             ebx,dword ptr[DeltaU]
06639 
06640                 shr             eax,16
06641                 add             edi,2
06642 
06643                 mov             ax,word ptr[2*eax+esi]
06644                 add             edx,dword ptr[DeltaV]
06645 
06646                 xor             eax,0
06647 
06648                 mov             esi,eax
06649                 mov             ebp,eax
06650 
06651                 and             esi,REDMASK2
06652                 and             ebp,GREENMASK2
06653 
06654                 mov             dword ptr[Red],esi
06655                 mov             dword ptr[Green],ebp
06656 
06657                 fild    qword ptr[Red]                  ; r    LB   LG   LR
06658 
06659                 mov             ebp,eax
06660 
06661                 fmul    st,st(3)                                ; R    LB   LG   LR
06662                 fild    qword ptr[Green]                ; g    R    LB   LG   LR
06663 
06664                 and             ebp,BLUEMASK
06665 
06666                 mov             dword ptr[Blue],ebp
06667 
06668                 fmul    st,st(3)                                ; G    R    LB   LG   LR
06669                 fild    [Blue]                                  ; b    G    R    LB   LG   LR
06670                 fmul    st,st(3)                                ; B    G    R    LB   LG   LR
06671                 fxch    st(2)                                   ; R    G    B    LB   LG   LR
06672                 fadd    qword ptr[Magic]                ; Rk   G    B    LB   LG   LR
06673                 fxch    st(1)                                   ; G    Rk   B    LB   LG   LR
06674                 fadd    qword ptr[Magic]                ; Gk   Rk   B    LB   LG   LR
06675                 fxch    st(2)                                   ; B    Rk   Gk   LB   LG   LR
06676                 fadd    qword ptr[Magic]                ; Bk   Rk   Gk   LB   LG   LR
06677                 fxch    st(1)                                   ; Rk   Bk   Gk   LB   LG   LR
06678                 fstp    qword ptr[Bucket]               ; Bk   Gk   LB   LG   LR
06679                 fstp    qword ptr[Bucket2]              ; Gk   LB   LG   LR
06680 
06681                 mov             eax,dword ptr[Bucket]
06682                 mov             ebp,dword ptr[Bucket2]
06683 
06684                 fstp    qword ptr[Bucket]               ; LB   LG   LR
06685 
06686                 and             eax,REDMASK2
06687                 and             ebp,BLUEMASK
06688                 
06689                 mov             esi,dword ptr[Bucket]
06690                 or              ebp,eax
06691 
06692                 and             esi,GREENMASK2
06693                 mov             eax,ecx
06694 
06695                 or              ebp,esi
06696 
06697                 shr             eax,16
06698                 mov             esi,pZBufferPtr
06699 
06700                 mov             word ptr[edi-2],bp
06701                 mov             word ptr[esi],ax
06702 
06703                 add             ecx,[ZDelta]
06704                 mov             esi,pTex
06705 
06706                 add             pZBufferPtr,2
06707 
06708                 dec             [RemainingCount]
06709                 jge             LeftoverLoop16
06710 
06711                 pop             ebp
06712 
06713 
06714 FPUReturn16:
06715                 ffree   st(0)
06716                 ffree   st(1)
06717                 ffree   st(2)
06718                 ffree   st(3)
06719                 ffree   st(4)
06720                 ffree   st(5)
06721                 ffree   st(6)
06722 
06723 Return16:
06724                 pop             edi
06725                 pop             esi
06726                 pop             ecx
06727                 pop             ebx
06728         }
06729 }


Generated on Tue Sep 30 12:38:34 2003 for GTestAndEngine by doxygen 1.3.2