xref: /openbmc/linux/arch/m68k/fpsp040/x_unimp.S (revision 1da177e4)
1|
2|	x_unimp.sa 3.3 7/1/91
3|
4|	fpsp_unimp --- FPSP handler for unimplemented instruction
5|	exception.
6|
7| Invoked when the user program encounters a floating-point
8| op-code that hardware does not support.  Trap vector# 11
9| (See table 8-1 MC68030 User's Manual).
10|
11|
12| Note: An fsave for an unimplemented inst. will create a short
13| fsave stack.
14|
15|  Input: 1. Six word stack frame for unimplemented inst, four word
16|            for illegal
17|            (See table 8-7 MC68030 User's Manual).
18|         2. Unimp (short) fsave state frame created here by fsave
19|            instruction.
20|
21|
22|		Copyright (C) Motorola, Inc. 1990
23|			All Rights Reserved
24|
25|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
26|	The copyright notice above does not evidence any
27|	actual or intended publication of such source code.
28
29X_UNIMP:	|idnt    2,1 | Motorola 040 Floating Point Software Package
30
31	|section	8
32
33#include "fpsp.h"
34
35	|xref	get_op
36	|xref	do_func
37	|xref	sto_res
38	|xref	gen_except
39	|xref	fpsp_fmt_error
40
41	.global	fpsp_unimp
42	.global	uni_2
43fpsp_unimp:
44	link		%a6,#-LOCAL_SIZE
45	fsave		-(%a7)
46uni_2:
47	moveml		%d0-%d1/%a0-%a1,USER_DA(%a6)
48	fmovemx	%fp0-%fp3,USER_FP0(%a6)
49	fmoveml	%fpcr/%fpsr/%fpiar,USER_FPCR(%a6)
50	moveb		(%a7),%d0		|test for valid version num
51	andib		#0xf0,%d0		|test for $4x
52	cmpib		#VER_4,%d0	|must be $4x or exit
53	bnel		fpsp_fmt_error
54|
55|	Temporary D25B Fix
56|	The following lines are used to ensure that the FPSR
57|	exception byte and condition codes are clear before proceeding
58|
59	movel		USER_FPSR(%a6),%d0
60	andl		#0xFF00FF,%d0	|clear all but accrued exceptions
61	movel		%d0,USER_FPSR(%a6)
62	fmovel		#0,%FPSR |clear all user bits
63	fmovel		#0,%FPCR	|clear all user exceptions for FPSP
64
65	clrb		UFLG_TMP(%a6)	|clr flag for unsupp data
66
67	bsrl		get_op		|go get operand(s)
68	clrb		STORE_FLG(%a6)
69	bsrl		do_func		|do the function
70	fsave		-(%a7)		|capture possible exc state
71	tstb		STORE_FLG(%a6)
72	bnes		no_store	|if STORE_FLG is set, no store
73	bsrl		sto_res		|store the result in user space
74no_store:
75	bral		gen_except	|post any exceptions and return
76
77	|end
78