📄 fpsp.s
字号:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUPM68000 Hi-Performance Microprocessor DivisionM68060 Software PackageProduction Release P1.00 -- October 10, 1994M68060 Software Package Copyright © 1993, 1994 Motorola Inc. All rights reserved.THE SOFTWARE is provided on an "AS IS" basis and without warranty.To the maximum extent permitted by applicable law,MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSEand any warranty against infringement with regard to the SOFTWARE(INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.To the maximum extent permitted by applicable law,IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER(INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS)ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.Motorola assumes no responsibility for the maintenance and support of the SOFTWARE.You are hereby granted a copyright license to use, modify, and distribute the SOFTWAREso long as this entire notice is retained without alteration in any modified and/orredistributed versions, and that such modified versions are clearly identified as such.No licenses are granted by implication, estoppel or otherwise under any patentsor trademarks of Motorola, Inc.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~## freal.s:# This file is appended to the top of the 060FPSP package# and contains the entry points into the package. The user, in# effect, branches to one of the branch table entries located# after _060FPSP_TABLE.# Also, subroutine stubs exist in this file (_fpsp_done for# example) that are referenced by the FPSP package itself in order# to call a given routine. The stub routine actually performs the# callout. The FPSP code does a "bsr" to the stub routine. This# extra layer of hierarchy adds a slight performance penalty but# it makes the FPSP code easier to read and more mainatinable.#set _off_bsun, 0x00set _off_snan, 0x04set _off_operr, 0x08set _off_ovfl, 0x0cset _off_unfl, 0x10set _off_dz, 0x14set _off_inex, 0x18set _off_fline, 0x1cset _off_fpu_dis, 0x20set _off_trap, 0x24set _off_trace, 0x28set _off_access, 0x2cset _off_done, 0x30set _off_imr, 0x40set _off_dmr, 0x44set _off_dmw, 0x48set _off_irw, 0x4cset _off_irl, 0x50set _off_drb, 0x54set _off_drw, 0x58set _off_drl, 0x5cset _off_dwb, 0x60set _off_dww, 0x64set _off_dwl, 0x68_060FPSP_TABLE:################################################################ Here's the table of ENTRY POINTS for those linking the package. bra.l _fpsp_snan short 0x0000 bra.l _fpsp_operr short 0x0000 bra.l _fpsp_ovfl short 0x0000 bra.l _fpsp_unfl short 0x0000 bra.l _fpsp_dz short 0x0000 bra.l _fpsp_inex short 0x0000 bra.l _fpsp_fline short 0x0000 bra.l _fpsp_unsupp short 0x0000 bra.l _fpsp_effadd short 0x0000 space 56############################################################### global _fpsp_done_fpsp_done: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_done,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _real_ovfl_real_ovfl: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_ovfl,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _real_unfl_real_unfl: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_unfl,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _real_inex_real_inex: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_inex,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _real_bsun_real_bsun: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_bsun,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _real_operr_real_operr: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_operr,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _real_snan_real_snan: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_snan,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _real_dz_real_dz: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_dz,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _real_fline_real_fline: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_fline,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _real_fpu_disabled_real_fpu_disabled: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_fpu_dis,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _real_trap_real_trap: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_trap,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _real_trace_real_trace: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_trace,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _real_access_real_access: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_access,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4####################################### global _imem_read_imem_read: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_imr,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _dmem_read_dmem_read: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_dmr,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _dmem_write_dmem_write: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_dmw,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _imem_read_word_imem_read_word: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_irw,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _imem_read_long_imem_read_long: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_irl,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _dmem_read_byte_dmem_read_byte: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_drb,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _dmem_read_word_dmem_read_word: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_drw,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _dmem_read_long_dmem_read_long: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_drl,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _dmem_write_byte_dmem_write_byte: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_dwb,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _dmem_write_word_dmem_write_word: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_dww,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4 global _dmem_write_long_dmem_write_long: mov.l %d0,-(%sp) mov.l (_060FPSP_TABLE-0x80+_off_dwl,%pc),%d0 pea.l (_060FPSP_TABLE-0x80,%pc,%d0) mov.l 0x4(%sp),%d0 rtd &0x4## This file contains a set of define statements for constants# in order to promote readability within the corecode itself.#set LOCAL_SIZE, 192 # stack frame size(bytes)set LV, -LOCAL_SIZE # stack offsetset EXC_SR, 0x4 # stack status registerset EXC_PC, 0x6 # stack pcset EXC_VOFF, 0xa # stacked vector offsetset EXC_EA, 0xc # stacked <ea>set EXC_FP, 0x0 # frame pointerset EXC_AREGS, -68 # offset of all address regsset EXC_DREGS, -100 # offset of all data regsset EXC_FPREGS, -36 # offset of all fp regsset EXC_A7, EXC_AREGS+(7*4) # offset of saved a7set OLD_A7, EXC_AREGS+(6*4) # extra copy of saved a7set EXC_A6, EXC_AREGS+(6*4) # offset of saved a6set EXC_A5, EXC_AREGS+(5*4)set EXC_A4, EXC_AREGS+(4*4)set EXC_A3, EXC_AREGS+(3*4)set EXC_A2, EXC_AREGS+(2*4)set EXC_A1, EXC_AREGS+(1*4)set EXC_A0, EXC_AREGS+(0*4)set EXC_D7, EXC_DREGS+(7*4)set EXC_D6, EXC_DREGS+(6*4)set EXC_D5, EXC_DREGS+(5*4)set EXC_D4, EXC_DREGS+(4*4)set EXC_D3, EXC_DREGS+(3*4)set EXC_D2, EXC_DREGS+(2*4)set EXC_D1, EXC_DREGS+(1*4)set EXC_D0, EXC_DREGS+(0*4)set EXC_FP0, EXC_FPREGS+(0*12) # offset of saved fp0set EXC_FP1, EXC_FPREGS+(1*12) # offset of saved fp1set EXC_FP2, EXC_FPREGS+(2*12) # offset of saved fp2 (not used)set FP_SCR1, LV+80 # fp scratch 1set FP_SCR1_EX, FP_SCR1+0set FP_SCR1_SGN, FP_SCR1+2set FP_SCR1_HI, FP_SCR1+4set FP_SCR1_LO, FP_SCR1+8set FP_SCR0, LV+68 # fp scratch 0set FP_SCR0_EX, FP_SCR0+0set FP_SCR0_SGN, FP_SCR0+2set FP_SCR0_HI, FP_SCR0+4set FP_SCR0_LO, FP_SCR0+8set FP_DST, LV+56 # fp destination operandset FP_DST_EX, FP_DST+0set FP_DST_SGN, FP_DST+2set FP_DST_HI, FP_DST+4set FP_DST_LO, FP_DST+8set FP_SRC, LV+44 # fp source operandset FP_SRC_EX, FP_SRC+0set FP_SRC_SGN, FP_SRC+2set FP_SRC_HI, FP_SRC+4set FP_SRC_LO, FP_SRC+8set USER_FPIAR, LV+40 # FP instr address registerset USER_FPSR, LV+36 # FP status registerset FPSR_CC, USER_FPSR+0 # FPSR condition codesset FPSR_QBYTE, USER_FPSR+1 # FPSR qoutient byteset FPSR_EXCEPT, USER_FPSR+2 # FPSR exception status byteset FPSR_AEXCEPT, USER_FPSR+3 # FPSR accrued exception byteset USER_FPCR, LV+32 # FP control registerset FPCR_ENABLE, USER_FPCR+2 # FPCR exception enableset FPCR_MODE, USER_FPCR+3 # FPCR rounding mode controlset L_SCR3, LV+28 # integer scratch 3set L_SCR2, LV+24 # integer scratch 2set L_SCR1, LV+20 # integer scratch 1set STORE_FLG, LV+19 # flag: operand store (ie. not fcmp/ftst)set EXC_TEMP2, LV+24 # temporary spaceset EXC_TEMP, LV+16 # temporary spaceset DTAG, LV+15 # destination operand typeset STAG, LV+14 # source operand typeset SPCOND_FLG, LV+10 # flag: special case (see below)set EXC_CC, LV+8 # saved condition codesset EXC_EXTWPTR, LV+4 # saved current PC (active)set EXC_EXTWORD, LV+2 # saved extension wordset EXC_CMDREG, LV+2 # saved extension wordset EXC_OPWORD, LV+0 # saved operation word################################# Helpful macrosset FTEMP, 0 # offsets within anset FTEMP_EX, 0 # extended precisionset FTEMP_SGN, 2 # value saved in memory.set FTEMP_HI, 4set FTEMP_LO, 8set FTEMP_GRS, 12set LOCAL, 0 # offsets within anset LOCAL_EX, 0 # extended precisionset LOCAL_SGN, 2 # value saved in memory.set LOCAL_HI, 4set LOCAL_LO, 8set LOCAL_GRS, 12set DST, 0 # offsets within an
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -