* Math.asm (of PCQ Pascal runtime library) * Copyright (c) 1989 Patrick Quaid * This file has the stubs that implement floating point math. This * is yet another group of routines for which you don't need to open * your own library. The only trick here is that if the divisor in * SPDiv is zero, you'll get a run-time error. If you look at * the code for this you may get confused. It works because it turns * out that floating point zero and integer zero have the same * representation. XREF _p%MathBase XREF _exit SECTION MATH XDEF _SPFix _SPFix move.l 4(sp),d0 move.l _p%MathBase,a6 jsr _LVOSPFix(a6) rts XDEF _SPFloat _SPFloat move.l 4(sp),d0 move.l _p%MathBase,a6 jsr _LVOSPFlt(a6) rts XDEF _SPCmp _SPCmp move.l 8(sp),d0 move.l 4(sp),d1 move.l _p%MathBase,a6 jsr _LVOSPCmp(a6) rts XDEF _SPTst _SPTst move.l 4(sp),d1 move.l _p%MathBase,a6 jsr _LVOSPTst(a6) rts XDEF _SPAbs _SPAbs move.l 4(sp),d0 move.l _p%MathBase,a6 jsr _LVOSPAbs(a6) rts XDEF _SPNeg _SPNeg move.l 4(sp),d0 move.l _p%MathBase,a6 jsr _LVOSPNeg(a6) rts XDEF _SPAdd _SPAdd move.l 8(sp),d0 move.l 4(sp),d1 move.l _p%MathBase,a6 jsr _LVOSPAdd(a6) rts XDEF _SPSub _SPSub move.l 8(sp),d0 move.l 4(sp),d1 move.l _p%MathBase,a6 jsr _LVOSPSub(a6) rts XDEF _SPMul _SPMul move.l 8(sp),d0 move.l 4(sp),d1 move.l _p%MathBase,a6 jsr _LVOSPMul(a6) rts XDEF _SPDiv _SPDiv move.l 8(sp),d0 move.l 4(sp),d1 bne.s 1$ move.l #51,d0 jmp _exit 1$ move.l _p%MathBase,a6 jsr _LVOSPDiv(a6) rts XREF _LVOSPFix XREF _LVOSPFlt XREF _LVOSPCmp XREF _LVOSPTst XREF _LVOSPAbs XREF _LVOSPNeg XREF _LVOSPAdd XREF _LVOSPSub XREF _LVOSPMul XREF _LVOSPDiv END