Home | History | Annotate | Line # | Download | only in fpsp
      1 *	$NetBSD: DYADIC.R3V6,v 1.2 1994/10/26 07:48:31 cgd Exp $
      2 
      3 *	MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
      4 *	M68000 Hi-Performance Microprocessor Division
      5 *	M68040 Software Package 
      6 *
      7 *	M68040 Software Package Copyright (c) 1993, 1994 Motorola Inc.
      8 *	All rights reserved.
      9 *
     10 *	THE SOFTWARE is provided on an "AS IS" basis and without warranty.
     11 *	To the maximum extent permitted by applicable law,
     12 *	MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
     13 *	INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
     14 *	PARTICULAR PURPOSE and any warranty against infringement with
     15 *	regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
     16 *	and any accompanying written materials. 
     17 *
     18 *	To the maximum extent permitted by applicable law,
     19 *	IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
     20 *	(INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS
     21 *	PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR
     22 *	OTHER PECUNIARY LOSS) ARISING OF THE USE OR INABILITY TO USE THE
     23 *	SOFTWARE.  Motorola assumes no responsibility for the maintenance
     24 *	and support of the SOFTWARE.  
     25 *
     26 *	You are hereby granted a copyright license to use, modify, and
     27 *	distribute the SOFTWARE so long as this entire notice is retained
     28 *	without alteration in any modified and/or redistributed versions,
     29 *	and that such modified versions are clearly identified as such.
     30 *	No licenses are granted by implication, estoppel or otherwise
     31 *	under any patents or trademarks of Motorola, Inc.
     32 
     33 *
     34 *	DYADIC.R3V6 1.2 4/30/91
     35 *
     36 *	DYADIC.R3V6 --- DYADIC template for MCD R3V6 native C compiler
     37 *
     38 *	The MCD compiler is old.  It returns float and double values
     39 *	as a double stored in d0/d1.  There is no support for single or extended
     40 *	precision operations.  It's not clear whether the float registers
     41 *	should be preserved, so for speed they're not.
     42 *
     43 
     44 	xref	_OPa_
     45 	xref	tag
     46 
     47 	xdef	_OPd_
     48 _OPd_:
     49 	link	a6,#-LOCAL_SIZE
     50 	fmovem.l fpsr/fpcr,USER_FPSR(a6) ; user's rounding mode/precision
     51 	fmove.l	#0,fpcr		; force rounding mode/prec to extended,rn
     52 *
     53 *	copy and convert arguments to ETEMP, FPTEMP. 
     54 *
     55 	fmove.d	8(a6),fp0
     56 	fmove.x	fp0,FPTEMP(a6)
     57 	lea	FPTEMP(a6),a0
     58 	bsr	tag
     59 	move.b	d0,DTAG(a6)
     60 
     61 	fmove.d	16(a6),fp0
     62 	fmove.x	fp0,ETEMP(a6)
     63 	lea	ETEMP(a6),a0
     64 	bsr	tag
     65 	move.b	d0,STAG(a6)
     66 
     67 	bsr	_OPa_
     68 
     69 	fmove.d	fp0,USER_D0(a6)	; result goes into d0/d1 pair
     70 	movem.l	USER_D0(a6),d0-d1
     71 	unlk	a6
     72 	rts
     73