diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
commit | d6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch) | |
tree | ece253b876159b39c620e62b6c9b1174642e070e /sys/arch/m68k/fpsp/MONADIC.GCC |
initial import of NetBSD tree
Diffstat (limited to 'sys/arch/m68k/fpsp/MONADIC.GCC')
-rw-r--r-- | sys/arch/m68k/fpsp/MONADIC.GCC | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/sys/arch/m68k/fpsp/MONADIC.GCC b/sys/arch/m68k/fpsp/MONADIC.GCC new file mode 100644 index 00000000000..a8b7ce142ae --- /dev/null +++ b/sys/arch/m68k/fpsp/MONADIC.GCC @@ -0,0 +1,203 @@ +* $NetBSD: MONADIC.GCC,v 1.2 1994/10/26 07:48:40 cgd Exp $ + +* MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP +* M68000 Hi-Performance Microprocessor Division +* M68040 Software Package +* +* M68040 Software Package Copyright (c) 1993, 1994 Motorola Inc. +* All rights reserved. +* +* THE SOFTWARE is provided on an "AS IS" basis and without warranty. +* To the maximum extent permitted by applicable law, +* MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +* INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A +* PARTICULAR PURPOSE and any warranty against infringement with +* regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) +* and any accompanying written materials. +* +* To the maximum extent permitted by applicable law, +* IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER +* (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS +* PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR +* OTHER PECUNIARY LOSS) ARISING OF THE USE OR INABILITY TO USE THE +* SOFTWARE. Motorola assumes no responsibility for the maintenance +* and support of the SOFTWARE. +* +* You are hereby granted a copyright license to use, modify, and +* distribute the SOFTWARE so long as this entire notice is retained +* without alteration in any modified and/or redistributed versions, +* and that such modified versions are clearly identified as such. +* No licenses are granted by implication, estoppel or otherwise +* under any patents or trademarks of Motorola, Inc. + +* +* MONADIC.GCC --- MONADIC template for GCC compiler +* +* This is based on the generic template. The only difference is that +* GCC does not need the d0-d1/a0-a1 registers saved. +* +* Customizations: +* 2. Likewise, don't save FP0/FP1 if they are scratch +* registers. +* 3. Delete handling of the fpsr if you only care about +* the result. +* 5. Move the result to d0/d1 if the compiler is that old. +* + + xref tag + xref _OPr_ + xref _OPz_ + xref _OPi_ + xref _OPn_ + xref _OPm_ + + xdef _OPs_ +_OPs_: + link a6,#-LOCAL_SIZE + fmovem.x fp0-fp3,USER_FP0(a6) + fmove.l fpsr,USER_FPSR(a6) + fmove.l fpcr,USER_FPCR(a6) + fmove.l fpcr,d1 ; user's rounding mode/precision + fmove.l #0,fpcr ; force rounding mode/prec to extended,rn +* +* copy, convert and tag input argument +* + fmove.s 8(a6),fp0 + fmove.x fp0,ETEMP(a6) + lea ETEMP(a6),a0 + bsr tag + move.b d0,STAG(a6) + tst.b d0 + bne.b _TMP_2 + bsr _OPr_ ; normalized (regular) number + bra.b _TMP_6 +_TMP_2: + cmp.b #$20,d0 ; zero? + bne.b _TMP_3 + bsr _OPz_ + bra.b _TMP_6 +_TMP_3: + cmp.b #$40,d0 ; infinity? + bne.b _TMP_4 + bsr _OPi_ + bra.b _TMP_6 +_TMP_4: + cmp.b #$60,d0 ; NaN? + bne.b _TMP_5 + bsr _OPn_ + bra.b _TMP_6 +_TMP_5: + bsr _OPm_ ; assuming a denorm... + +_TMP_6: + fmove.l fpsr,d0 ; update status register + or.b FPSR_AEXCEPT(a6),d0 ;add previously accrued exceptions + fmove.l d0,fpsr +* +* Result is now in FP0 +* + fmovem.x USER_FP1(a6),fp1-fp3 ; note: FP0 not restored + fmove.l USER_FPCR(a6),fpcr ; fpcr restored + unlk a6 + rts + + xdef _OPd_ +_OPd_: + link a6,#-LOCAL_SIZE + fmovem.x fp0-fp3,USER_FP0(a6) + fmove.l fpsr,USER_FPSR(a6) + fmove.l fpcr,USER_FPCR(a6) + fmove.l fpcr,d1 ; user's rounding mode/precision + fmove.l #0,fpcr ; force rounding mode/prec to extended,rn +* +* copy, convert and tag input argument +* + fmove.d 8(a6),fp0 + fmove.x fp0,ETEMP(a6) + lea ETEMP(a6),a0 + bsr tag + move.b d0,STAG(a6) + tst.b d0 + bne.b _TMP_7 + bsr _OPr_ ; normalized (regular) number + bra.b _TMP_B +_TMP_7: + cmp.b #$20,d0 ; zero? + bne.b _TMP_8 + bsr _OPz_ + bra.b _TMP_B +_TMP_8: + cmp.b #$40,d0 ; infinity? + bne.b _TMP_9 + bsr _OPi_ + bra.b _TMP_B +_TMP_9: + cmp.b #$60,d0 ; NaN? + bne.b _TMP_A + bsr _OPn_ + bra.b _TMP_B +_TMP_A: + bsr _OPm_ ; assuming a denorm... + +_TMP_B: + fmove.l fpsr,d0 ; update status register + or.b FPSR_AEXCEPT(a6),d0 ;add previously accrued exceptions + fmove.l d0,fpsr +* +* Result is now in FP0 +* + fmovem.x USER_FP1(a6),fp1-fp3 ; note: FP0 not restored + fmove.l USER_FPCR(a6),fpcr ; fpcr restored + unlk a6 + rts + + xdef _OPx_ +_OPx_: + link a6,#-LOCAL_SIZE + fmovem.x fp0-fp3,USER_FP0(a6) + fmove.l fpsr,USER_FPSR(a6) + fmove.l fpcr,USER_FPCR(a6) + fmove.l fpcr,d1 ; user's rounding mode/precision + fmove.l #0,fpcr ; force rounding mode/prec to extended,rn +* +* copy, convert and tag input argument +* + fmove.x 8(a6),fp0 + fmove.x fp0,ETEMP(a6) + lea ETEMP(a6),a0 + bsr tag + move.b d0,STAG(a6) + tst.b d0 + bne.b _TMP_C + bsr _OPr_ ; normalized (regular) number + bra.b _TMP_G +_TMP_C: + cmp.b #$20,d0 ; zero? + bne.b _TMP_D + bsr _OPz_ + bra.b _TMP_G +_TMP_D: + cmp.b #$40,d0 ; infinity? + bne.b _TMP_E + bsr _OPi_ + bra.b _TMP_G +_TMP_E: + cmp.b #$60,d0 ; NaN? + bne.b _TMP_F + bsr _OPn_ + bra.b _TMP_G +_TMP_F: + bsr _OPm_ ; assuming a denorm... + +_TMP_G: + fmove.l fpsr,d0 ; update status register + or.b FPSR_AEXCEPT(a6),d0 ;add previously accrued exceptions + fmove.l d0,fpsr +* +* Result is now in FP0 +* + fmovem.x USER_FP1(a6),fp1-fp3 ; note: FP0 not restored + fmove.l USER_FPCR(a6),fpcr ; fpcr restored + unlk a6 + rts + |