xref: /netbsd/sys/arch/m68k/060sp/dist/fskeletn.s (revision 6550d01e)
1#
2# $NetBSD: fskeletn.s,v 1.1 2000/04/14 20:24:38 is Exp $
3#
4
5#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6# MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
7# M68000 Hi-Performance Microprocessor Division
8# M68060 Software Package Production Release
9#
10# M68060 Software Package Copyright (C) 1993, 1994, 1995, 1996 Motorola Inc.
11# All rights reserved.
12#
13# THE SOFTWARE is provided on an "AS IS" basis and without warranty.
14# To the maximum extent permitted by applicable law,
15# MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
16# INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS
17# FOR A PARTICULAR PURPOSE and any warranty against infringement with
18# regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
19# and any accompanying written materials.
20#
21# To the maximum extent permitted by applicable law,
22# IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
23# (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
24# BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS)
25# ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
26#
27# Motorola assumes no responsibility for the maintenance and support
28# of the SOFTWARE.
29#
30# You are hereby granted a copyright license to use, modify, and distribute the
31# SOFTWARE so long as this entire notice is retained without alteration
32# in any modified and/or redistributed versions, and that such modified
33# versions are clearly identified as such.
34# No licenses are granted by implication, estoppel or otherwise under any
35# patents or trademarks of Motorola, Inc.
36#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37
38#
39# fskeleton.s
40#
41# This file contains:
42#	(1) example "Call-out"s
43#	(2) example package entry code
44#	(3) example "Call-out" table
45#
46
47
48#################################
49# (1) EXAMPLE CALL-OUTS		#
50#				#
51# _060_fpsp_done()		#
52# _060_real_ovfl()		#
53# _060_real_unfl()		#
54# _060_real_operr()		#
55# _060_real_snan()		#
56# _060_real_dz()		#
57# _060_real_inex()		#
58# _060_real_bsun()		#
59# _060_real_fline()		#
60# _060_real_fpu_disabled()	#
61# _060_real_trap()		#
62#################################
63
64#
65# _060_fpsp_done():
66#
67# This is the main exit point for the 68060 Floating-Point
68# Software Package. For a normal exit, all 060FPSP routines call this
69# routine. The operating system can do system dependent clean-up or
70# simply execute an "rte" as with the sample code below.
71#
72	global		_060_fpsp_done
73_060_fpsp_done:
74	rte
75
76#
77# _060_real_ovfl():
78#
79# This is the exit point for the 060FPSP when an enabled overflow exception
80# is present. The routine below should point to the operating system handler
81# for enabled overflow conditions. The exception stack frame is an overflow
82# stack frame. The FP state frame holds the EXCEPTIONAL OPERAND.
83#
84# The sample routine below simply clears the exception status bit and
85# does an "rte".
86#
87	global		_060_real_ovfl
88_060_real_ovfl:
89	fsave		-(%sp)
90	mov.w		&0x6000,0x2(%sp)
91	frestore	(%sp)+
92	rte
93
94#
95# _060_real_unfl():
96#
97# This is the exit point for the 060FPSP when an enabled underflow exception
98# is present. The routine below should point to the operating system handler
99# for enabled underflow conditions. The exception stack frame is an underflow
100# stack frame. The FP state frame holds the EXCEPTIONAL OPERAND.
101#
102# The sample routine below simply clears the exception status bit and
103# does an "rte".
104#
105	global		_060_real_unfl
106_060_real_unfl:
107	fsave		-(%sp)
108	mov.w		&0x6000,0x2(%sp)
109	frestore	(%sp)+
110	rte
111
112#
113# _060_real_operr():
114#
115# This is the exit point for the 060FPSP when an enabled operand error exception
116# is present. The routine below should point to the operating system handler
117# for enabled operand error exceptions. The exception stack frame is an operand error
118# stack frame. The FP state frame holds the source operand of the faulting
119# instruction.
120#
121# The sample routine below simply clears the exception status bit and
122# does an "rte".
123#
124	global		_060_real_operr
125_060_real_operr:
126	fsave		-(%sp)
127	mov.w		&0x6000,0x2(%sp)
128	frestore	(%sp)+
129	rte
130
131#
132# _060_real_snan():
133#
134# This is the exit point for the 060FPSP when an enabled signalling NaN exception
135# is present. The routine below should point to the operating system handler
136# for enabled signalling NaN exceptions. The exception stack frame is a signalling NaN
137# stack frame. The FP state frame holds the source operand of the faulting
138# instruction.
139#
140# The sample routine below simply clears the exception status bit and
141# does an "rte".
142#
143	global		_060_real_snan
144_060_real_snan:
145	fsave		-(%sp)
146	mov.w		&0x6000,0x2(%sp)
147	frestore	(%sp)+
148	rte
149
150#
151# _060_real_dz():
152#
153# This is the exit point for the 060FPSP when an enabled divide-by-zero exception
154# is present. The routine below should point to the operating system handler
155# for enabled divide-by-zero exceptions. The exception stack frame is a divide-by-zero
156# stack frame. The FP state frame holds the source operand of the faulting
157# instruction.
158#
159# The sample routine below simply clears the exception status bit and
160# does an "rte".
161#
162	global		_060_real_dz
163_060_real_dz:
164	fsave		-(%sp)
165	mov.w		&0x6000,0x2(%sp)
166	frestore	(%sp)+
167	rte
168
169#
170# _060_real_inex():
171#
172# This is the exit point for the 060FPSP when an enabled inexact exception
173# is present. The routine below should point to the operating system handler
174# for enabled inexact exceptions. The exception stack frame is an inexact
175# stack frame. The FP state frame holds the source operand of the faulting
176# instruction.
177#
178# The sample routine below simply clears the exception status bit and
179# does an "rte".
180#
181	global		_060_real_inex
182_060_real_inex:
183	fsave		-(%sp)
184	mov.w		&0x6000,0x2(%sp)
185	frestore	(%sp)+
186	rte
187
188#
189# _060_real_bsun():
190#
191# This is the exit point for the 060FPSP when an enabled bsun exception
192# is present. The routine below should point to the operating system handler
193# for enabled bsun exceptions. The exception stack frame is a bsun
194# stack frame.
195#
196# The sample routine below clears the exception status bit, clears the NaN
197# bit in the FPSR, and does an "rte". The instruction that caused the
198# bsun will now be re-executed but with the NaN FPSR bit cleared.
199#
200	global		_060_real_bsun
201_060_real_bsun:
202	fsave		-(%sp)
203
204	fmov.l		%fpsr,-(%sp)
205	andi.b		&0xfe,(%sp)
206	fmov.l		(%sp)+,%fpsr
207
208	add.l		&0xc,%sp
209	rte
210
211#
212# _060_real_fline():
213#
214# This is the exit point for the 060FPSP when an F-Line Illegal exception is
215# encountered. Three different types of exceptions can enter the F-Line exception
216# vector number 11: FP Unimplemented Instructions, FP implemented instructions when
217# the FPU is disabled, and F-Line Illegal instructions. The 060FPSP module
218# _fpsp_fline() distinguishes between the three and acts appropriately. F-Line
219# Illegals branch here.
220#
221	global		_060_real_fline
222_060_real_fline:
223	bra.b		_060_real_fline
224
225#
226# _060_real_fpu_disabled():
227#
228# This is the exit point for the 060FPSP when an FPU disabled exception is
229# encountered. Three different types of exceptions can enter the F-Line exception
230# vector number 11: FP Unimplemented Instructions, FP implemented instructions when
231# the FPU is disabled, and F-Line Illegal instructions. The 060FPSP module
232# _fpsp_fline() distinguishes between the three and acts appropriately. FPU disabled
233# exceptions branch here.
234#
235# The sample code below enables the FPU, sets the PC field in the exception stack
236# frame to the PC of the instruction causing the exception, and does an "rte".
237# The execution of the instruction then proceeds with an enabled floating-point
238# unit.
239#
240	global		_060_real_fpu_disabled
241_060_real_fpu_disabled:
242	mov.l		%d0,-(%sp)		# enabled the fpu
243	movc		%pcr,%d0
244	bclr		&0x1,%d0
245	movc		%d0,%pcr
246	mov.l		(%sp)+,%d0
247
248	mov.l		0xc(%sp),0x2(%sp)	# set "Current PC"
249	rte
250
251#
252# _060_real_trap():
253#
254# This is the exit point for the 060FPSP when an emulated "ftrapcc" instruction
255# discovers that the trap condition is true and it should branch to the operating
256# system handler for the trap exception vector number 7.
257#
258# The sample code below simply executes an "rte".
259#
260	global		_060_real_trap
261_060_real_trap:
262	rte
263
264#############################################################################
265
266##################################
267# (2) EXAMPLE PACKAGE ENTRY CODE #
268##################################
269
270	global		_060_fpsp_snan
271_060_fpsp_snan:
272	bra.l		_FP_CALL_TOP+0x80+0x00
273
274	global		_060_fpsp_operr
275_060_fpsp_operr:
276	bra.l		_FP_CALL_TOP+0x80+0x08
277
278	global		_060_fpsp_ovfl
279_060_fpsp_ovfl:
280	bra.l		_FP_CALL_TOP+0x80+0x10
281
282	global		_060_fpsp_unfl
283_060_fpsp_unfl:
284	bra.l		_FP_CALL_TOP+0x80+0x18
285
286	global		_060_fpsp_dz
287_060_fpsp_dz:
288	bra.l		_FP_CALL_TOP+0x80+0x20
289
290	global		_060_fpsp_inex
291_060_fpsp_inex:
292	bra.l		_FP_CALL_TOP+0x80+0x28
293
294	global		_060_fpsp_fline
295_060_fpsp_fline:
296	bra.l		_FP_CALL_TOP+0x80+0x30
297
298	global		_060_fpsp_unsupp
299_060_fpsp_unsupp:
300	bra.l		_FP_CALL_TOP+0x80+0x38
301
302	global		_060_fpsp_effadd
303_060_fpsp_effadd:
304	bra.l		_FP_CALL_TOP+0x80+0x40
305
306#############################################################################
307
308################################
309# (3) EXAMPLE CALL-OUT SECTION #
310################################
311
312# The size of this section MUST be 128 bytes!!!
313
314	global	_FP_CALL_TOP
315_FP_CALL_TOP:
316	long	_060_real_bsun		- _FP_CALL_TOP
317	long	_060_real_snan		- _FP_CALL_TOP
318	long	_060_real_operr		- _FP_CALL_TOP
319	long	_060_real_ovfl		- _FP_CALL_TOP
320	long	_060_real_unfl		- _FP_CALL_TOP
321	long	_060_real_dz		- _FP_CALL_TOP
322	long	_060_real_inex		- _FP_CALL_TOP
323	long	_060_real_fline		- _FP_CALL_TOP
324	long	_060_real_fpu_disabled	- _FP_CALL_TOP
325	long	_060_real_trap		- _FP_CALL_TOP
326	long	_060_real_trace		- _FP_CALL_TOP
327	long	_060_real_access	- _FP_CALL_TOP
328	long	_060_fpsp_done		- _FP_CALL_TOP
329
330	long	0x00000000, 0x00000000, 0x00000000
331
332	long	_060_imem_read		- _FP_CALL_TOP
333	long	_060_dmem_read		- _FP_CALL_TOP
334	long	_060_dmem_write		- _FP_CALL_TOP
335	long	_060_imem_read_word	- _FP_CALL_TOP
336	long	_060_imem_read_long	- _FP_CALL_TOP
337	long	_060_dmem_read_byte	- _FP_CALL_TOP
338	long	_060_dmem_read_word	- _FP_CALL_TOP
339	long	_060_dmem_read_long	- _FP_CALL_TOP
340	long	_060_dmem_write_byte	- _FP_CALL_TOP
341	long	_060_dmem_write_word	- _FP_CALL_TOP
342	long	_060_dmem_write_long	- _FP_CALL_TOP
343
344	long	0x00000000
345
346	long	0x00000000, 0x00000000, 0x00000000, 0x00000000
347
348#############################################################################
349
350# 060 FPSP KERNEL PACKAGE NEEDS TO GO HERE!!!
351