232 lines
7.8 KiB
Plaintext
232 lines
7.8 KiB
Plaintext
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
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_
|