DYADIC.GCC revision 1.2 1 1.2 cgd * $NetBSD: DYADIC.GCC,v 1.2 1994/10/26 07:48:27 cgd Exp $
2 1.2 cgd
3 1.1 mycroft * MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
4 1.1 mycroft * M68000 Hi-Performance Microprocessor Division
5 1.1 mycroft * M68040 Software Package
6 1.1 mycroft *
7 1.1 mycroft * M68040 Software Package Copyright (c) 1993, 1994 Motorola Inc.
8 1.1 mycroft * All rights reserved.
9 1.1 mycroft *
10 1.1 mycroft * THE SOFTWARE is provided on an "AS IS" basis and without warranty.
11 1.1 mycroft * To the maximum extent permitted by applicable law,
12 1.1 mycroft * MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
13 1.1 mycroft * INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
14 1.1 mycroft * PARTICULAR PURPOSE and any warranty against infringement with
15 1.1 mycroft * regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
16 1.1 mycroft * and any accompanying written materials.
17 1.1 mycroft *
18 1.1 mycroft * To the maximum extent permitted by applicable law,
19 1.1 mycroft * IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
20 1.1 mycroft * (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS
21 1.1 mycroft * PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR
22 1.1 mycroft * OTHER PECUNIARY LOSS) ARISING OF THE USE OR INABILITY TO USE THE
23 1.1 mycroft * SOFTWARE. Motorola assumes no responsibility for the maintenance
24 1.1 mycroft * and support of the SOFTWARE.
25 1.1 mycroft *
26 1.1 mycroft * You are hereby granted a copyright license to use, modify, and
27 1.1 mycroft * distribute the SOFTWARE so long as this entire notice is retained
28 1.1 mycroft * without alteration in any modified and/or redistributed versions,
29 1.1 mycroft * and that such modified versions are clearly identified as such.
30 1.1 mycroft * No licenses are granted by implication, estoppel or otherwise
31 1.1 mycroft * under any patents or trademarks of Motorola, Inc.
32 1.1 mycroft
33 1.1 mycroft *
34 1.1 mycroft * DYADIC.GCC --- DYADIC template for GCC compiler
35 1.1 mycroft *
36 1.1 mycroft * This is based on the generic template. The only difference is that
37 1.1 mycroft * GCC does not need the d0-d1/a0-a1 registers saved.
38 1.1 mycroft *
39 1.1 mycroft * Customizations:
40 1.1 mycroft * 2. Likewise, don't save FP0/FP1 if they are scratch
41 1.1 mycroft * registers.
42 1.1 mycroft * 3. Delete updating of the fpsr if you only care about
43 1.1 mycroft * the result.
44 1.1 mycroft * 5. Move the result to d0/d1 if the compiler is that old.
45 1.1 mycroft *
46 1.1 mycroft
47 1.1 mycroft xref _OPa_
48 1.1 mycroft xref tag
49 1.1 mycroft
50 1.1 mycroft xdef _OPs_
51 1.1 mycroft _OPs_:
52 1.1 mycroft link a6,#-LOCAL_SIZE
53 1.1 mycroft fmovem.x fp0-fp3,USER_FP0(a6)
54 1.1 mycroft fmove.l fpsr,USER_FPSR(a6)
55 1.1 mycroft fmove.l fpcr,USER_FPCR(a6) ; user's rounding mode/precision
56 1.1 mycroft fmove.l #0,fpcr ; force rounding mode/prec to extended,rn
57 1.1 mycroft *
58 1.1 mycroft * copy, convert and tag input arguments
59 1.1 mycroft *
60 1.1 mycroft fmove.s 8(a6),fp0
61 1.1 mycroft fmove.x fp0,FPTEMP(a6)
62 1.1 mycroft lea FPTEMP(a6),a0
63 1.1 mycroft bsr tag
64 1.1 mycroft move.b d0,DTAG(a6)
65 1.1 mycroft
66 1.1 mycroft fmove.s 12(a6),fp0
67 1.1 mycroft fmove.x fp0,ETEMP(a6)
68 1.1 mycroft lea ETEMP(a6),a0
69 1.1 mycroft bsr tag
70 1.1 mycroft move.b d0,STAG(a6)
71 1.1 mycroft
72 1.1 mycroft bsr _OPa_
73 1.1 mycroft
74 1.1 mycroft fmove.l fpsr,d0 ; update status register
75 1.1 mycroft or.b FPSR_AEXCEPT(a6),d0 ;add previously accrued exceptions
76 1.1 mycroft swap.w d0
77 1.1 mycroft or.b FPSR_QBYTE(a6),d0 ; pickup sign of quotient byte
78 1.1 mycroft swap.w d0
79 1.1 mycroft fmove.l d0,fpsr
80 1.1 mycroft *
81 1.1 mycroft * Result is now in FP0
82 1.1 mycroft *
83 1.1 mycroft fmovem.x USER_FP1(a6),fp1-fp3 ; note: FP0 not restored
84 1.1 mycroft unlk a6
85 1.1 mycroft rts
86 1.1 mycroft
87 1.1 mycroft xdef _OPd_
88 1.1 mycroft _OPd_:
89 1.1 mycroft link a6,#-LOCAL_SIZE
90 1.1 mycroft fmovem.x fp0-fp3,USER_FP0(a6)
91 1.1 mycroft fmove.l fpsr,USER_FPSR(a6)
92 1.1 mycroft fmove.l fpcr,USER_FPCR(a6) ; user's rounding mode/precision
93 1.1 mycroft fmove.l #0,fpcr ; force rounding mode/prec to extended,rn
94 1.1 mycroft *
95 1.1 mycroft * copy, convert and tag input arguments
96 1.1 mycroft *
97 1.1 mycroft fmove.d 8(a6),fp0
98 1.1 mycroft fmove.x fp0,FPTEMP(a6)
99 1.1 mycroft lea FPTEMP(a6),a0
100 1.1 mycroft bsr tag
101 1.1 mycroft move.b d0,DTAG(a6)
102 1.1 mycroft
103 1.1 mycroft fmove.d 16(a6),fp0
104 1.1 mycroft fmove.x fp0,ETEMP(a6)
105 1.1 mycroft lea ETEMP(a6),a0
106 1.1 mycroft bsr tag
107 1.1 mycroft move.b d0,STAG(a6)
108 1.1 mycroft
109 1.1 mycroft bsr _OPa_
110 1.1 mycroft
111 1.1 mycroft fmove.l fpsr,d0 ; update status register
112 1.1 mycroft or.b FPSR_AEXCEPT(a6),d0 ;add previously accrued exceptions
113 1.1 mycroft swap.w d0
114 1.1 mycroft or.b FPSR_QBYTE(a6),d0 ; pickup sign of quotient byte
115 1.1 mycroft swap.w d0
116 1.1 mycroft fmove.l d0,fpsr
117 1.1 mycroft *
118 1.1 mycroft * Result is now in FP0
119 1.1 mycroft *
120 1.1 mycroft fmovem.x USER_FP1(a6),fp1-fp3 ; note: FP0 not restored
121 1.1 mycroft unlk a6
122 1.1 mycroft rts
123 1.1 mycroft
124 1.1 mycroft xdef _OPx_
125 1.1 mycroft _OPx_:
126 1.1 mycroft link a6,#-LOCAL_SIZE
127 1.1 mycroft fmovem.x fp0-fp3,USER_FP0(a6)
128 1.1 mycroft fmove.l fpsr,USER_FPSR(a6)
129 1.1 mycroft fmove.l fpcr,USER_FPCR(a6) ; user's rounding mode/precision
130 1.1 mycroft fmove.l #0,fpcr ; force rounding mode/prec to extended,rn
131 1.1 mycroft *
132 1.1 mycroft * copy, convert and tag input arguments
133 1.1 mycroft *
134 1.1 mycroft fmove.x 8(a6),fp0
135 1.1 mycroft fmove.x fp0,FPTEMP(a6)
136 1.1 mycroft lea FPTEMP(a6),a0
137 1.1 mycroft bsr tag
138 1.1 mycroft move.b d0,DTAG(a6)
139 1.1 mycroft
140 1.1 mycroft fmove.x 20(a6),fp0
141 1.1 mycroft fmove.x fp0,ETEMP(a6)
142 1.1 mycroft lea ETEMP(a6),a0
143 1.1 mycroft bsr tag
144 1.1 mycroft move.b d0,STAG(a6)
145 1.1 mycroft
146 1.1 mycroft bsr _OPa_
147 1.1 mycroft
148 1.1 mycroft fmove.l fpsr,d0 ; update status register
149 1.1 mycroft or.b FPSR_AEXCEPT(a6),d0 ;add previously accrued exceptions
150 1.1 mycroft swap.w d0
151 1.1 mycroft or.b FPSR_QBYTE(a6),d0 ; pickup sign of quotient byte
152 1.1 mycroft swap.w d0
153 1.1 mycroft fmove.l d0,fpsr
154 1.1 mycroft *
155 1.1 mycroft * Result is now in FP0
156 1.1 mycroft *
157 1.1 mycroft fmovem.x USER_FP1(a6),fp1-fp3 ; note: FP0 not restored
158 1.1 mycroft unlk a6
159 1.1 mycroft rts
160 1.1 mycroft
161