date and time created 92/06/25 06:16:58 by torek
authorChris Torek <torek@ucbvax.Berkeley.EDU>
Thu, 25 Jun 1992 21:16:58 +0000 (13:16 -0800)
committerChris Torek <torek@ucbvax.Berkeley.EDU>
Thu, 25 Jun 1992 21:16:58 +0000 (13:16 -0800)
SCCS-vsn: lib/libc/sparc/gen/Makefile.inc 5.1
SCCS-vsn: lib/libc/sparc/gen/_setjmp.s 5.1
SCCS-vsn: lib/libc/sparc/gen/fabs.s 5.1

usr/src/lib/libc/sparc/gen/Makefile.inc [new file with mode: 0644]
usr/src/lib/libc/sparc/gen/_setjmp.s [new file with mode: 0644]
usr/src/lib/libc/sparc/gen/fabs.s [new file with mode: 0644]

diff --git a/usr/src/lib/libc/sparc/gen/Makefile.inc b/usr/src/lib/libc/sparc/gen/Makefile.inc
new file mode 100644 (file)
index 0000000..7b0538e
--- /dev/null
@@ -0,0 +1,31 @@
+#      @(#)Makefile.inc        5.1 (Berkeley) %G%
+
+# machine-dependent gen sources
+SRCS+= _setjmp.s fabs.s fixunsdfsi.s main.s modf.s mul.s saveregs.s \
+       setjmp.s umul.s
+SRCS+= frexp.c isinf.c isnan.c ldexp.c
+
+# `source' files built from m4 source
+# the name `div.o' is taken for the ANSI C `div' function, hence sdiv here
+SRCS+= sdiv.s udiv.s rem.s urem.s
+CLEANFILES+=sdiv.s udiv.s rem.s urem.s
+
+sdiv.s: divrem.m4
+       @echo 'building ${.TARGET} from ${.ALLSRC}'
+       @(echo "define(NAME,\`.div')define(OP,\`div')define(S,\`true')"; \
+        cat ${.ALLSRC}) | m4 > ${.TARGET}
+
+udiv.s: divrem.m4
+       @echo 'building ${.TARGET} from ${.ALLSRC}'
+       @(echo "define(NAME,\`.udiv')define(OP,\`div')define(S,\`false')"; \
+        cat ${.ALLSRC}) | m4 > ${.TARGET}
+
+rem.s: divrem.m4
+       @echo 'building ${.TARGET} from ${.ALLSRC}'
+       @(echo "define(NAME,\`.rem')define(OP,\`rem')define(S,\`true')"; \
+        cat ${.ALLSRC}) | m4 > ${.TARGET}
+
+urem.s: divrem.m4
+       @echo 'building ${.TARGET} from ${.ALLSRC}'
+       @(echo "define(NAME,\`.urem')define(OP,\`rem')define(S,\`false')"; \
+        cat ${.ALLSRC}) | m4 > ${.TARGET}
diff --git a/usr/src/lib/libc/sparc/gen/_setjmp.s b/usr/src/lib/libc/sparc/gen/_setjmp.s
new file mode 100644 (file)
index 0000000..c978969
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 1992 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This software was developed by the Computer Systems Engineering group
+ * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
+ * contributed to Berkeley.
+ *
+ * %sccs.include.redist.c%
+ *
+ * from: $Header: _setjmp.s,v 1.1 91/07/06 16:45:53 torek Exp $
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+       .asciz "@(#)_setjmp.s   5.1 (Berkeley) %G%"
+#endif /* LIBC_SCCS and not lint */
+
+/*
+ * C library -- _setjmp, _longjmp
+ *
+ *     _longjmp(a,v)
+ * will generate a "return(v?v:1)" from
+ * the last call to
+ *     _setjmp(a)
+ * by unwinding the call stack.
+ * The previous signal state is NOT restored.
+ */
+
+#include "DEFS.h"
+
+ENTRY(_setjmp)
+       std     %sp, [%o0+0]    /* caller's stack pointer and return pc */
+       st      %fp, [%o0+8]    /* store caller's frame pointer */
+       retl
+        clr    %o0             ! return 0
+
+ENTRY(_longjmp)
+       addcc   %o1, %g0, %g6   ! compute v ? v : 1 in a global register
+       be,a    0f
+        mov    1, %g6
+0:
+       mov     %o0, %g1        ! save a in another global register
+       ld      [%g1+8], %g7    /* get caller's frame */
+1:
+       cmp     %fp, %g7        ! compare against desired frame
+       bl,a    1b              ! if below,
+        restore                !    pop frame and loop
+       be,a    2f              ! if there,
+        ldd    [%g1+0], %o2    !    fetch return %sp and pc, and get out
+
+Lbotch:
+       call    _longjmperror   ! otherwise, went too far; bomb out
+       nop
+       unimp   0
+
+2:
+       cmp     %o2, %sp        ! %sp must not decrease
+       bge,a   3f
+        mov    %o2, %sp        ! it is OK, put it in place
+       b,a     Lbotch
+3:
+       jmp     %o3 + 8         ! success, return %g6
+        mov    %g6, %o0
diff --git a/usr/src/lib/libc/sparc/gen/fabs.s b/usr/src/lib/libc/sparc/gen/fabs.s
new file mode 100644 (file)
index 0000000..826255c
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 1992 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This software was developed by the Computer Systems Engineering group
+ * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
+ * contributed to Berkeley.
+ *
+ * %sccs.include.redist.c%
+ *
+ * from: $Header: fabs.s,v 1.4 91/10/07 23:59:05 torek Exp $
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+       .asciz "@(#)fabs.s      5.1 (Berkeley) %G%"
+#endif /* LIBC_SCCS and not lint */
+
+/* fabs - floating absolute value */
+
+#include "DEFS.h"
+
+ENTRY(fabs)
+       std     %o0, [%sp + 32]         ! return value => %f0:f1
+       ldd     [%sp + 32], %f0         ! (via kernel %o0/%o1 slot)
+       retl
+        fabss  %f0, %f0                ! return absolute value