forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
231 lines
7.8 KiB
231 lines
7.8 KiB
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
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_
|
|
|