head     56.1;
access   paws bayes jws quist dew jwh;
symbols  ;
locks    ; strict;
comment  @ * @;


56.1
date     91.11.05.09.33.04;  author jwh;  state Exp;
branches ;
next     55.1;

55.1
date     91.08.25.10.11.19;  author jwh;  state Exp;
branches ;
next     54.2;

54.2
date     91.08.21.14.37.47;  author jwh;  state Exp;
branches ;
next     54.1;

54.1
date     91.03.18.15.18.30;  author jwh;  state Exp;
branches ;
next     53.1;

53.1
date     91.03.11.19.19.12;  author jwh;  state Exp;
branches ;
next     52.1;

52.1
date     91.02.19.09.04.07;  author jwh;  state Exp;
branches ;
next     51.1;

51.1
date     91.01.30.16.03.18;  author jwh;  state Exp;
branches ;
next     1.1;

1.1
date     91.01.17.09.57.51;  author jwh;  state Exp;
branches ;
next     ;


desc
@first version.
@


56.1
log
@Automatic bump of revision number for PWS version 3.25
@
text
@@


55.1
log
@Automatic bump of revision number for PWS version 3.25A
@
text
@@


54.2
log
@
pws2rcs automatic delta on Wed Aug 21 13:42:03 MDT 1991
@
text
@@


54.1
log
@Automatic bump of revision number for PWS version 3.24
@
text
@a0 345
*
*       fpsp.h 3.1 3.1
*

*               Copyright (C) Motorola, Inc. 1990
*                       All Rights Reserved
*
*       THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
*       The copyright notice above does not evidence any
*       actual or intended publication of such source code.

