DYADIC.CI5 revision 1.1 1 * MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
2 * M68000 Hi-Performance Microprocessor Division
3 * M68040 Software Package
4 *
5 * M68040 Software Package Copyright (c) 1993, 1994 Motorola Inc.
6 * All rights reserved.
7 *
8 * THE SOFTWARE is provided on an "AS IS" basis and without warranty.
9 * To the maximum extent permitted by applicable law,
10 * MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
11 * INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
12 * PARTICULAR PURPOSE and any warranty against infringement with
13 * regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
14 * and any accompanying written materials.
15 *
16 * To the maximum extent permitted by applicable law,
17 * IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
18 * (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS
19 * PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR
20 * OTHER PECUNIARY LOSS) ARISING OF THE USE OR INABILITY TO USE THE
21 * SOFTWARE. Motorola assumes no responsibility for the maintenance
22 * and support of the SOFTWARE.
23 *
24 * You are hereby granted a copyright license to use, modify, and
25 * distribute the SOFTWARE so long as this entire notice is retained
26 * without alteration in any modified and/or redistributed versions,
27 * and that such modified versions are clearly identified as such.
28 * No licenses are granted by implication, estoppel or otherwise
29 * under any patents or trademarks of Motorola, Inc.
30
31 *
32 * DYADIC.CI5 1.2 4/30/91
33 *
34 * DYADIC.CI5 --- DYADIC template for CI5 compiler
35 *
36
37 xref _OPa_
38 xref tag
39
40 xdef _OPd_
41 _OPd_:
42 link a6,#-LOCAL_SIZE
43 fmovem.x fp2-fp3,USER_FP2(a6)
44 fmovem.l fpsr/fpcr,USER_FPSR(a6) ; user's rounding mode/precision
45 fmove.l #0,fpcr ; force rounding mode/prec to extended,rn
46 *
47 * copy, convert and tag input arguments
48 *
49 fmove.d 8(a6),fp0
50 fmove.x fp0,FPTEMP(a6)
51 lea FPTEMP(a6),a0
52 bsr tag
53 move.b d0,DTAG(a6)
54
55 fmove.d 16(a6),fp0
56 fmove.x fp0,ETEMP(a6)
57 lea ETEMP(a6),a0
58 bsr tag
59 move.b d0,STAG(a6)
60
61 bsr _OPa_
62
63 fmove.l fpsr,d0 ; update status register
64 or.b FPSR_AEXCEPT(a6),d0 ;add previously accrued exceptions
65 swap.w d0
66 or.b FPSR_QBYTE(a6),d0 ; pickup sign of quotient byte
67 swap.w d0
68 fmove.l d0,fpsr
69 *
70 * Result is now in FP0
71 *
72 fmovem.x USER_FP2(a6),fp2-fp3 ; note: FP0/FP1 not restored
73 unlk a6
74 rts
75
76