123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
- M68000 Hi-Performance Microprocessor Division
- M68060 Software Package
- Production Release P1.00 -- October 10, 1994
- M68060 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 PURPOSE
- and 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 SOFTWARE
- so long as this entire notice is retained without alteration in any modified and/or
- redistributed versions, and that such modified versions are clearly identified as such.
- No licenses are granted by implication, estoppel or otherwise under any patents
- or trademarks of Motorola, Inc.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 68060 FLOATING-POINT SOFTWARE PACKAGE (Library version)
- --------------------------------------------------------
- The file fplsp.sa contains the "Library version" of the
- 68060SP Floating-Point Software Package. The routines
- included in this module can be used to emulate the
- FP instructions not implemented in 68060 hardware. These
- instructions normally take exception vector #11
- "FP Unimplemented Instruction".
- By re-compiling a program that uses these instructions, and
- making subroutine calls in place of the unimplemented
- instructions, a program can avoid the overhead associated
- with taking the exception.
- Release file format:
- --------------------
- The file fplsp.sa is essentially a hexadecimal image of the
- release package. This is the ONLY format which will be supported.
- The hex image was created by assembling the source code and
- then converting the resulting binary output image into an
- ASCII text file. The hexadecimal numbers are listed
- using the Motorola Assembly Syntax assembler directive "dc.l"
- (define constant longword). The file can be converted to other
- assembly syntaxes by using any word processor with a global
- search and replace function.
- To assist in assembling and linking this module with other modules,
- the installer should add a symbolic label to the top of the file.
- This will allow calling routines to access the entry points
- of this package.
- The source code fplsp.s has also been included but only for
- documentation purposes.
- Release file structure:
- -----------------------
- The file fplsp.sa contains an "Entry-Point" section and a
- code section. The FPLSP has no "Call-Out" section. The first section
- is the "Entry-Point" section. In order to access a function in the
- package, a program must "bsr" or "jsr" to the location listed
- below in "68060FPLSP entry points" that corresponds to the desired
- function. A branch instruction located at the selected entry point
- within the package will then enter the correct emulation code routine.
- The entry point addresses at the beginning of the package will remain
- fixed so that a program calling the routines will not have to be
- re-compiled with every new 68060FPLSP release.
- There are 3 entry-points for each instruction type: single precision,
- double precision, and extended precision.
- As an example, the "fsin" library instruction can be passed an
- extended precision operand if program executes:
- # fsin.x fp0
- fmovm.x &0x01,-(%sp) # pass operand on stack
- bsr.l _060FPLSP_TOP+0x1a8 # branch to fsin routine
- add.l &0xc,%sp # clear operand from stack
- Upon return, fp0 holds the correct result. The FPSR is
- set correctly. The FPCR is unchanged. The FPIAR is undefined.
- Another example. This time, a dyadic operation:
- # frem.s %fp1,%fp0
- fmov.s %fp1,-(%sp) # pass src operand
- fmov.s %fp0,-(%sp) # pass dst operand
- bsr.l _060FPLSP_TOP+0x168 # branch to frem routine
- addq.l &0x8,%sp # clear operands from stack
- Again, the result is returned in fp0. Note that BOTH operands
- are passed in single precision format.
- Exception reporting:
- --------------------
- The package takes exceptions according to the FPCR value upon subroutine
- entry. If an exception should be reported, then the package forces
- this exception using implemented floating-point instructions.
- For example, if the instruction being emulated should cause a
- floating-point Operand Error exception, then the library routine
- executes an FMUL of a zero and an infinity to force the OPERR
- exception. Although the FPIAR will be undefined for the enabled
- Operand Error exception handler, the user will at least be able
- to record that the event occurred.
- Miscellaneous:
- --------------
- The package does not attempt to correctly emulate instructions
- with Signalling NAN inputs. Use of SNANs should be avoided with
- this package.
- The fabs/fadd/fdiv/fint/fintrz/fmul/fneg/fsqrt/fsub entry points
- are provided for the convenience of older compilers that make
- subroutine calls for all fp instructions. The code does NOT emulate
- the instruction but rather simply executes it.
- 68060FPLSP entry points:
- ------------------------
- _060FPLSP_TOP:
- 0x000: _060LSP__facoss_
- 0x008: _060LSP__facosd_
- 0x010: _060LSP__facosx_
- 0x018: _060LSP__fasins_
- 0x020: _060LSP__fasind_
- 0x028: _060LSP__fasinx_
- 0x030: _060LSP__fatans_
- 0x038: _060LSP__fatand_
- 0x040: _060LSP__fatanx_
- 0x048: _060LSP__fatanhs_
- 0x050: _060LSP__fatanhd_
- 0x058: _060LSP__fatanhx_
- 0x060: _060LSP__fcoss_
- 0x068: _060LSP__fcosd_
- 0x070: _060LSP__fcosx_
- 0x078: _060LSP__fcoshs_
- 0x080: _060LSP__fcoshd_
- 0x088: _060LSP__fcoshx_
- 0x090: _060LSP__fetoxs_
- 0x098: _060LSP__fetoxd_
- 0x0a0: _060LSP__fetoxx_
- 0x0a8: _060LSP__fetoxm1s_
- 0x0b0: _060LSP__fetoxm1d_
- 0x0b8: _060LSP__fetoxm1x_
- 0x0c0: _060LSP__fgetexps_
- 0x0c8: _060LSP__fgetexpd_
- 0x0d0: _060LSP__fgetexpx_
- 0x0d8: _060LSP__fgetmans_
- 0x0e0: _060LSP__fgetmand_
- 0x0e8: _060LSP__fgetmanx_
- 0x0f0: _060LSP__flog10s_
- 0x0f8: _060LSP__flog10d_
- 0x100: _060LSP__flog10x_
- 0x108: _060LSP__flog2s_
- 0x110: _060LSP__flog2d_
- 0x118: _060LSP__flog2x_
- 0x120: _060LSP__flogns_
- 0x128: _060LSP__flognd_
- 0x130: _060LSP__flognx_
- 0x138: _060LSP__flognp1s_
- 0x140: _060LSP__flognp1d_
- 0x148: _060LSP__flognp1x_
- 0x150: _060LSP__fmods_
- 0x158: _060LSP__fmodd_
- 0x160: _060LSP__fmodx_
- 0x168: _060LSP__frems_
- 0x170: _060LSP__fremd_
- 0x178: _060LSP__fremx_
- 0x180: _060LSP__fscales_
- 0x188: _060LSP__fscaled_
- 0x190: _060LSP__fscalex_
- 0x198: _060LSP__fsins_
- 0x1a0: _060LSP__fsind_
- 0x1a8: _060LSP__fsinx_
- 0x1b0: _060LSP__fsincoss_
- 0x1b8: _060LSP__fsincosd_
- 0x1c0: _060LSP__fsincosx_
- 0x1c8: _060LSP__fsinhs_
- 0x1d0: _060LSP__fsinhd_
- 0x1d8: _060LSP__fsinhx_
- 0x1e0: _060LSP__ftans_
- 0x1e8: _060LSP__ftand_
- 0x1f0: _060LSP__ftanx_
- 0x1f8: _060LSP__ftanhs_
- 0x200: _060LSP__ftanhd_
- 0x208: _060LSP__ftanhx_
- 0x210: _060LSP__ftentoxs_
- 0x218: _060LSP__ftentoxd_
- 0x220: _060LSP__ftentoxx_
- 0x228: _060LSP__ftwotoxs_
- 0x230: _060LSP__ftwotoxd_
- 0x238: _060LSP__ftwotoxx_
- 0x240: _060LSP__fabss_
- 0x248: _060LSP__fabsd_
- 0x250: _060LSP__fabsx_
- 0x258: _060LSP__fadds_
- 0x260: _060LSP__faddd_
- 0x268: _060LSP__faddx_
- 0x270: _060LSP__fdivs_
- 0x278: _060LSP__fdivd_
- 0x280: _060LSP__fdivx_
- 0x288: _060LSP__fints_
- 0x290: _060LSP__fintd_
- 0x298: _060LSP__fintx_
- 0x2a0: _060LSP__fintrzs_
- 0x2a8: _060LSP__fintrzd_
- 0x2b0: _060LSP__fintrzx_
- 0x2b8: _060LSP__fmuls_
- 0x2c0: _060LSP__fmuld_
- 0x2c8: _060LSP__fmulx_
- 0x2d0: _060LSP__fnegs_
- 0x2d8: _060LSP__fnegd_
- 0x2e0: _060LSP__fnegx_
- 0x2e8: _060LSP__fsqrts_
- 0x2f0: _060LSP__fsqrtd_
- 0x2f8: _060LSP__fsqrtx_
- 0x300: _060LSP__fsubs_
- 0x308: _060LSP__fsubd_
- 0x310: _060LSP__fsubx_
|