minix/lib/ack/i386/em/em_fif4.s

37 lines
692 B
ArmAsm
Executable file

.sect .text; .sect .rom; .sect .data; .sect .bss
.define .fif4
.sect .text
.fif4:
mov bx,sp
flds 8(bx)
fmuls 12(bx) ! multiply
fld st ! copy result
ftst ! test sign; handle negative separately
fstsw ax
wait
sahf ! result of test in condition codes
jb 1f
frndint ! this one rounds (?)
fcom st(1) ! compare with original; if <=, then OK
fstsw ax
wait
sahf
jbe 2f
fisubs (one) ! else subtract 1
jmp 2f
1: ! here, negative case
frndint ! this one rounds (?)
fcom st(1) ! compare with original; if >=, then OK
fstsw ax
wait
sahf
jae 2f
fiadds (one) ! else add 1
2:
fsub st(1),st ! subtract integer part
mov bx,4(bx)
fstps (bx)
fstps 4(bx)
wait
ret