Annotation of sys/arch/m68k/060sp/fpsp.doc, Revision 1.1.1.1
1.1 nbrk 1: #
2: # $OpenBSD: fpsp.doc,v 1.2 1996/05/30 22:14:16 niklas Exp $
3: # $NetBSD: fpsp.doc,v 1.2 1996/05/15 19:47:51 is Exp $
4: #
5:
6: #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7: # MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
8: # M68000 Hi-Performance Microprocessor Division
9: # M68060 Software Package Production Release
10: #
11: # M68060 Software Package Copyright (C) 1993, 1994, 1995, 1996 Motorola Inc.
12: # All rights reserved.
13: #
14: # THE SOFTWARE is provided on an "AS IS" basis and without warranty.
15: # To the maximum extent permitted by applicable law,
16: # MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
17: # INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS
18: # FOR A PARTICULAR PURPOSE and any warranty against infringement with
19: # regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
20: # and any accompanying written materials.
21: #
22: # To the maximum extent permitted by applicable law,
23: # IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
24: # (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
25: # BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS)
26: # ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
27: #
28: # Motorola assumes no responsibility for the maintenance and support
29: # of the SOFTWARE.
30: #
31: # You are hereby granted a copyright license to use, modify, and distribute the
32: # SOFTWARE so long as this entire notice is retained without alteration
33: # in any modified and/or redistributed versions, and that such modified
34: # versions are clearly identified as such.
35: # No licenses are granted by implication, estoppel or otherwise under any
36: # patents or trademarks of Motorola, Inc.
37: #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38:
39: 68060 FLOATING-POINT SOFTWARE PACKAGE (Kernel version)
40: -------------------------------------------------------
41:
42: The file fpsp.sa contains the 68060 Floating-Point Software
43: Package. This package is essentially a set of exception handlers
44: that can be integrated into an operating system.
45: These exception handlers emulate Unimplemented FP instructions,
46: instructions using unimplemented data types, and instructions
47: using unimplemented addressing modes. In addition, this package
48: includes exception handlers to provide full IEEE-754 compliant
49: exception handling.
50:
51: Release file format:
52: --------------------
53: The file fpsp.sa is essentially a hexadecimal image of the
54: release package. This is the ONLY format which will be supported.
55: The hex image was created by assembling the source code and
56: then converting the resulting binary output image into an
57: ASCII text file. The hexadecimal numbers are listed
58: using the Motorola Assembly Syntax assembler directive "dc.l"
59: (define constant longword). The file can be converted to other
60: assembly syntaxes by using any word processor with a global
61: search and replace function.
62:
63: To assist in assembling and linking this module with other modules,
64: the installer should add a symbolic label to the top of the file.
65: This will allow calling routines to access the entry points
66: of this package.
67:
68: The source code fpsp.s has also been included but only for
69: documentation purposes.
70:
71: Release file structure:
72: -----------------------
73:
74: (top of module)
75: -----------------
76: | | - 128 byte-sized section
77: (1) | Call-Out | - 4 bytes per entry (user fills these in)
78: | | - example routines in fskeleton.s
79: -----------------
80: | | - 8 bytes per entry
81: (2) | Entry Point | - user does "bra" or "jmp" to this address
82: | |
83: -----------------
84: | | - code section
85: (3) ~ ~
86: | |
87: -----------------
88: (bottom of module)
89:
90: The first section of this module is the "Call-out" section. This section
91: is NOT INCLUDED in fpsp.sa (an example "Call-out" section is provided at
92: the end of the file fskeleton.s). The purpose of this section is to allow
93: the FPSP routines to reference external functions that must be provided
94: by the host operating system. This section MUST be exactly 128 bytes in
95: size. There are 32 fields, each 4 bytes in size. Each field corresponds
96: to a function required by the FPSP (these functions and their location are
97: listed in "68060FPSP call-outs" below). Each field entry should contain
98: the address of the corresponding function RELATIVE to the starting address
99: of the "call-out" section. The "Call-out" section must sit adjacent to the
100: fpsp.sa image in memory.
101:
102: The second section, the "Entry-point" section, is used by external routines
103: to access the functions within the FPSP. Since the fpsp.sa hex file contains
104: no symbol names, this section contains function entry points that are fixed
105: with respect to the top of the package. The currently defined entry-points
106: are listed in section "68060 FPSP entry points" below. A calling routine
107: would simply execute a "bra" or "jmp" that jumped to the selected function
108: entry-point.
109:
110: For example, if the 68060 hardware took a "Line-F Emulator" exception
111: (vector #11), the operating system should execute something similar to:
112:
113: bra _060FPSP_TOP+128+48
114:
115: (_060FPSP_TOP is the starting address of the "Call-out" section; the "Call-out"
116: section is 128 bytes long; and the F-Line FPSP handler entry point is located
117: 48 bytes from the top of the "Entry-point" section.)
118:
119: The third section is the code section. After entering through an "Entry-point",
120: the entry code jumps to the appropriate emulation code within the code section.
121:
122: 68060FPSP call-outs: (details in fskeleton.s)
123: --------------------
124: 0x000: _060_real_bsun
125: 0x004: _060_real_snan
126: 0x008: _060_real_operr
127: 0x00c: _060_real_ovfl
128: 0x010: _060_real_unfl
129: 0x014: _060_real_dz
130: 0x018: _060_real_inex
131: 0x01c: _060_real_fline
132: 0x020: _060_real_fpu_disabled
133: 0x024: _060_real_trap
134: 0x028: _060_real_trace
135: 0x02c: _060_real_access
136: 0x030: _060_fpsp_done
137:
138: 0x034: (Motorola reserved)
139: 0x038: (Motorola reserved)
140: 0x03c: (Motorola reserved)
141:
142: 0x040: _060_imem_read
143: 0x044: _060_dmem_read
144: 0x048: _060_dmem_write
145: 0x04c: _060_imem_read_word
146: 0x050: _060_imem_read_long
147: 0x054: _060_dmem_read_byte
148: 0x058: _060_dmem_read_word
149: 0x05c: _060_dmem_read_long
150: 0x060: _060_dmem_write_byte
151: 0x064: _060_dmem_write_word
152: 0x068: _060_dmem_write_long
153:
154: 0x06c: (Motorola reserved)
155: 0x070: (Motorola reserved)
156: 0x074: (Motorola reserved)
157: 0x078: (Motorola reserved)
158: 0x07c: (Motorola reserved)
159:
160: 68060FPSP entry points:
161: -----------------------
162: 0x000: _060_fpsp_snan
163: 0x008: _060_fpsp_operr
164: 0x010: _060_fpsp_ovfl
165: 0x018: _060_fpsp_unfl
166: 0x020: _060_fpsp_dz
167: 0x028: _060_fpsp_inex
168: 0x030: _060_fpsp_fline
169: 0x038: _060_fpsp_unsupp
170: 0x040: _060_fpsp_effadd
171:
172:
173: Miscellaneous:
174: --------------
175:
176: _060_fpsp_snan:
177: ----------------
178: - documented in 3.5 of 060SP spec.
179: - Basic flow:
180: exception taken ---> enter _060_fpsp_snan --|
181: |
182: always exits through _060_real_snan <----
183:
184: _060_fpsp_operr:
185: ----------------
186: - documented in 3.5 of 060SP spec.
187: - Basic flow:
188: exception taken ---> enter _060_fpsp_operr --|
189: |
190: always exits through _060_real_operr <-----
191:
192: _060_fpsp_dz:
193: ----------------
194: - documented in 3.7 of 060SP spec.
195: - Basic flow:
196: exception taken ---> enter _060_fpsp_dz --|
197: |
198: always exits through _060_real_dz <----
199:
200: _060_fpsp_inex:
201: ----------------
202: - documented in 3.6 of 060SP spec.
203: - Basic flow:
204: exception taken ---> enter _060_fpsp_inex --|
205: |
206: always exits through _060_real_inex <----
207:
208: _060_fpsp_ovfl:
209: ----------------
210: - documented in 3.4 of 060SP spec.
211: - Basic flow:
212: exception taken ---> enter _060_fpsp_ovfl --|
213: |
214: may exit through _060_real_inex <---|
215: or |
216: may exit through _060_real_ovfl <---|
217: or |
218: may exit through _060_fpsp_done <---|
219:
220: _060_fpsp_unfl:
221: ----------------
222: - documented in 3.4 of 060SP spec.
223: - Basic flow:
224: exception taken ---> enter _060_fpsp_unfl --|
225: |
226: may exit through _060_real_inex <---|
227: or |
228: may exit through _060_real_unfl <---|
229: or |
230: may exit through _060_fpsp_done <---|
231:
232: _060_fpsp_fline:
233: -----------------
234: - not fully documented in 060SP spec.
235: - Basic flow:
236: exception taken ---> enter _060_fpsp_fline --|
237: |
238: -------------------------------------------
239: | | |
240: v v v
241: (unimplemented (fpu disabled) (possible F-line illegal)
242: stack frame) | v
243: | v special case "fmovecr"?
244: | exit through |
245: | _060_real_fpu_disabled -------------
246: | | |
247: | ^ v v
248: | | (yes) (no)
249: | | v v
250: | | fpu disabled? exit through
251: | | | _060_real_fline
252: v | -------------
253: | | | |
254: | | v v
255: | |-----------(yes) (no)
256: | |
257: |----<------------------------------------|
258: |
259: |
260: |----> may exit through _060_real_trace
261: |
262: |----> may exit through _060_real_trap
263: |
264: |----> may exit thorugh _060_real_bsun
265: |
266: |----> may exit through _060_fpsp_done
267:
268: _060_fpsp_unsupp:
269: ------------------
270: - documented in 3.1 of 060SP spec.
271: - Basic flow:
272: exception taken ---> enter _060_fpsp_unsupp --|
273: |
274: |
275: may exit through _060_real_snan <----|
276: or |
277: may exit through _060_real_operr <----|
278: or |
279: may exit through _060_real_ovfl <----|
280: or |
281: may exit through _060_real_unfl <----|
282: or |
283: may exit through _060_real_inex <----|
284: or |
285: may exit through _060_real_trace <----|
286: or |
287: may exit through _060_fpsp_done <----|
288:
289: _060_fpsp_effadd:
290: ------------------
291: - documented in 3.3 of 060 spec.
292: - Basic flow:
293: exception taken ---> enter _060_fpsp_effadd --|
294: |
295: |
296: may exit through _060_real_trace <----|
297: or |
298: may exit through _060_real_fpu_disabled <----|
299: or |
300: may exit through _060_fpsp_done <----|
CVSweb