home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / vbcc / machines / amiga68k / libsrc / math / math_040 / M68060SP / fplsp.doc next >
Encoding:
Text File  |  1998-06-24  |  7.8 KB  |  232 lines

  1. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2. MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
  3. M68000 Hi-Performance Microprocessor Division
  4. M68060 Software Package
  5. Production Release P1.00 -- October 10, 1994
  6.  
  7. M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
  8.  
  9. THE SOFTWARE is provided on an "AS IS" basis and without warranty.
  10. To the maximum extent permitted by applicable law,
  11. MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
  12. INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
  13. and any warranty against infringement with regard to the SOFTWARE
  14. (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
  15.  
  16. To the maximum extent permitted by applicable law,
  17. IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
  18. (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
  19. BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS)
  20. ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
  21. Motorola assumes no responsibility for the maintenance and support of the SOFTWARE.
  22.  
  23. You are hereby granted a copyright license to use, modify, and distribute the SOFTWARE
  24. so long as this entire notice is retained without alteration in any modified and/or
  25. redistributed versions, and that such modified versions are clearly identified as such.
  26. No licenses are granted by implication, estoppel or otherwise under any patents
  27. or trademarks of Motorola, Inc.
  28. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  29.  
  30. 68060 FLOATING-POINT SOFTWARE PACKAGE (Library version)
  31. --------------------------------------------------------
  32.  
  33. The file fplsp.sa contains the "Library version" of the
  34. 68060SP Floating-Point Software Package. The routines
  35. included in this module can be used to emulate the
  36. FP instructions not implemented in 68060 hardware. These
  37. instructions normally take exception vector #11 
  38. "FP Unimplemented Instruction".
  39.  
  40. By re-compiling a program that uses these instructions, and
  41. making subroutine calls in place of the unimplemented
  42. instructions, a program can avoid the overhead associated
  43. with taking the exception.
  44.  
  45. Release file format:
  46. --------------------
  47. The file fplsp.sa is essentially a hexadecimal image of the
  48. release package. This is the ONLY format which will be supported.
  49. The hex image was created by assembling the source code and
  50. then converting the resulting binary output image into an
  51. ASCII text file. The hexadecimal numbers are listed
  52. using the Motorola Assembly Syntax assembler directive "dc.l"
  53. (define constant longword). The file can be converted to other
  54. assembly syntaxes by using any word processor with a global
  55. search and replace function.
  56.  
  57. To assist in assembling and linking this module with other modules,
  58. the installer should add a symbolic label to the top of the file.
  59. This will allow calling routines to access the entry points
  60. of this package.
  61.  
  62. The source code fplsp.s has also been included but only for
  63. documentation purposes.
  64.  
  65. Release file structure:
  66. -----------------------
  67. The file fplsp.sa contains an "Entry-Point" section and a
  68. code section. The FPLSP has no "Call-Out" section. The first section
  69. is the "Entry-Point" section. In order to access a function in the
  70. package, a program must "bsr" or "jsr" to the location listed
  71. below in "68060FPLSP entry points" that corresponds to the desired
  72. function. A branch instruction located at the selected entry point
  73. within the package will then enter the correct emulation code routine.
  74.  
  75. The entry point addresses at the beginning of the package will remain
  76. fixed so that a program calling the routines will not have to be
  77. re-compiled with every new 68060FPLSP release.
  78.  
  79. There are 3 entry-points for each instruction type: single precision,
  80. double precision, and extended precision.
  81.  
  82. As an example, the "fsin" library instruction can be passed an
  83. extended precision operand if program executes:
  84.  
  85. # fsin.x fp0
  86.  
  87.     fmovm.x    &0x01,-(%sp)    # pass operand on stack
  88.     bsr.l    _060FPLSP_TOP+0x1a8 # branch to fsin routine
  89.     add.l    &0xc,%sp    # clear operand from stack
  90.  
  91. Upon return, fp0 holds the correct result. The FPSR is
  92. set correctly. The FPCR is unchanged. The FPIAR is undefined.
  93.  
  94. Another example. This time, a dyadic operation:
  95.  
  96. # frem.s %fp1,%fp0
  97.  
  98.     fmov.s    %fp1,-(%sp)    # pass src operand
  99.     fmov.s    %fp0,-(%sp)    # pass dst operand
  100.     bsr.l    _060FPLSP_TOP+0x168 # branch to frem routine
  101.     addq.l    &0x8,%sp    # clear operands from stack
  102.  
  103. Again, the result is returned in fp0. Note that BOTH operands
  104. are passed in single precision format.
  105.  
  106. Exception reporting:
  107. --------------------
  108. The package takes exceptions according to the FPCR value upon subroutine
  109. entry. If an exception should be reported, then the package forces
  110. this exception using implemented floating-point instructions.
  111. For example, if the instruction being emulated should cause a
  112. floating-point Operand Error exception, then the library routine
  113. executes an FMUL of a zero and an infinity to force the OPERR
  114. exception. Although the FPIAR will be undefined for the enabled
  115. Operand Error exception handler, the user will at least be able
  116. to record that the event occurred.
  117.  
  118. Miscellaneous:
  119. --------------
  120. The package does not attempt to correctly emulate instructions
  121. with Signalling NAN inputs. Use of SNANs should be avoided with
  122. this package.
  123.  
  124. The fabs/fadd/fdiv/fint/fintrz/fmul/fneg/fsqrt/fsub entry points
  125. are provided for the convenience of older compilers that make
  126. subroutine calls for all fp instructions. The code does NOT emulate
  127. the instruction but rather simply executes it.
  128.  
  129. 68060FPLSP entry points:
  130. ------------------------
  131. _060FPLSP_TOP:
  132. 0x000:    _060LSP__facoss_
  133. 0x008:    _060LSP__facosd_
  134. 0x010:    _060LSP__facosx_
  135. 0x018:    _060LSP__fasins_
  136. 0x020:    _060LSP__fasind_
  137. 0x028:    _060LSP__fasinx_
  138. 0x030:    _060LSP__fatans_
  139. 0x038:    _060LSP__fatand_
  140. 0x040:    _060LSP__fatanx_
  141. 0x048:    _060LSP__fatanhs_
  142. 0x050:    _060LSP__fatanhd_
  143. 0x058:    _060LSP__fatanhx_
  144. 0x060:    _060LSP__fcoss_
  145. 0x068:    _060LSP__fcosd_
  146. 0x070:    _060LSP__fcosx_
  147. 0x078:    _060LSP__fcoshs_
  148. 0x080:    _060LSP__fcoshd_
  149. 0x088:    _060LSP__fcoshx_
  150. 0x090:    _060LSP__fetoxs_
  151. 0x098:    _060LSP__fetoxd_
  152. 0x0a0:    _060LSP__fetoxx_
  153. 0x0a8:    _060LSP__fetoxm1s_
  154. 0x0b0:    _060LSP__fetoxm1d_
  155. 0x0b8:    _060LSP__fetoxm1x_
  156. 0x0c0:    _060LSP__fgetexps_
  157. 0x0c8:    _060LSP__fgetexpd_
  158. 0x0d0:    _060LSP__fgetexpx_
  159. 0x0d8:    _060LSP__fgetmans_
  160. 0x0e0:    _060LSP__fgetmand_
  161. 0x0e8:    _060LSP__fgetmanx_
  162. 0x0f0:    _060LSP__flog10s_
  163. 0x0f8:    _060LSP__flog10d_
  164. 0x100:    _060LSP__flog10x_
  165. 0x108:    _060LSP__flog2s_
  166. 0x110:    _060LSP__flog2d_
  167. 0x118:    _060LSP__flog2x_
  168. 0x120:    _060LSP__flogns_
  169. 0x128:    _060LSP__flognd_
  170. 0x130:    _060LSP__flognx_
  171. 0x138:    _060LSP__flognp1s_
  172. 0x140:    _060LSP__flognp1d_
  173. 0x148:    _060LSP__flognp1x_
  174. 0x150:    _060LSP__fmods_
  175. 0x158:    _060LSP__fmodd_
  176. 0x160:    _060LSP__fmodx_
  177. 0x168:    _060LSP__frems_
  178. 0x170:    _060LSP__fremd_
  179. 0x178:    _060LSP__fremx_
  180. 0x180:    _060LSP__fscales_
  181. 0x188:    _060LSP__fscaled_
  182. 0x190:    _060LSP__fscalex_
  183. 0x198:    _060LSP__fsins_
  184. 0x1a0:    _060LSP__fsind_
  185. 0x1a8:    _060LSP__fsinx_
  186. 0x1b0:    _060LSP__fsincoss_
  187. 0x1b8:    _060LSP__fsincosd_
  188. 0x1c0:    _060LSP__fsincosx_
  189. 0x1c8:    _060LSP__fsinhs_
  190. 0x1d0:    _060LSP__fsinhd_
  191. 0x1d8:    _060LSP__fsinhx_
  192. 0x1e0:    _060LSP__ftans_
  193. 0x1e8:    _060LSP__ftand_
  194. 0x1f0:    _060LSP__ftanx_
  195. 0x1f8:    _060LSP__ftanhs_
  196. 0x200:    _060LSP__ftanhd_
  197. 0x208:    _060LSP__ftanhx_
  198. 0x210:    _060LSP__ftentoxs_
  199. 0x218:    _060LSP__ftentoxd_
  200. 0x220:    _060LSP__ftentoxx_
  201. 0x228:    _060LSP__ftwotoxs_
  202. 0x230:    _060LSP__ftwotoxd_
  203. 0x238:    _060LSP__ftwotoxx_
  204.  
  205. 0x240:    _060LSP__fabss_
  206. 0x248:    _060LSP__fabsd_
  207. 0x250:    _060LSP__fabsx_
  208. 0x258:    _060LSP__fadds_
  209. 0x260:    _060LSP__faddd_
  210. 0x268:    _060LSP__faddx_
  211. 0x270:    _060LSP__fdivs_
  212. 0x278:    _060LSP__fdivd_
  213. 0x280:    _060LSP__fdivx_
  214. 0x288:    _060LSP__fints_
  215. 0x290:    _060LSP__fintd_
  216. 0x298:    _060LSP__fintx_
  217. 0x2a0:    _060LSP__fintrzs_
  218. 0x2a8:    _060LSP__fintrzd_
  219. 0x2b0:    _060LSP__fintrzx_
  220. 0x2b8:    _060LSP__fmuls_
  221. 0x2c0:    _060LSP__fmuld_
  222. 0x2c8:    _060LSP__fmulx_
  223. 0x2d0:    _060LSP__fnegs_
  224. 0x2d8:    _060LSP__fnegd_
  225. 0x2e0:    _060LSP__fnegx_
  226. 0x2e8:    _060LSP__fsqrts_
  227. 0x2f0:    _060LSP__fsqrtd_
  228. 0x2f8:    _060LSP__fsqrtx_
  229. 0x300:    _060LSP__fsubs_
  230. 0x308:    _060LSP__fsubd_
  231. 0x310:    _060LSP__fsubx_
  232.