sys7.1-doc-wip/Interfaces/AIncludes/SANEMacs.a
2019-07-27 22:37:48 +08:00

1597 lines
37 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
; File: SANEMacs.a
;
; Contains: xxx put contents here xxx
;
; Written by: xxx put writers here xxx
;
; Copyright: © 1991 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <6> 3/13/91 JL Checking in MPW version. Removed precision code masks
; <5> 1/30/91 gbm sab, #38: Change the already including this file variable to
; all uppercase (for security reasons)
;
; To Do:
;
; Version: 1.02
; Created: Tuesday, August 2, 1988 at 9:48:22 PM
; File: SANEMacs.a
;
; Copyright Apple Computer, Inc. 1984, 1985, 1986, 1987, 1989, 1990, 1991
; All Rights Reserved
;
; SANE Numerics -- This file defines the assembly language
; access to the 68K floating-point arithmetic routines. It is
; documented in the Apple Numerics Manual.
;
;************************************************************
; CHANGE LOG (relative to MPW 3.1 release)
;
; 16 Nov 89 JPO Added macros for operations involving
; 96-bit extended format (Ω SANE)
; 27 Mar 90 JPO Changed 96-bit extended opcodes for PACK 4
; routines (bit 5 set instead of bit 7)
; 29 Mar 90 JPO Added macro FCLASSC (classify comp)
;************************************************************
;———————————————————————————————————————————————————————————
; Operation code masks.
;———————————————————————————————————————————————————————————
FOADD EQU $0000 ; add
FOSUB EQU $0002 ; subtract
FOMUL EQU $0004 ; multiply
FODIV EQU $0006 ; divide
FOCMP EQU $0008 ; compare, no exception from unordered
FOCPX EQU $000A ; compare, signal invalid if unordered
FOREM EQU $000C ; remainder
FOZ2X EQU $000E ; convert to extended
FOX2Z EQU $0010 ; convert from extended
FOSQRT EQU $0012 ; square root
FORTI EQU $0014 ; round to integral value
FOTTI EQU $0016 ; truncate to integral value
FOSCALB EQU $0018 ; binary scale
FOLOGB EQU $001A ; binary log
FOCLASS EQU $001C ; classify
; UNDEFINED EQU $001E
FOSETENV EQU $0001 ; set environment
FOGETENV EQU $0003 ; get environment
FOSETHV EQU $0005 ; set halt vector
FOGETHV EQU $0007 ; get halt vector
FOD2B EQU $0009 ; convert decimal to binary
FOB2D EQU $000B ; convert binary to decimal
FONEG EQU $000D ; negate
FOABS EQU $000F ; absolute
FOCPYSGN EQU $0011 ; copy sign
FONEXT EQU $0013 ; next-after
FOSETXCP EQU $0015 ; set exception
FOPROCENTRY EQU $0017 ; procedure entry
FOPROCEXIT EQU $0019 ; procedure exit
FOTESTXCP EQU $001B ; test exception
; UNDEFINED EQU $001D
; UNDEFINED EQU $001F
;———————————————————————————————————————————————————————————
; Operand format masks.
;———————————————————————————————————————————————————————————
FFEXT EQU $0000 ; extended -- 80-bit float
FFEXT96 EQU $0020 ; extended -- 96-bit float
FFDBL EQU $0800 ; double -- 64-bit float
FFSGL EQU $1000 ; single -- 32-bit float
FFINT EQU $2000 ; integer -- 16-bit integer
FFLNG EQU $2800 ; long int -- 32-bit integer
FFCOMP EQU $3000 ; comp -- 64-bit integer
;———————————————————————————————————————————————————————————
; Operations: operand addresses should already be on
; the stack, with the destination address on top. The
; suffix X, D, S, C, I, or L determines the format of the
; source operand -- extended, double, single, comp,
; integer, or long integer, respectively; the destination
; operand is always extended.
;———————————————————————————————————————————————————————————
;———————————————————————————————————————————————————————————
; Addition.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FADDX
MOVE.W #FFEXT+FOADD,-(SP)
_FP68K
ENDM
MACRO
FADDD
MOVE.W #FFDBL+FOADD,-(SP)
_FP68K
ENDM
MACRO
FADDS
MOVE.W #FFSGL+FOADD,-(SP)
_FP68K
ENDM
MACRO
FADDC
MOVE.W #FFCOMP+FOADD,-(SP)
_FP68K
ENDM
MACRO
FADDI
MOVE.W #FFINT+FOADD,-(SP)
_FP68K
ENDM
MACRO
FADDL
MOVE.W #FFLNG+FOADD,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FADDX96
MOVE.W #FFEXT96+FOADD,-(SP)
_FP68K
ENDM
MACRO
FADDD96
MOVE.W #FFDBL+FFEXT96+FOADD,-(SP)
_FP68K
ENDM
MACRO
FADDS96
MOVE.W #FFSGL+FFEXT96+FOADD,-(SP)
_FP68K
ENDM
MACRO
FADDC96
MOVE.W #FFCOMP+FFEXT96+FOADD,-(SP)
_FP68K
ENDM
MACRO
FADDI96
MOVE.W #FFINT+FFEXT96+FOADD,-(SP)
_FP68K
ENDM
MACRO
FADDL96
MOVE.W #FFLNG+FFEXT96+FOADD,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Subtraction.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FSUBX
MOVE.W #FFEXT+FOSUB,-(SP)
_FP68K
ENDM
MACRO
FSUBD
MOVE.W #FFDBL+FOSUB,-(SP)
_FP68K
ENDM
MACRO
FSUBS
MOVE.W #FFSGL+FOSUB,-(SP)
_FP68K
ENDM
MACRO
FSUBC
MOVE.W #FFCOMP+FOSUB,-(SP)
_FP68K
ENDM
MACRO
FSUBI
MOVE.W #FFINT+FOSUB,-(SP)
_FP68K
ENDM
MACRO
FSUBL
MOVE.W #FFLNG+FOSUB,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FSUBX96
MOVE.W #FFEXT96+FOSUB,-(SP)
_FP68K
ENDM
MACRO
FSUBD96
MOVE.W #FFDBL+FFEXT96+FOSUB,-(SP)
_FP68K
ENDM
MACRO
FSUBS96
MOVE.W #FFSGL+FFEXT96+FOSUB,-(SP)
_FP68K
ENDM
MACRO
FSUBC96
MOVE.W #FFCOMP+FFEXT96+FOSUB,-(SP)
_FP68K
ENDM
MACRO
FSUBI96
MOVE.W #FFINT+FFEXT96+FOSUB,-(SP)
_FP68K
ENDM
MACRO
FSUBL96
MOVE.W #FFLNG+FFEXT96+FOSUB,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Multiplication.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FMULX
MOVE.W #FFEXT+FOMUL,-(SP)
_FP68K
ENDM
MACRO
FMULD
MOVE.W #FFDBL+FOMUL,-(SP)
_FP68K
ENDM
MACRO
FMULS
MOVE.W #FFSGL+FOMUL,-(SP)
_FP68K
ENDM
MACRO
FMULC
MOVE.W #FFCOMP+FOMUL,-(SP)
_FP68K
ENDM
MACRO
FMULI
MOVE.W #FFINT+FOMUL,-(SP)
_FP68K
ENDM
MACRO
FMULL
MOVE.W #FFLNG+FOMUL,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FMULX96
MOVE.W #FFEXT96+FOMUL,-(SP)
_FP68K
ENDM
MACRO
FMULD96
MOVE.W #FFDBL+FFEXT96+FOMUL,-(SP)
_FP68K
ENDM
MACRO
FMULS96
MOVE.W #FFSGL+FFEXT96+FOMUL,-(SP)
_FP68K
ENDM
MACRO
FMULC96
MOVE.W #FFCOMP+FFEXT96+FOMUL,-(SP)
_FP68K
ENDM
MACRO
FMULI96
MOVE.W #FFINT+FFEXT96+FOMUL,-(SP)
_FP68K
ENDM
MACRO
FMULL96
MOVE.W #FFLNG+FFEXT96+FOMUL,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Division.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FDIVX
MOVE.W #FFEXT+FODIV,-(SP)
_FP68K
ENDM
MACRO
FDIVD
MOVE.W #FFDBL+FODIV,-(SP)
_FP68K
ENDM
MACRO
FDIVS
MOVE.W #FFSGL+FODIV,-(SP)
_FP68K
ENDM
MACRO
FDIVC
MOVE.W #FFCOMP+FODIV,-(SP)
_FP68K
ENDM
MACRO
FDIVI
MOVE.W #FFINT+FODIV,-(SP)
_FP68K
ENDM
MACRO
FDIVL
MOVE.W #FFLNG+FODIV,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FDIVX96
MOVE.W #FFEXT96+FODIV,-(SP)
_FP68K
ENDM
MACRO
FDIVD96
MOVE.W #FFDBL+FFEXT96+FODIV,-(SP)
_FP68K
ENDM
MACRO
FDIVS96
MOVE.W #FFSGL+FFEXT96+FODIV,-(SP)
_FP68K
ENDM
MACRO
FDIVC96
MOVE.W #FFCOMP+FFEXT96+FODIV,-(SP)
_FP68K
ENDM
MACRO
FDIVI96
MOVE.W #FFINT+FFEXT96+FODIV,-(SP)
_FP68K
ENDM
MACRO
FDIVL96
MOVE.W #FFLNG+FFEXT96+FODIV,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Square root.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FSQRTX
MOVE.W #FOSQRT,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FSQRTX96
MOVE.W #FFEXT96+FOSQRT,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Round to integer, according to the current rounding mode.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FRINTX
MOVE.W #FORTI,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FRINTX96
MOVE.W #FFEXT96+FORTI,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Truncate to integer, using round toward zero.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FTINTX
MOVE.W #FOTTI,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FTINTX96
MOVE.W #FFEXT96+FOTTI,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Remainder.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FREMX
MOVE.W #FFEXT+FOREM,-(SP)
_FP68K
ENDM
MACRO
FREMD
MOVE.W #FFDBL+FOREM,-(SP)
_FP68K
ENDM
MACRO
FREMS
MOVE.W #FFSGL+FOREM,-(SP)
_FP68K
ENDM
MACRO
FREMC
MOVE.W #FFCOMP+FOREM,-(SP)
_FP68K
ENDM
MACRO
FREMI
MOVE.W #FFINT+FOREM,-(SP)
_FP68K
ENDM
MACRO
FREML
MOVE.W #FFLNG+FOREM,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FREMX96
MOVE.W #FFEXT96+FOREM,-(SP)
_FP68K
ENDM
MACRO
FREMD96
MOVE.W #FFDBL+FFEXT96+FOREM,-(SP)
_FP68K
ENDM
MACRO
FREMS96
MOVE.W #FFSGL+FFEXT96+FOREM,-(SP)
_FP68K
ENDM
MACRO
FREMC96
MOVE.W #FFCOMP+FFEXT96+FOREM,-(SP)
_FP68K
ENDM
MACRO
FREMI96
MOVE.W #FFINT+FFEXT96+FOREM,-(SP)
_FP68K
ENDM
MACRO
FREML96
MOVE.W #FFLNG+FFEXT96+FOREM,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Logb.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FLOGBX
MOVE.W #FOLOGB,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FLOGBX96
MOVE.W #FFEXT96+FOLOGB,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Scalb.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FSCALBX
MOVE.W #FFINT+FOSCALB,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FSCALBX96
MOVE.W #FFINT+FFEXT96+FOSCALB,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Copy-sign.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FCPYSGNX
MOVE.W #FOCPYSGN,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FCPYSGNX96
MOVE.W #FFEXT96+FOCPYSGN,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Negate.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FNEGX
MOVE.W #FONEG,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FNEGX96
MOVE.W #FFEXT96+FONEG,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Absolute value.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FABSX
MOVE.W #FOABS,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FABSX96
MOVE.W #FFEXT96+FOABS,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Next-after. NOTE: both operands are of the same
; format, as specified by the usual suffix.
;———————————————————————————————————————————————————————————
MACRO
FNEXTS
MOVE.W #FFSGL+FONEXT,-(SP)
_FP68K
ENDM
MACRO
FNEXTD
MOVE.W #FFDBL+FONEXT,-(SP)
_FP68K
ENDM
; 80-bit extended format
MACRO
FNEXTX
MOVE.W #FFEXT+FONEXT,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FNEXTX96
MOVE.W #FFEXT96+FONEXT,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Conversion to 80-bit extended.
;———————————————————————————————————————————————————————————
MACRO
FX2X
MOVE.W #FFEXT+FOZ2X,-(SP)
_FP68K
ENDM
MACRO
FD2X
MOVE.W #FFDBL+FOZ2X,-(SP)
_FP68K
ENDM
MACRO
FS2X
MOVE.W #FFSGL+FOZ2X,-(SP)
_FP68K
ENDM
MACRO
FI2X
MOVE.W #FFINT+FOZ2X,-(SP)
_FP68K
ENDM
MACRO
FL2X
MOVE.W #FFLNG+FOZ2X,-(SP)
_FP68K
ENDM
MACRO
FC2X
MOVE.W #FFCOMP+FOZ2X,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Conversion to 96-bit extended.
;———————————————————————————————————————————————————————————
MACRO
FX2X96
MOVE.W #FFEXT96+FOZ2X,-(SP)
_FP68K
ENDM
MACRO
FD2X96
MOVE.W #FFDBL+FFEXT96+FOZ2X,-(SP)
_FP68K
ENDM
MACRO
FS2X96
MOVE.W #FFSGL+FFEXT96+FOZ2X,-(SP)
_FP68K
ENDM
MACRO
FI2X96
MOVE.W #FFINT+FFEXT96+FOZ2X,-(SP)
_FP68K
ENDM
MACRO
FL2X96
MOVE.W #FFLNG+FFEXT96+FOZ2X,-(SP)
_FP68K
ENDM
MACRO
FC2X96
MOVE.W #FFCOMP+FFEXT96+FOZ2X,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Conversion from 80-bit extended.
;———————————————————————————————————————————————————————————
MACRO
FX2D
MOVE.W #FFDBL+FOX2Z,-(SP)
_FP68K
ENDM
MACRO
FX2S
MOVE.W #FFSGL+FOX2Z,-(SP)
_FP68K
ENDM
MACRO
FX2I
MOVE.W #FFINT+FOX2Z,-(SP)
_FP68K
ENDM
MACRO
FX2L
MOVE.W #FFLNG+FOX2Z,-(SP)
_FP68K
ENDM
MACRO
FX2C
MOVE.W #FFCOMP+FOX2Z,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Conversion from 96-bit extended.
;———————————————————————————————————————————————————————————
MACRO
FX2D96
MOVE.W #FFDBL+FFEXT96+FOX2Z,-(SP)
_FP68K
ENDM
MACRO
FX2S96
MOVE.W #FFSGL+FFEXT96+FOX2Z,-(SP)
_FP68K
ENDM
MACRO
FX2I96
MOVE.W #FFINT+FFEXT96+FOX2Z,-(SP)
_FP68K
ENDM
MACRO
FX2L96
MOVE.W #FFLNG+FFEXT96+FOX2Z,-(SP)
_FP68K
ENDM
MACRO
FX2C96
MOVE.W #FFCOMP+FFEXT96+FOX2Z,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Binary to decimal conversion.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FX2DEC
MOVE.W #FFEXT+FOB2D,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FX2DEC96
MOVE.W #FFEXT96+FOB2D,-(SP)
_FP68K
ENDM
MACRO
FD2DEC
MOVE.W #FFDBL+FOB2D,-(SP)
_FP68K
ENDM
MACRO
FS2DEC
MOVE.W #FFSGL+FOB2D,-(SP)
_FP68K
ENDM
MACRO
FC2DEC
MOVE.W #FFCOMP+FOB2D,-(SP)
_FP68K
ENDM
MACRO
FI2DEC
MOVE.W #FFINT+FOB2D,-(SP)
_FP68K
ENDM
MACRO
FL2DEC
MOVE.W #FFLNG+FOB2D,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Decimal to binary conversion.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FDEC2X
MOVE.W #FFEXT+FOD2B,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FDEC2X96
MOVE.W #FFEXT96+FOD2B,-(SP)
_FP68K
ENDM
MACRO
FDEC2D
MOVE.W #FFDBL+FOD2B,-(SP)
_FP68K
ENDM
MACRO
FDEC2S
MOVE.W #FFSGL+FOD2B,-(SP)
_FP68K
ENDM
MACRO
FDEC2C
MOVE.W #FFCOMP+FOD2B,-(SP)
_FP68K
ENDM
MACRO
FDEC2I
MOVE.W #FFINT+FOD2B,-(SP)
_FP68K
ENDM
MACRO
FDEC2L
MOVE.W #FFLNG+FOD2B,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Compare, not signaling invalid on unordered.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FCMPX
MOVE.W #FFEXT+FOCMP,-(SP)
_FP68K
ENDM
MACRO
FCMPD
MOVE.W #FFDBL+FOCMP,-(SP)
_FP68K
ENDM
MACRO
FCMPS
MOVE.W #FFSGL+FOCMP,-(SP)
_FP68K
ENDM
MACRO
FCMPC
MOVE.W #FFCOMP+FOCMP,-(SP)
_FP68K
ENDM
MACRO
FCMPI
MOVE.W #FFINT+FOCMP,-(SP)
_FP68K
ENDM
MACRO
FCMPL
MOVE.W #FFLNG+FOCMP,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FCMPX96
MOVE.W #FFEXT96+FOCMP,-(SP)
_FP68K
ENDM
MACRO
FCMPD96
MOVE.W #FFDBL+FFEXT96+FOCMP,-(SP)
_FP68K
ENDM
MACRO
FCMPS96
MOVE.W #FFSGL+FFEXT96+FOCMP,-(SP)
_FP68K
ENDM
MACRO
FCMPC96
MOVE.W #FFCOMP+FFEXT96+FOCMP,-(SP)
_FP68K
ENDM
MACRO
FCMPI96
MOVE.W #FFINT+FFEXT96+FOCMP,-(SP)
_FP68K
ENDM
MACRO
FCMPL96
MOVE.W #FFLNG+FFEXT96+FOCMP,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Compare, signaling invalid on unordered.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FCPXX
MOVE.W #FFEXT+FOCPX,-(SP)
_FP68K
ENDM
MACRO
FCPXD
MOVE.W #FFDBL+FOCPX,-(SP)
_FP68K
ENDM
MACRO
FCPXS
MOVE.W #FFSGL+FOCPX,-(SP)
_FP68K
ENDM
MACRO
FCPXC
MOVE.W #FFCOMP+FOCPX,-(SP)
_FP68K
ENDM
MACRO
FCPXI
MOVE.W #FFINT+FOCPX,-(SP)
_FP68K
ENDM
MACRO
FCPXL
MOVE.W #FFLNG+FOCPX,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FCPXX96
MOVE.W #FFEXT96+FOCPX,-(SP)
_FP68K
ENDM
MACRO
FCPXD96
MOVE.W #FFDBL+FFEXT96+FOCPX,-(SP)
_FP68K
ENDM
MACRO
FCPXS96
MOVE.W #FFSGL+FFEXT96+FOCPX,-(SP)
_FP68K
ENDM
MACRO
FCPXC96
MOVE.W #FFCOMP+FFEXT96+FOCPX,-(SP)
_FP68K
ENDM
MACRO
FCPXI96
MOVE.W #FFINT+FFEXT96+FOCPX,-(SP)
_FP68K
ENDM
MACRO
FCPXL96
MOVE.W #FFLNG+FFEXT96+FOCPX,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; The following defines a set of so-called floating
; branches. They presume that an appropriate compare
; operation, FCMPz, FCMPz96, FCPXz or FCPXz96, precedes.
;———————————————————————————————————————————————————————————
MACRO
FBEQL
BEQ &SYSLIST[1]
ENDM
MACRO
FBLTL
BCS &SYSLIST[1]
ENDM
MACRO
FBLEL
BLS &SYSLIST[1]
ENDM
MACRO
FBGTL
BGT &SYSLIST[1]
ENDM
MACRO
FBGEL
BGE &SYSLIST[1]
ENDM
MACRO
FBULTL
BLT &SYSLIST[1]
ENDM
MACRO
FBULEL
BLE &SYSLIST[1]
ENDM
MACRO
FBUGTL
BHI &SYSLIST[1]
ENDM
MACRO
FBUGEL
BCC &SYSLIST[1]
ENDM
MACRO
FBUL
BVS &SYSLIST[1]
ENDM
MACRO
FBOL
BVC &SYSLIST[1]
ENDM
MACRO
FBNEL
BNE &SYSLIST[1]
ENDM
MACRO
FBUEL
BEQ &SYSLIST[1]
BVS &SYSLIST[1]
ENDM
MACRO
FBLGL
BCS &SYSLIST[1]
BGT &SYSLIST[1]
ENDM
;———————————————————————————————————————————————————————————
; Short branch versions.
;———————————————————————————————————————————————————————————
MACRO
FBEQS
BEQ.S &SYSLIST[1]
ENDM
MACRO
FBLTS
BCS.S &SYSLIST[1]
ENDM
MACRO
FBLES
BLS.S &SYSLIST[1]
ENDM
MACRO
FBGTS
BGT.S &SYSLIST[1]
ENDM
MACRO
FBGES
BGE.S &SYSLIST[1]
ENDM
MACRO
FBULTS
BLT.S &SYSLIST[1]
ENDM
MACRO
FBULES
BLE.S &SYSLIST[1]
ENDM
MACRO
FBUGTS
BHI.S &SYSLIST[1]
ENDM
MACRO
FBUGES
BCC.S &SYSLIST[1]
ENDM
MACRO
FBUS
BVS.S &SYSLIST[1]
ENDM
MACRO
FBOS
BVC.S &SYSLIST[1]
ENDM
MACRO
FBNES
BNE.S &SYSLIST[1]
ENDM
MACRO
FBUES
BEQ.S &SYSLIST[1]
BVS.S &SYSLIST[1]
ENDM
MACRO
FBLGS
BCS.S &SYSLIST[1]
BGT.S &SYSLIST[1]
ENDM
;———————————————————————————————————————————————————————————
; Class and sign inquiries.
;———————————————————————————————————————————————————————————
FCSNAN EQU 1 ; signaling NAN
FCQNAN EQU 2 ; quiet NAN
FCINF EQU 3 ; infinity
FCZERO EQU 4 ; zero
FCNORM EQU 5 ; normal number
FCDENORM EQU 6 ; denormal number
MACRO
FCLASSC
MOVE.W #FFCOMP+FOCLASS,-(SP)
_FP68K
ENDM
MACRO
FCLASSS
MOVE.W #FFSGL+FOCLASS,-(SP)
_FP68K
ENDM
MACRO
FCLASSD
MOVE.W #FFDBL+FOCLASS,-(SP)
_FP68K
ENDM
; 80-bit extended format
MACRO
FCLASSX
MOVE.W #FFEXT+FOCLASS,-(SP)
_FP68K
ENDM
; 96-bit extended format
MACRO
FCLASSX96
MOVE.W #FFEXT96+FOCLASS,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Bit indexes for bytes of floating point environment word.
;———————————————————————————————————————————————————————————
FBINVALID EQU 0 ; invalid operation
FBUFLOW EQU 1 ; underflow
FBOFLOW EQU 2 ; overflow
FBDIVZER EQU 3 ; division by zero
FBINEXACT EQU 4 ; inexact
FBRNDLO EQU 5 ; low bit of rounding mode
FBRNDHI EQU 6 ; high bit of rounding mode
FBLSTRND EQU 7 ; last round result bit
FBDBL EQU 5 ; double precision control
FBSGL EQU 6 ; single precision control
;———————————————————————————————————————————————————————————
; Get and set environment.
;———————————————————————————————————————————————————————————
MACRO
FGETENV
MOVE.W #FOGETENV,-(SP)
_FP68K
ENDM
MACRO
FSETENV
MOVE.W #FOSETENV,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Test and set exception.
;———————————————————————————————————————————————————————————
MACRO
FTESTXCP
MOVE.W #FOTESTXCP,-(SP)
_FP68K
ENDM
MACRO
FSETXCP
MOVE.W #FOSETXCP,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Procedure entry and exit.
;———————————————————————————————————————————————————————————
MACRO
FPROCENTRY
MOVE.W #FOPROCENTRY,-(SP)
_FP68K
ENDM
MACRO
FPROCEXIT
MOVE.W #FOPROCEXIT,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Get and set halt vector.
;———————————————————————————————————————————————————————————
MACRO
FGETHV
MOVE.W #FOGETHV,-(SP)
_FP68K
ENDM
MACRO
FSETHV
MOVE.W #FOSETHV,-(SP)
_FP68K
ENDM
;———————————————————————————————————————————————————————————
; Elementary function operation code masks.
;———————————————————————————————————————————————————————————
ELEXT96 EQU $0080 ; 96-bit extended format
FOLNX EQU $0000 ; base-e log
FOLOG2X EQU $0002 ; base-2 log
FOLN1X EQU $0004 ; ln (1 + x)
FOLOG21X EQU $0006 ; log2 (1 + x)
FOEXPX EQU $0008 ; base-e exponential
FOEXP2X EQU $000A ; base-2 exponential
FOEXP1X EQU $000C ; exp (x) - 1
FOEXP21X EQU $000E ; exp2 (x) - 1
FOXPWRI EQU $8010 ; integer exponentiation
FOXPWRY EQU $8012 ; general exponentiation
FOCOMPOUND EQU $C014 ; compound
FOANNUITY EQU $C016 ; annuity
FOSINX EQU $0018 ; sine
FOCOSX EQU $001A ; cosine
FOTANX EQU $001C ; tangent
FOATANX EQU $001E ; arctangent
FORANDX EQU $0020 ; random
;———————————————————————————————————————————————————————————
; Elementary functions.
;———————————————————————————————————————————————————————————
; 80-bit extended format
MACRO
FLNX ; base-e log
MOVE.W #FOLNX,-(SP)
_ELEMS68K
ENDM
MACRO
FLOG2X ; base-2 log
MOVE.W #FOLOG2X,-(SP)
_ELEMS68K
ENDM
MACRO
FLN1X ; ln (1 + x)
MOVE.W #FOLN1X,-(SP)
_ELEMS68K
ENDM
MACRO
FLOG21X ; log2 (1 + x)
MOVE.W #FOLOG21X,-(SP)
_ELEMS68K
ENDM
MACRO
FEXPX ; base-e exponential
MOVE.W #FOEXPX,-(SP)
_ELEMS68K
ENDM
MACRO
FEXP2X ; base-2 exponential
MOVE.W #FOEXP2X,-(SP)
_ELEMS68K
ENDM
MACRO
FEXP1X ; exp (x) - 1
MOVE.W #FOEXP1X,-(SP)
_ELEMS68K
ENDM
MACRO
FEXP21X ; exp2 (x) - 1
MOVE.W #FOEXP21X,-(SP)
_ELEMS68K
ENDM
MACRO
FXPWRI ; integer exponential
MOVE.W #FOXPWRI,-(SP)
_ELEMS68K
ENDM
MACRO
FXPWRY ; general exponential
MOVE.W #FOXPWRY,-(SP)
_ELEMS68K
ENDM
MACRO
FCOMPOUND ; compound
MOVE.W #FOCOMPOUND,-(SP)
_ELEMS68K
ENDM
MACRO
FANNUITY ; annuity
MOVE.W #FOANNUITY,-(SP)
_ELEMS68K
ENDM
MACRO
FSINX ; sine
MOVE.W #FOSINX,-(SP)
_ELEMS68K
ENDM
MACRO
FCOSX ; cosine
MOVE.W #FOCOSX,-(SP)
_ELEMS68K
ENDM
MACRO
FTANX ; tangent
MOVE.W #FOTANX,-(SP)
_ELEMS68K
ENDM
MACRO
FATANX ; arctangent
MOVE.W #FOATANX,-(SP)
_ELEMS68K
ENDM
MACRO
FRANDX ; random number generator
MOVE.W #FORANDX,-(SP)
_ELEMS68K
ENDM
; 96-bit extended format
MACRO
FLNX96 ; base-e log
MOVE.W #ELEXT96+FOLNX,-(SP)
_ELEMS68K
ENDM
MACRO
FLOG2X96 ; base-2 log
MOVE.W #ELEXT96+FOLOG2X,-(SP)
_ELEMS68K
ENDM
MACRO
FLN1X96 ; ln (1 + x)
MOVE.W #ELEXT96+FOLN1X,-(SP)
_ELEMS68K
ENDM
MACRO
FLOG21X96 ; log2 (1 + x)
MOVE.W #ELEXT96+FOLOG21X,-(SP)
_ELEMS68K
ENDM
MACRO
FEXPX96 ; base-e exponential
MOVE.W #ELEXT96+FOEXPX,-(SP)
_ELEMS68K
ENDM
MACRO
FEXP2X96 ; base-2 exponential
MOVE.W #ELEXT96+FOEXP2X,-(SP)
_ELEMS68K
ENDM
MACRO
FEXP1X96 ; exp (x) - 1
MOVE.W #ELEXT96+FOEXP1X,-(SP)
_ELEMS68K
ENDM
MACRO
FEXP21X96 ; exp2 (x) - 1
MOVE.W #ELEXT96+FOEXP21X,-(SP)
_ELEMS68K
ENDM
MACRO
FXPWRI96 ; integer exponential
MOVE.W #ELEXT96+FOXPWRI,-(SP)
_ELEMS68K
ENDM
MACRO
FXPWRY96 ; general exponential
MOVE.W #ELEXT96+FOXPWRY,-(SP)
_ELEMS68K
ENDM
MACRO
FCOMPOUND96 ; compound
MOVE.W #ELEXT96+FOCOMPOUND,-(SP)
_ELEMS68K
ENDM
MACRO
FANNUITY96 ; annuity
MOVE.W #ELEXT96+FOANNUITY,-(SP)
_ELEMS68K
ENDM
MACRO
FSINX96 ; sine
MOVE.W #ELEXT96+FOSINX,-(SP)
_ELEMS68K
ENDM
MACRO
FCOSX96 ; cosine
MOVE.W #ELEXT96+FOCOSX,-(SP)
_ELEMS68K
ENDM
MACRO
FTANX96 ; tangent
MOVE.W #ELEXT96+FOTANX,-(SP)
_ELEMS68K
ENDM
MACRO
FATANX96 ; arctangent
MOVE.W #ELEXT96+FOATANX,-(SP)
_ELEMS68K
ENDM
MACRO
FRANDX96 ; random number generator
MOVE.W #ELEXT96+FORANDX,-(SP)
_ELEMS68K
ENDM
;———————————————————————————————————————————————————————————
; Scanner and formatter operation code masks
;———————————————————————————————————————————————————————————
FOPSTR2DEC EQU $0002 ;Pascal string to decimal record
FOCSTR2DEC EQU $0004 ;C string to decimal record
FODEC2STR EQU $0003 ;decimal record to Pascal string
;———————————————————————————————————————————————————————————
; Scanner and formatter functions
;———————————————————————————————————————————————————————————
;Pascal string to decimal record
MACRO
FPSTR2DEC
MOVE.W #FOPSTR2DEC, -(SP)
_DecStr68K
ENDM
;C string to decimal record
MACRO
FCSTR2DEC
MOVE.W #FOCSTR2DEC, -(SP)
_DecStr68K
ENDM
;decimal record to Pascal string
MACRO
FDEC2STR
MOVE.W #FODEC2STR, -(SP)
_DecStr68K
ENDM
;———————————————————————————————————————————————————————————
; NaN codes.
;———————————————————————————————————————————————————————————
NANSQRT EQU 1 ; Invalid square root such as sqrt(-1).
NANADD EQU 2 ; Invalid addition such as +INF - +INF.
NANDIV EQU 4 ; Invalid division such as 0/0.
NANMUL EQU 8 ; Invalid multiply such as 0 * INF.
NANREM EQU 9 ; Invalid remainder or mod such as x REM 0.
NANASCBIN EQU 17 ; Attempt to convert invalid ASCII string.
NANCOMP EQU 20 ; Result of converting comp NaN to floating.
NANZERO EQU 21 ; Attempt to create a NaN with a zero code.
NANTRIG EQU 33 ; Invalid argument to trig routine.
NANINVTRIG EQU 34 ; Invalid argument to inverse trig routine.
NANLOG EQU 36 ; Invalid argument to log routine.
NANPOWER EQU 37 ; Invalid argument to x^i or x^y routine.
NANFINAN EQU 38 ; Invalid argument to financial function.
NANINIT EQU 255 ; Uninitialized storage.