Annotation of sys/arch/m68k/060sp/fskeletn.s, Revision 1.1.1.1
1.1 nbrk 1: #
2: # $OpenBSD: fskeletn.s,v 1.2 1996/05/30 22:14:31 niklas Exp $
3: # $NetBSD: fskeletn.s,v 1.2 1996/05/15 19:48:30 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: #
40: # fskeleton.s
41: #
42: # This file contains:
43: # (1) example "Call-out"s
44: # (2) example package entry code
45: # (3) example "Call-out" table
46: #
47:
48:
49: #################################
50: # (1) EXAMPLE CALL-OUTS #
51: # #
52: # _060_fpsp_done() #
53: # _060_real_ovfl() #
54: # _060_real_unfl() #
55: # _060_real_operr() #
56: # _060_real_snan() #
57: # _060_real_dz() #
58: # _060_real_inex() #
59: # _060_real_bsun() #
60: # _060_real_fline() #
61: # _060_real_fpu_disabled() #
62: # _060_real_trap() #
63: #################################
64:
65: #
66: # _060_fpsp_done():
67: #
68: # This is the main exit point for the 68060 Floating-Point
69: # Software Package. For a normal exit, all 060FPSP routines call this
70: # routine. The operating system can do system dependent clean-up or
71: # simply execute an "rte" as with the sample code below.
72: #
73: global _060_fpsp_done
74: _060_fpsp_done:
75: rte
76:
77: #
78: # _060_real_ovfl():
79: #
80: # This is the exit point for the 060FPSP when an enabled overflow exception
81: # is present. The routine below should point to the operating system handler
82: # for enabled overflow conditions. The exception stack frame is an overflow
83: # stack frame. The FP state frame holds the EXCEPTIONAL OPERAND.
84: #
85: # The sample routine below simply clears the exception status bit and
86: # does an "rte".
87: #
88: global _060_real_ovfl
89: _060_real_ovfl:
90: fsave -(%sp)
91: mov.w &0x6000,0x2(%sp)
92: frestore (%sp)+
93: rte
94:
95: #
96: # _060_real_unfl():
97: #
98: # This is the exit point for the 060FPSP when an enabled underflow exception
99: # is present. The routine below should point to the operating system handler
100: # for enabled underflow conditions. The exception stack frame is an underflow
101: # stack frame. The FP state frame holds the EXCEPTIONAL OPERAND.
102: #
103: # The sample routine below simply clears the exception status bit and
104: # does an "rte".
105: #
106: global _060_real_unfl
107: _060_real_unfl:
108: fsave -(%sp)
109: mov.w &0x6000,0x2(%sp)
110: frestore (%sp)+
111: rte
112:
113: #
114: # _060_real_operr():
115: #
116: # This is the exit point for the 060FPSP when an enabled operand error exception
117: # is present. The routine below should point to the operating system handler
118: # for enabled operand error exceptions. The exception stack frame is an operand error
119: # stack frame. The FP state frame holds the source operand of the faulting
120: # instruction.
121: #
122: # The sample routine below simply clears the exception status bit and
123: # does an "rte".
124: #
125: global _060_real_operr
126: _060_real_operr:
127: fsave -(%sp)
128: mov.w &0x6000,0x2(%sp)
129: frestore (%sp)+
130: rte
131:
132: #
133: # _060_real_snan():
134: #
135: # This is the exit point for the 060FPSP when an enabled signalling NaN exception
136: # is present. The routine below should point to the operating system handler
137: # for enabled signalling NaN exceptions. The exception stack frame is a signalling NaN
138: # stack frame. The FP state frame holds the source operand of the faulting
139: # instruction.
140: #
141: # The sample routine below simply clears the exception status bit and
142: # does an "rte".
143: #
144: global _060_real_snan
145: _060_real_snan:
146: fsave -(%sp)
147: mov.w &0x6000,0x2(%sp)
148: frestore (%sp)+
149: rte
150:
151: #
152: # _060_real_dz():
153: #
154: # This is the exit point for the 060FPSP when an enabled divide-by-zero exception
155: # is present. The routine below should point to the operating system handler
156: # for enabled divide-by-zero exceptions. The exception stack frame is a divide-by-zero
157: # stack frame. The FP state frame holds the source operand of the faulting
158: # instruction.
159: #
160: # The sample routine below simply clears the exception status bit and
161: # does an "rte".
162: #
163: global _060_real_dz
164: _060_real_dz:
165: fsave -(%sp)
166: mov.w &0x6000,0x2(%sp)
167: frestore (%sp)+
168: rte
169:
170: #
171: # _060_real_inex():
172: #
173: # This is the exit point for the 060FPSP when an enabled inexact exception
174: # is present. The routine below should point to the operating system handler
175: # for enabled inexact exceptions. The exception stack frame is an inexact
176: # stack frame. The FP state frame holds the source operand of the faulting
177: # instruction.
178: #
179: # The sample routine below simply clears the exception status bit and
180: # does an "rte".
181: #
182: global _060_real_inex
183: _060_real_inex:
184: fsave -(%sp)
185: mov.w &0x6000,0x2(%sp)
186: frestore (%sp)+
187: rte
188:
189: #
190: # _060_real_bsun():
191: #
192: # This is the exit point for the 060FPSP when an enabled bsun exception
193: # is present. The routine below should point to the operating system handler
194: # for enabled bsun exceptions. The exception stack frame is a bsun
195: # stack frame.
196: #
197: # The sample routine below clears the exception status bit, clears the NaN
198: # bit in the FPSR, and does an "rte". The instruction that caused the
199: # bsun will now be re-executed but with the NaN FPSR bit cleared.
200: #
201: global _060_real_bsun
202: _060_real_bsun:
203: fsave -(%sp)
204:
205: fmov.l %fpsr,-(%sp)
206: andi.b &0xfe,(%sp)
207: fmov.l (%sp)+,%fpsr
208:
209: add.l &0xc,%sp
210: rte
211:
212: #
213: # _060_real_fline():
214: #
215: # This is the exit point for the 060FPSP when an F-Line Illegal exception is
216: # encountered. Three different types of exceptions can enter the F-Line exception
217: # vector number 11: FP Unimplemented Instructions, FP implemented instructions when
218: # the FPU is disabled, and F-Line Illegal instructions. The 060FPSP module
219: # _fpsp_fline() distinguishes between the three and acts appropriately. F-Line
220: # Illegals branch here.
221: #
222: global _060_real_fline
223: _060_real_fline:
224: bra.b _060_real_fline
225:
226: #
227: # _060_real_fpu_disabled():
228: #
229: # This is the exit point for the 060FPSP when an FPU disabled exception is
230: # encountered. Three different types of exceptions can enter the F-Line exception
231: # vector number 11: FP Unimplemented Instructions, FP implemented instructions when
232: # the FPU is disabled, and F-Line Illegal instructions. The 060FPSP module
233: # _fpsp_fline() distinguishes between the three and acts appropriately. FPU disabled
234: # exceptions branch here.
235: #
236: # The sample code below enables the FPU, sets the PC field in the exception stack
237: # frame to the PC of the instruction causing the exception, and does an "rte".
238: # The execution of the instruction then proceeds with an enabled floating-point
239: # unit.
240: #
241: global _060_real_fpu_disabled
242: _060_real_fpu_disabled:
243: mov.l %d0,-(%sp) # enabled the fpu
244: movc %pcr,%d0
245: bclr &0x1,%d0
246: movc %d0,%pcr
247: mov.l (%sp)+,%d0
248:
249: mov.l 0xc(%sp),0x2(%sp) # set "Current PC"
250: rte
251:
252: #
253: # _060_real_trap():
254: #
255: # This is the exit point for the 060FPSP when an emulated "ftrapcc" instruction
256: # discovers that the trap condition is true and it should branch to the operating
257: # system handler for the trap exception vector number 7.
258: #
259: # The sample code below simply executes an "rte".
260: #
261: global _060_real_trap
262: _060_real_trap:
263: rte
264:
265: #############################################################################
266:
267: ##################################
268: # (2) EXAMPLE PACKAGE ENTRY CODE #
269: ##################################
270:
271: global _060_fpsp_snan
272: _060_fpsp_snan:
273: bra.l _FP_CALL_TOP+0x80+0x00
274:
275: global _060_fpsp_operr
276: _060_fpsp_operr:
277: bra.l _FP_CALL_TOP+0x80+0x08
278:
279: global _060_fpsp_ovfl
280: _060_fpsp_ovfl:
281: bra.l _FP_CALL_TOP+0x80+0x10
282:
283: global _060_fpsp_unfl
284: _060_fpsp_unfl:
285: bra.l _FP_CALL_TOP+0x80+0x18
286:
287: global _060_fpsp_dz
288: _060_fpsp_dz:
289: bra.l _FP_CALL_TOP+0x80+0x20
290:
291: global _060_fpsp_inex
292: _060_fpsp_inex:
293: bra.l _FP_CALL_TOP+0x80+0x28
294:
295: global _060_fpsp_fline
296: _060_fpsp_fline:
297: bra.l _FP_CALL_TOP+0x80+0x30
298:
299: global _060_fpsp_unsupp
300: _060_fpsp_unsupp:
301: bra.l _FP_CALL_TOP+0x80+0x38
302:
303: global _060_fpsp_effadd
304: _060_fpsp_effadd:
305: bra.l _FP_CALL_TOP+0x80+0x40
306:
307: #############################################################################
308:
309: ################################
310: # (3) EXAMPLE CALL-OUT SECTION #
311: ################################
312:
313: # The size of this section MUST be 128 bytes!!!
314:
315: global _FP_CALL_TOP
316: _FP_CALL_TOP:
317: long _060_real_bsun - _FP_CALL_TOP
318: long _060_real_snan - _FP_CALL_TOP
319: long _060_real_operr - _FP_CALL_TOP
320: long _060_real_ovfl - _FP_CALL_TOP
321: long _060_real_unfl - _FP_CALL_TOP
322: long _060_real_dz - _FP_CALL_TOP
323: long _060_real_inex - _FP_CALL_TOP
324: long _060_real_fline - _FP_CALL_TOP
325: long _060_real_fpu_disabled - _FP_CALL_TOP
326: long _060_real_trap - _FP_CALL_TOP
327: long _060_real_trace - _FP_CALL_TOP
328: long _060_real_access - _FP_CALL_TOP
329: long _060_fpsp_done - _FP_CALL_TOP
330:
331: long 0x00000000, 0x00000000, 0x00000000
332:
333: long _060_imem_read - _FP_CALL_TOP
334: long _060_dmem_read - _FP_CALL_TOP
335: long _060_dmem_write - _FP_CALL_TOP
336: long _060_imem_read_word - _FP_CALL_TOP
337: long _060_imem_read_long - _FP_CALL_TOP
338: long _060_dmem_read_byte - _FP_CALL_TOP
339: long _060_dmem_read_word - _FP_CALL_TOP
340: long _060_dmem_read_long - _FP_CALL_TOP
341: long _060_dmem_write_byte - _FP_CALL_TOP
342: long _060_dmem_write_word - _FP_CALL_TOP
343: long _060_dmem_write_long - _FP_CALL_TOP
344:
345: long 0x00000000
346:
347: long 0x00000000, 0x00000000, 0x00000000, 0x00000000
348:
349: #############################################################################
350:
351: # 060 FPSP KERNEL PACKAGE NEEDS TO GO HERE!!!
CVSweb