*       fpsp.h --- stack frame offsets during FPSP exception handling
*
*       These equates are used to access the exception frame, the fsave
*       frame and any local variables needed by the FPSP package.
*
*       All FPSP handlers begin by executing:
*
*               link    a6,#-LOCAL_SIZE
*               fsave   -(a7)
*               movem.l d0-d1/a0-a1,USER_DA(a6)
*               fmovem.x fp0-fp3,USER_FP0(a6)
*               fmove.l FPSTATUS/FPCONTROL/fpiar,USER_FPSTATUS(a6)
*
*       After initialization, the stack looks like this:
*
*       A7 ---> +-------------------------------+
*               |                               |
*               |       FPU fsave area          |
*               |                               |
*               +-------------------------------+
*               |                               |
*               |       FPSP Local Variables    |
*               |            including          |
*               |         saved registers       |
*               |                               |
*               +-------------------------------+
*       A6 ---> |       Saved A6                |
*               +-------------------------------+
*               |                               |
*               |       Exception Frame         |
*               |                               |
*               |                               |
*
*       Positive offsets from A6 refer to the exception frame.  Negative
*       offsets refer to the Local Variable area and the fsave area.
*       The fsave frame is also accessible 'from the top' via A7.
*
*       On exit, the handlers execute:
*
*               movem.l USER_DA(a6),d0-d1/a0-a1
*               fmovem.x USER_FP0(a6),fp0-fp3
*               fmove.l USER_FPSTATUS(a6),FPSTATUS/FPCONTROL/fpiar
*               frestore (a7)+
*               unlk    a6
*
*       and then either 'bra fpsp_done' if the exception was completely
*       handled by the package, or 'bra real_xxxx' which is an external
*       label to a routine that will process a real exception of the
*       type that was generated.  Some handlers may omit the 'frestore'
*       if the FPU state after the exception is idle.
*
*       Sometimes the exception handler will transform the fsave area
*       because it needs to report an exception back to the user.  This
*       can happen if the package is entered for an unimplemented float
*       instruction that generates (say) an underflow.  Alternatively,
*       a second fsave frame can be pushed onto the stack and the
*       handler exit code will reload the new frame and discard the old.
*
*       The registers d0, d1, a0, a1 and fp0-fp3 are always saved and
*       restored from the 'local variable' area and can be used as
*       temporaries.  If a routine needs to change any
*       of these registers, it should modify the saved copy and let
*       the handler exit code restore the value.
*
*----------------------------------------------------------------------
*
*       Local Variables on the stack
*
LOCAL_SIZE      equ     192             ;bytes needed for local variables
LV              equ     -LOCAL_SIZE     ;convenient base value
*
USER_DA         equ     LV+0            ;save space for D0-D1,A0-A1
USER_D0         equ     LV+0            ;saved user D0
USER_D1         equ     LV+4            ;saved user D1
USER_A0         equ     LV+8            ;saved user A0
USER_A1         equ     LV+12           ;saved user A1
USER_FP0        equ     LV+16           ;saved user FP0
USER_FP1        equ     LV+28           ;saved user FP1
USER_FP2        equ     LV+40           ;saved user FP2
USER_FP3        equ     LV+52           ;saved user FP3
USER_FPCONTROL  equ     LV+64           ;saved user FPCONTROL
FPCONTROL_ENABLE equ    USER_FPCONTROL+2 ; FPCONTROL exception enable
FPCONTROL_MODE  equ     USER_FPCONTROL+3 ;   FPCONTROL rounding mode control
USER_FPSTATUS   equ     LV+68           ; saved user FPSTATUS
FPSTATUS_CC     equ     USER_FPSTATUS+0 ;FPSTATUS condition code
FPSTATUS_QBYTE  equ     USER_FPSTATUS+1 ;FPSTATUS quotient
FPSTATUS_EXCEPT equ     USER_FPSTATUS+2 ;FPSTATUS exception
FPSTATUS_AEXCEPT equ    USER_FPSTATUS+3 ;FPSTATUS accrued exception
USER_FPIADDR    equ     LV+72           ;saved user FPIADDRR
FP_SCR1         equ     LV+76           ;room for a temporary float value
FP_SCR2         equ     LV+92           ;room for a temporary float value
L_SCR1          equ     LV+108          ;room for a temporary long value
L_SCR2          equ     LV+112          ;room for a temporary long value
STORE_FLG       equ     LV+116
BINDEC_FLG      equ     LV+117          ;used in bindec
DNRM_FLG        equ     LV+118          ;used in res_func
RES_FLG         equ     LV+119          ;used in res_func
DY_MO_FLG       equ     LV+120          ;dyadic/monadic flag
UFLG_TMP        equ     LV+121          ;temporary for uflag errata
CU_ONLY         equ     LV+122          ;cu-only flag
VER_TMP         equ     LV+123          ;temp holding for version number
L_SCR3          equ     LV+124          ;room for a temporary long value
FP_SCR3         equ     LV+128          ;room for a temporary float value
FP_SCR4         equ     LV+144          ;room for a temporary float value
FP_SCR5         equ     LV+160          ;room for a temporary float value
FP_SCR6         equ     LV+176
*
*NEXT           equ     LV+192          ;need to increase LOCAL_SIZE
*
*--------------------------------------------------------------------------
*
*       fsave offsets and bit definitions
*
*       Offsets are defined from the end of an fsave because the last 10
*       words of a busy frame are the same as the unimplemented frame.
*
CU_SAVEPC       equ     LV-92           ;micro-pc for CU (1 byte)
FPR_DIRTY_BITS  equ     LV-91           ;fpr dirty bits
*
WBTEMP          equ     LV-76           ;write back temp (12 bytes)
WBTEMP_EX       equ     WBTEMP          ;wbtemp sign and exponent (2 bytes)
WBTEMP_HI       equ     WBTEMP+4        ;wbtemp mantissa [63:32] (4 bytes)
WBTEMP_LO       equ     WBTEMP+8        ;wbtemp mantissa [31:00] (4 bytes)
*
WBTEMP_SGN      equ     WBTEMP+2        ;used to store sign
*
FPSTATUS_SHADOW equ     LV-64           ;FPSTATUS shadow reg
*
FPIARCU         equ     LV-60           ;Instr. addr. reg. for CU (4 bytes)
*
CMDREG3B        equ     LV-48           ;cmd reg for E3 exceptions (2 bytes)
*
NMNEXC          equ     LV-44           ;NMNEXC (unsup,snan bits only)
nmn_unsup_bit   equ     1
nmn_snan_bit    equ     0
*
NMCEXC          equ     LV-43           ;NMNEXC & NMCEXC
nmn_operr_bit   equ     7
nmn_ovfl_bit    equ     6
nmn_unfl_bit    equ     5
nmc_unsup_bit   equ     4
nmc_snan_bit    equ     3
nmc_operr_bit   equ     2
nmc_ovfl_bit    equ     1
nmc_unfl_bit    equ     0
*
STAG            equ     LV-40           ;source tag (1 byte)
WBTEMP_GRS      equ     LV-40           ;alias wbtemp guard, round, sticky
stag_mask       equ     $E0             ;upper 3 bits are source tag type
denorm_bit      equ     7               ;bit determins if denorm or unnorm
etemp15_bit     equ     4               ;etemp exponent bit #15
wbtemp66_bit    equ     2               ;wbtemp mantissa bit #66
wbtemp1_bit     equ     1               ;wbtemp mantissa bit #1
wbtemp0_bit     equ     0               ;wbtemp mantissa bit #0
*
STICKY          equ     LV-39           ;holds sticky bit
sticky_bit      equ     7
*
CMDREG1B        equ     LV-36           ;cmd reg for E1 exceptions (2 bytes)
kfact_bit       equ     12              ;distinguishes static/dynamic k-factor
*                                       ;on packed move out's.  NOTE: this
*                                       ;equate only works when CMDREG1B is in
*                                       ;a register.
*
CMDWORD         equ     LV-35           ;command word in cmd1b
direction_bit   equ     5               ;bit 0 in opclass
size_bit2       equ     12              ;bit 2 in size field
*
DTAG            equ     LV-32           ;dest tag (1 byte)
dtag_mask       equ     $E0             ;upper 3 bits are dest type tag
fptemp15_bit    equ     4               ;fptemp exponent bit #15
*
WB_BYTE         equ     LV-31           ;holds WBTE15 bit (1 byte)
wbtemp15_bit    equ     4               ;wbtemp exponent bit #15
*
E_BYTE          equ     LV-28           ;holds E1 and E3 bits (1 byte)
E1              equ     2               ;which bit is E1 flag
E3              equ     1               ;which bit is E3 flag
SFLAG           equ     0               ;which bit is S flag
*
T_BYTE          equ     LV-27           ;holds T and U bits (1 byte)
XFLAG           equ     7               ;which bit is X flag
UFLAG           equ     5               ;which bit is U flag
TFLAG           equ     4               ;which bit is T flag
*
FPTEMP          equ     LV-24           ;fptemp (12 bytes)
FPTEMP_EX       equ     FPTEMP          ;fptemp sign and exponent (2 bytes)
FPTEMP_HI       equ     FPTEMP+4        ;fptemp mantissa [63:32] (4 bytes)
FPTEMP_LO       equ     FPTEMP+8        ;fptemp mantissa [31:00] (4 bytes)
*
FPTEMP_SGN      equ     FPTEMP+2        ;used to store sign
*
ETEMP           equ     LV-12           ;etemp (12 bytes)
ETEMP_EX        equ     ETEMP           ;etemp sign and exponent (2 bytes)
ETEMP_HI        equ     ETEMP+4         ;etemp mantissa [63:32] (4 bytes)
ETEMP_LO        equ     ETEMP+8         ;etemp mantissa [31:00] (4 bytes)
*
ETEMP_SGN       equ     ETEMP+2         ;used to store sign
*
EXC_SR          equ     4               ;exception frame status register
EXC_PC          equ     6               ;exception frame program counter
EXC_VEC         equ     10              ;exception frame vector (format+vector#)
EXC_EA          equ     12              ;exception frame effective address
*
*--------------------------------------------------------------------------
*
*       FPSTATUS/FPCONTROL bits
*
neg_bit         equ     3       negative result
z_bit           equ     2       zero result
inf_bit         equ     1       infinity result
nan_bit         equ     0       not-a-number result
*
q_sn_bit        equ     7       sign bit of quotient byte
*
bsun_bit        equ     7       branch on unordered
snan_bit        equ     6       signalling nan
operr_bit       equ     5       operand error
ovfl_bit        equ     4       overflow
unfl_bit        equ     3       underflow
dz_bit          equ     2       divide by zero
inex2_bit       equ     1       inexact result 2
inex1_bit       equ     0       inexact result 1
*
aiop_bit        equ     7       accrued illegal operation
aovfl_bit       equ     6       accrued overflow
aunfl_bit       equ     5       accrued underflow
adz_bit         equ     4       accrued divide by zero
ainex_bit       equ     3       accrued inexact
*
*       FPSTATUS individual bit masks
*
neg_mask        equ     $08000000
z_mask          equ     $04000000
inf_mask        equ     $02000000
nan_mask        equ     $01000000
*
bsun_mask       equ     $00008000
snan_mask       equ     $00004000
operr_mask      equ     $00002000
ovfl_mask       equ     $00001000
unfl_mask       equ     $00000800
dz_mask         equ     $00000400
inex2_mask      equ     $00000200
inex1_mask      equ     $00000100
*
aiop_mask       equ     $00000080       accrued illegal operation
aovfl_mask      equ     $00000040       accrued overflow
aunfl_mask      equ     $00000020       accrued underflow
adz_mask        equ     $00000010       accrued divide by zero
ainex_mask      equ     $00000008       accrued inexact
*
*       FPSTATUS combinations used in the FPSP
*
dzinf_mask      equ     inf_mask+dz_mask+adz_mask
opnan_mask      equ     nan_mask+operr_mask+aiop_mask
nzi_mask        equ     $01ffffff       clears N, Z, and I
unfinx_mask     equ     unfl_mask+inex2_mask+aunfl_mask+ainex_mask
unf2inx_mask    equ     unfl_mask+inex2_mask+ainex_mask
ovfinx_mask     equ     ovfl_mask+inex2_mask+aovfl_mask+ainex_mask
inx1a_mask      equ     inex1_mask+ainex_mask
inx2a_mask      equ     inex2_mask+ainex_mask
snaniop_mask    equ     nan_mask+snan_mask+aiop_mask
naniop_mask     equ     nan_mask+aiop_mask
neginf_mask    equ     neg_mask+inf_mask
infaiop_mask    equ     inf_mask+aiop_mask
negz_mask       equ     neg_mask+z_mask
opaop_mask      equ     operr_mask+aiop_mask
unfl_inx_mask   equ     unfl_mask+aunfl_mask+ainex_mask
ovfl_inx_mask   equ     ovfl_mask+aovfl_mask+ainex_mask
*
*--------------------------------------------------------------------------
*
*       FPCONTROL rounding modes
*
x_mode          equ     $00     round to extended
s_mode          equ     $40     round to single
d_mode          equ     $80     round to double
*
rn_mode         equ     $00     round nearest
rz_mode         equ     $10     round to zero
rm_mode         equ     $20     round to minus infinity
rp_mode         equ     $30     round to plus infinity
*
*--------------------------------------------------------------------------
*
*       Miscellaneous equates
*
signan_bit      equ     6       signalling nan bit in mantissa
sign_bit        equ     7
*
rnd_stky_bit    equ     29      round/sticky bit of mantissa
*                               this can only be used if in a data register
sx_mask         equ     $01800000 set s and x bits in word $48
*
LOCAL_EX        equ     0
LOCAL_SGN       equ     2
LOCAL_HI        equ     4
LOCAL_LO        equ     8
LOCAL_GRS       equ     12      valid ONLY for FP_SCR1, FP_SCR2
*
*
norm_tag        equ     $00     tag bits in {7:5} position
zero_tag        equ     $20
inf_tag         equ     $40
nan_tag         equ     $60
dnrm_tag        equ     $80
*
*       fsave sizes and formats
*
VER_4           equ     $40             fpsp compatible version numbers
*                                       are in the $40s {$40-$4f}
VER_40          equ     $40             original version number
VER_41          equ     $41             revision version number
*
BUSY_SIZE       equ     100             size of busy frame
BUSY_FRAME      equ     LV-BUSY_SIZE    start of busy frame
*
UNIMP_40_SIZE   equ     44              size of orig unimp frame
UNIMP_41_SIZE   equ     52              size of rev unimp frame
*
IDLE_SIZE       equ     4               size of idle frame
IDLE_FRAME      equ     LV-IDLE_SIZE    start of idle frame
*
*       exception vectors
*
TRACE_VEC       equ     $2024           trace trap
FLINE_VEC       equ     $002C           'real' F-line
UNIMP_VEC       equ     $202C           unimplemented
INEX_VEC        equ     $00C4
*
dbl_thresh      equ     $3C01
sgl_thresh      equ     $3F81
*
@


53.1
log
@Automatic bump of revision number for PWS version 3.24B
@
text
@@


52.1
log
@Automatic bump of revision number for PWS version 3.24A
@
text
@@


51.1
log
@Automatic bump of revision number for PWS version 3.24d
@
text
@@


1.1
log
@Initial revision
@
text
@@
