some fixes

git-svn-id: svn://kolibrios.org@5278 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA
2014-12-28 20:13:27 +00:00
parent 07b6e3f4f2
commit 470be179f7
3 changed files with 54 additions and 57 deletions

View File

@@ -227,74 +227,66 @@ endp
; tmin,tmax -> &float
align 4
proc ClipLine1 uses ebx, denom:dword,num:dword,tmin:dword,tmax:dword
fldz
fcom dword[denom]
fld dword[denom]
ftst
fstsw ax
sahf
je .u2
jmp @f
.u2:
fcom dword[num]
fstsw ax
sahf
jb .r0 ;if (denom==0 && num>0) return 0
jmp .r1
@@:
fcom dword[denom]
fstsw ax
sahf
ja .els_0 ;if (0<denom)
jbe .els_0 ;if (denom>0)
fld dword[num]
fdiv dword[denom]
fxch st1
fdivp ;t=num/denom
mov ebx,[tmax]
fcom dword[ebx]
fstsw ax
sahf
ja .r0_f2 ;if (t>*tmax) return 0
ja .r0_f1 ;if (t>*tmax) return 0
mov ebx,[tmin]
fcom dword[ebx]
fstsw ax
sahf
jbe .r1_f2
fstp dword[ebx] ;if (t>*tmin) *tmin=t
jbe .r1_f1 ;if (t>*tmin) *tmin=t
fstp dword[ebx]
jmp .r1
.els_0: ;else if (0>denom)
.els_0: ;else if (denom<0)
jae .els_1
fld dword[num]
fdiv dword[denom]
fxch st1
fdivp ;t=num/denom
mov ebx,[tmin]
fcom dword[ebx]
fstsw ax
sahf
jb .r0_f2 ;if (t<*tmin) return 0
jb .r0_f1 ;if (t<*tmin) return 0
mov ebx,[tmax]
fcom dword[ebx]
fstsw ax
sahf
jae .r1_f2
jae .r1_f1
fstp dword[ebx] ;if (t<*tmin) *tmax=t
jmp .r1
jmp .r1
.els_1: ;else if (num>0)
ffree st0 ;denom
fincstp
fld dword[num]
ftst
fstsw ax
sahf
ja .r0_f1 ;if (num>0) return 0
jmp .r1_f1
.r0_f2: ;return 0 & free st0,st1
.r0_f1: ;return 0 & free st0
ffree st0
fincstp
.r0: ;return 0 & free st0
.r0: ;return 0
xor eax,eax
jmp .end_f
.r1_f2: ;return 1 & free st0,st1
.r1_f1: ;return 1 & free st0
ffree st0
fincstp
.r1: ;return 1 & free st0
.r1: ;return 1
xor eax,eax
inc eax
.end_f:
ffree st0
fincstp
ret
endp