Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
;---------------------------------------------------------------------------- ; ; texdiff.inc ; ; Assembly macro for TextureDiff. ; ; Copyright (C) Microsoft Corporation, 1997. ; ;----------------------------------------------------------------------------
IFNDEF __TEXDIFF_INC__ __TEXDIFF_INC__ EQU 1
;---------------------------------------------------------------------------- ; ; TEXTURE_DIFF ; ; Computes difference of two texture coordinates and returns it on ; the top of the FP stack. ; ; Destroys eax and ecx. ; ;---------------------------------------------------------------------------- TEXTURE_DIFF MACRO fTb, fTa, iMode, fTmp LOCAL L_Exit, L_Ltz, L_Gtz, L_Zero, L_Straight
; Start initial fTb - fTa computation. fld fTb fsub fTa
; Check for wrapping. cmp iMode, 0 jz L_Exit
; Compute smaller of straight or wrapped difference. fst fTmp fld st(0)
; Adjust straight difference according to sign to compute ; wrapped difference. mov eax, fTmp cmp eax, 080000000h ja L_Ltz cmp eax, 0 je L_Zero
; Gtz fsub _g_fOne jmp L_Gtz L_Ltz: fadd _g_fOne
L_Zero: and eax, 07fffffffh L_Gtz: fst fTmp mov ecx, fTmp and ecx, 07fffffffh
; Pick smaller based on absolute values of differences. cmp eax, ecx jle L_Straight
; Discard straight difference so wrapped difference is ; returned. fxch st(1)
L_Straight: ; Discard wrapped difference so straight difference is ; returned. fstp st(0) L_Exit: ENDM ENDIF
|