| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- (* Release 3.00 *)
- (* Copyright (C) 1989..1991 Jensen and Partners. All Rights Reserved *)
- module winfloat
- (*emuinit2*)
- public FIDRQQ = 00000H
- public FIWRQQ = 00000H
- public FIERQQ = 00000H
- public FIARQQ = 00000H
- public FISRQQ = 00000H
- public FICRQQ = 00000H
- public FJERQQ = 00000H
- public FJARQQ = 00000H
- public FJSRQQ = 00000H
- public FJCRQQ = 00000H
- public FIXRQQ = 0 (* brings this module in - known to linker *)
- segment _DATA(DATA,68H)
- segment _TEXT(CODE,28H)
- extrn __real_in
- extrn __real_out
- extrn __real_pdef
- extrn __real_sdef
- extrn __fpmath
- select _TEXT
- extrn __sigFp
- win__fpmath:
- push ax ; push cx ; push dx; push si; push di
- call far __fpmath
- pop di; pop si; pop dx; pop cx; pop ax
- ret 0
- public __FloatInit :
- sub dx,dx
- sub ax,ax
- sub bx,bx
- call win__fpmath
- mov dx, cs
- mov ax, __sigFp
- mov bx, 3
- call win__fpmath
- push bp
- mov bp, sp
- sub sp,2
- extrn __fp_1
- call far __fp_1
- extrn __FloatInitStack
- call far __FloatInitStack
- extrn __FloatStoreCW
- call far __FloatStoreCW
- or ax, 0C00H
- and ax, ~001DH (* enable invalid op/underflow/overflow/divide by zero exception *)
- extrn __FloatLoadCW
- call far __FloatLoadCW
- mov sp,bp
- pop bp
- ret far 0
- public __FloatFinish:
- mov bx, 2
- call win__fpmath
- ret far 0
- ProcessFloat = 14
- extrn __fpmath
- public __FloatStoreSW :
- push bx
- mov bx, 8
- call win__fpmath
- pop bx
- ret far 0
- public __FloatStoreCW :
- push bx
- mov bx, 5
- call win__fpmath
- pop bx
- ret far 0
- public __FloatLoadCW :
- push bx
- mov bx, 4
- call win__fpmath
- pop bx
- ret far 0
- public __FloatExecSave :
- public __FloatExecRestore :
- ret far 0
- public __FloatSave :
- fsave es:[ProcessFloat]
- ret far 0
- public __FloatRestore :
- frstor ds:[ProcessFloat]
- ret far 0
- public __FloatJmpSave :
- st1_reg = 20
- st2_reg = 30
- fld st(0), st(1)
- fstp tbyte es:[di][st1_reg], st(0)
- fld st(0), st(2)
- fstp tbyte es:[di][st2_reg], st(0)
- ret far 0
- public __FloatJmpRestore :
- fld tbyte st(0), ds:[si][st1_reg]
- fstp st(2), st(0)
- fld tbyte st(0), ds:[si][st2_reg]
- fstp st(3), st(0)
- ret far 0
- extrn __math_excep
- public __FloatMathExcepDos :
- push bp
- mov bp,sp
- extrn __FloatStoreSW
- call far __FloatStoreSW
- mov [bp][4], ax
- pop bp
- fclex
- jmp far __math_excep
- public __FloatMathExcepOs2 :
- push bp
- mov bp,sp
- push ax
- mov ax, [bp][2]
- mov [bp][4], ax
- pop ax
- pop bp
- add sp, 2
- jmp far __math_excep
- end
|