Blame view

kernel/linux-imx6_3.14.28/arch/m68k/ifpsp060/fplsp.doc 7.84 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  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_