| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | | | 
| Matt Waddel | e00d82d | 2006-02-11 17:55:48 -0800 | [diff] [blame] | 25 | |       For details on the license for this file, please see the | 
|  | 26 | |       file, README, in this same directory. | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 27 |  | 
|  | 28 | X_UNIMP:	|idnt    2,1 | Motorola 040 Floating Point Software Package | 
|  | 29 |  | 
|  | 30 | |section	8 | 
|  | 31 |  | 
|  | 32 | #include "fpsp.h" | 
|  | 33 |  | 
|  | 34 | |xref	get_op | 
|  | 35 | |xref	do_func | 
|  | 36 | |xref	sto_res | 
|  | 37 | |xref	gen_except | 
|  | 38 | |xref	fpsp_fmt_error | 
|  | 39 |  | 
|  | 40 | .global	fpsp_unimp | 
|  | 41 | .global	uni_2 | 
|  | 42 | fpsp_unimp: | 
|  | 43 | link		%a6,#-LOCAL_SIZE | 
|  | 44 | fsave		-(%a7) | 
|  | 45 | uni_2: | 
|  | 46 | moveml		%d0-%d1/%a0-%a1,USER_DA(%a6) | 
|  | 47 | fmovemx	%fp0-%fp3,USER_FP0(%a6) | 
|  | 48 | fmoveml	%fpcr/%fpsr/%fpiar,USER_FPCR(%a6) | 
|  | 49 | moveb		(%a7),%d0		|test for valid version num | 
|  | 50 | andib		#0xf0,%d0		|test for $4x | 
|  | 51 | cmpib		#VER_4,%d0	|must be $4x or exit | 
|  | 52 | bnel		fpsp_fmt_error | 
|  | 53 | | | 
|  | 54 | |	Temporary D25B Fix | 
|  | 55 | |	The following lines are used to ensure that the FPSR | 
|  | 56 | |	exception byte and condition codes are clear before proceeding | 
|  | 57 | | | 
|  | 58 | movel		USER_FPSR(%a6),%d0 | 
|  | 59 | andl		#0xFF00FF,%d0	|clear all but accrued exceptions | 
|  | 60 | movel		%d0,USER_FPSR(%a6) | 
|  | 61 | fmovel		#0,%FPSR |clear all user bits | 
|  | 62 | fmovel		#0,%FPCR	|clear all user exceptions for FPSP | 
|  | 63 |  | 
|  | 64 | clrb		UFLG_TMP(%a6)	|clr flag for unsupp data | 
|  | 65 |  | 
|  | 66 | bsrl		get_op		|go get operand(s) | 
|  | 67 | clrb		STORE_FLG(%a6) | 
|  | 68 | bsrl		do_func		|do the function | 
|  | 69 | fsave		-(%a7)		|capture possible exc state | 
|  | 70 | tstb		STORE_FLG(%a6) | 
|  | 71 | bnes		no_store	|if STORE_FLG is set, no store | 
|  | 72 | bsrl		sto_res		|store the result in user space | 
|  | 73 | no_store: | 
|  | 74 | bral		gen_except	|post any exceptions and return | 
|  | 75 |  | 
|  | 76 | |end |