summaryrefslogtreecommitdiff
path: root/sys/arch/m68k/fpsp/MONADIC.GCC
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-18 08:53:40 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1995-10-18 08:53:40 +0000
commitd6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch)
treeece253b876159b39c620e62b6c9b1174642e070e /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.GCC203
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
+