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