Index: head/lib/libc/sparc64/gen/_setjmp.S =================================================================== --- head/lib/libc/sparc64/gen/_setjmp.S (revision 99017) +++ head/lib/libc/sparc64/gen/_setjmp.S (revision 99018) @@ -1,105 +1,99 @@ /* * Copyright (c) 1992, 1993 * 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. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * from: Header: _setjmp.s,v 1.1 91/07/06 16:45:53 torek Exp */ #if defined(LIBC_SCCS) && !defined(lint) -#if 0 .asciz "@(#)_setjmp.s 8.1 (Berkeley) 6/4/93" -#else +#if 0 RCSID("$NetBSD: _setjmp.S,v 1.4 1998/10/08 02:27:59 eeh Exp $") #endif #endif /* LIBC_SCCS and not lint */ - -#if defined(SYSLIBC_RCS) && !defined(lint) - .text - .asciz "$FreeBSD$" -#endif /* SYSLIBC_RCS and not lint */ - #include +__FBSDID("$FreeBSD$"); #include "assym.s" .register %g2,#ignore .register %g3,#ignore /* * 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. */ ENTRY(_setjmp) stx %sp, [%o0 + _JB_SP] stx %o7, [%o0 + _JB_PC] stx %fp, [%o0 + _JB_FP] retl clr %o0 END(_setjmp) ENTRY(_longjmp) mov 1, %g1 movrnz %o1, %o1, %g1 ! compute v ? v : 1 mov %o0, %g2 ldx [%g2 + _JB_FP], %g3 ! fetch callers frame 1: cmp %fp, %g3 ! compare against desired frame bl,a 1b ! if below, restore ! pop frame and loop be,a 2f ! if there, ldx [%g2 + _JB_SP], %o0 ! fetch return %sp .Lbotch: call CNAME(longjmperror) nop call CNAME(abort) nop illtrap 2: cmp %o0, %sp ! %sp must not decrease bge,a 3f mov %o0, %sp ! it is OK, put it in place b,a .Lbotch nop 3: ldx [%g2 + _JB_PC], %o7 ! fetch return address retl mov %g1, %o0 ! return v ? v : 1; END(_longjmp) Index: head/lib/libc/sparc64/gen/fixunsdfsi.S =================================================================== --- head/lib/libc/sparc64/gen/fixunsdfsi.S (revision 99017) +++ head/lib/libc/sparc64/gen/fixunsdfsi.S (revision 99018) @@ -1,102 +1,97 @@ /* * Copyright (c) 1992, 1993 * 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. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * from: Header: fixunsdfsi.s,v 1.3 91/10/08 00:03:15 torek Exp */ #include #if defined(LIBC_SCCS) && !defined(lint) -#if 0 .asciz "@(#)fixunsdfsi.s 8.1 (Berkeley) 6/4/93" -#else +#if 0 RCSID("$NetBSD: fixunsdfsi.S,v 1.3 2000/07/25 04:26:12 mycroft Exp $") #endif #endif /* LIBC_SCCS and not lint */ - -#if defined(SYSLIBC_RCS) && !defined(lint) - .text - .asciz "$FreeBSD$" -#endif /* SYSLIBC_RCS and not lint */ +__FBSDID("$FreeBSD$"); /* * Convert double to unsigned integer (for gcc). * * I have made the output for NaN agree with the Sun compiler, not * that it really matters, by using `fbul,a'. */ .align 8 .Lbig: .word 0x43e00000 ! .double 2^63 .word 0 ! (who me, not trust the assembler?) /* * Same as above but to unsigned long */ ENTRY(__dtoul) PIC_PROLOGUE(%o4, %o5) sub %sp, 16, %sp std %f2, [%sp + CCFSZ + SPOFF + 8] SET(.Lbig, %o5, %o3) ldd [%o3], %f2 fcmped %f0, %f2 ! d < 2^63, or NaN, or -Inf? fbul,a 1f ! if so, use fdtox to convert to long fdtox %f0, %f0 ! (this includes negatives!) ! d does not fit in a long, so subtract 2^63, convert, ! and add 2^63 again (sigh). Just hope the intermediate ! fits (if not, the result is undefined anyway). fsubd %f0, %f2, %f0 ! d -= 2^63 fdtox %f0, %f0 ! convert to long std %f0, [%sp + CCFSZ + SPOFF] ! move into return reg ldx [%sp + CCFSZ + SPOFF], %o0 sethi %hi(0x80000000), %o1 sllx %o1, 32, %o1 add %o0, %o1, %o0 ! add 2^63 ldd [%sp + CCFSZ + SPOFF + 8], %f2 retl add %sp, 16, %sp 1: std %f0, [%sp + CCFSZ + SPOFF] ! return result ldx [%sp + CCFSZ + SPOFF], %o0 ldd [%sp + CCFSZ + SPOFF + 8], %f2 retl add %sp, 16, %sp END(__dtoul) Index: head/lib/libc/sparc64/gen/modf.S =================================================================== --- head/lib/libc/sparc64/gen/modf.S (revision 99017) +++ head/lib/libc/sparc64/gen/modf.S (revision 99018) @@ -1,187 +1,181 @@ /* * Copyright (c) 1992, 1993 * 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. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * from: Header: modf.s,v 1.3 92/06/20 00:00:54 torek Exp */ #if defined(LIBC_SCCS) && !defined(lint) -#if 0 .asciz "@(#)modf.s 8.1 (Berkeley) 6/4/93" -#else +#if 0 .asciz "$NetBSD: modf.S,v 1.2 2000/07/23 07:12:22 eeh Exp $" #endif #endif /* LIBC_SCCS and not lint */ - -#if defined(SYSLIBC_RCS) && !defined(lint) - .text - .asciz "$FreeBSD$" -#endif /* SYSLIBC_RCS and not lint */ - #include +__FBSDID("$FreeBSD$"); #include "assym.s" /* * double modf(double val, double *iptr) * * Returns the fractional part of `val', storing the integer part of * `val' in *iptr. Both *iptr and the return value have the same sign * as `val'. * * Method: * * We use the fpu's normalization hardware to compute the integer portion * of the double precision argument. Sun IEEE double precision numbers * have 52 bits of mantissa, 11 bits of exponent, and one bit of sign, * with the sign occupying bit 31 of word 0, and the exponent bits 30:20 * of word 0. Thus, values >= 2^52 are by definition integers. * * If we take a value that is in the range [+0..2^52) and add 2^52, all * of the fractional bits fall out and all of the integer bits are summed * with 2^52. If we then subtract 2^52, we get those integer bits back. * This must be done with rounding set to `towards 0' or `towards -inf'. * `Toward -inf' fails when the value is 0 (we get -0 back).... * * Note that this method will work anywhere, but is machine dependent in * various aspects. * * Stack usage: * 4@[%fp + SPOFF - 4] saved %fsr * 4@[%fp + SPOFF - 8] new %fsr with rounding set to `towards 0' * 8@[%fp + SPOFF - 16] space for moving between %i and %f registers * Register usage: * %f0:f1 double val; * %l0 scratch * %l1 sign bit (0x80000000) * %i1 double *iptr; * %f2:f3 `magic number' 2^52, in fpu registers * %f4:f5 double v, in fpu registers * %f6:f7 double temp. */ .align 8 .Lmagic: .word 0x43300000 ! sign = 0, exponent = 52 + 1023, mantissa = 0 .word 0 ! (i.e., .double 0r4503599627370496e+00) .L0: .word 0 ! 0.0 .word 0 ENTRY(modf) save %sp, -CCFSZ - 16, %sp PIC_PROLOGUE(%l6, %l7) /* * First, compute v = abs(val) */ fabsd %f0, %f4 ! %f4:f5 = v fcmped %fcc1, %f0, %f4 ! %fcc1 = (val == abs(val)) SET(.Lmagic, %l7, %l0) ldd [%l0], %f2 /* * Is %f4:f5 >= %f2:f3 ? If so, it is all integer bits. * It is probably less, though. */ fcmped %f4, %f2 fbuge .Lbig ! if >= (or unordered), go out nop /* * v < 2^52, so add 2^52, then subtract 2^52, but do it all * with rounding set towards zero. We leave any enabled * traps enabled, but change the rounding mode. This might * not be so good. Oh well.... */ st %fsr, [%fp + SPOFF - 4] ! %l5 = current FSR mode set FSR_RD_MASK, %l3 ! %l3 = rounding direction mask ld [%fp + SPOFF - 4], %l5 set FSR_RD_RD_Z, %l4 andn %l5, %l3, %l6 or %l6, %l4, %l6 ! round towards zero, please and %l5, %l3, %l5 ! save original rounding mode st %l6, [%fp + SPOFF - 8] ld [%fp + SPOFF - 8], %fsr faddd %f4, %f2, %f4 ! %f4:f5 += 2^52 fsubd %f4, %f2, %f4 ! %f4:f5 -= 2^52 /* * Restore %fsr, but leave exceptions accrued. */ st %fsr, [%fp + SPOFF - 4] ld [%fp + SPOFF - 4], %l6 andn %l6, %l3, %l6 ! %l6 = %fsr & ~FSR_RD_MASK; or %l5, %l6, %l5 ! %l5 |= %l6; st %l5, [%fp + SPOFF - 4] ld [%fp + SPOFF - 4], %fsr ! restore %fsr, leaving accrued stuff /* * Now insert the original sign in %f4:f5. * %fcc1 should still have the results of (val == abs(val)) * from above, so we use a conditional move on %fcc1 to: * * %f4 = (val == abs(val)) ? %f4 : -%f4 * */ fnegd %f4, %f6 fmovdnz %fcc1, %f6, %f4 1: /* * The value in %f4:f5 is now the integer portion of the original * argument. We need to store this in *ival (%i1), subtract it * from the original value argument (%d0), and return the result. */ std %f4, [%i1] ! *ival = %f4:f5; fsubd %f0, %f4, %f0 ! %f0:f1 -= %f4:f5; ret restore .Lbig: /* * We get here if the original comparison of %f4:f5 (v) to * %f2:f3 (2^52) came out `greater or unordered'. In this * case the integer part is the original value, and the * fractional part is 0. */ SET(.L0, %l7, %l0) std %f0, [%i1] ! *ival = val; ldd [%l0], %f0 ! return 0.0; ret restore END(modf) Index: head/lib/libc/sparc64/gen/setjmp.S =================================================================== --- head/lib/libc/sparc64/gen/setjmp.S (revision 99017) +++ head/lib/libc/sparc64/gen/setjmp.S (revision 99018) @@ -1,118 +1,112 @@ /* * Copyright (c) 1992, 1993 * 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. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * from: Header: _setjmp.s,v 1.1 91/07/06 16:45:53 torek Exp */ #if defined(LIBC_SCCS) && !defined(lint) -#if 0 .asciz "@(#)_setjmp.s 8.1 (Berkeley) 6/4/93" -#else +#if 0 RCSID("$NetBSD: _setjmp.S,v 1.4 1998/10/08 02:27:59 eeh Exp $") #endif #endif /* LIBC_SCCS and not lint */ - -#if defined(SYSLIBC_RCS) && !defined(lint) - .text - .asciz "$FreeBSD$" -#endif /* SYSLIBC_RCS and not lint */ - #include +__FBSDID("$FreeBSD$"); #include "assym.s" .register %g2,#ignore .register %g3,#ignore /* * C library -- setjmp, longjmp * * longjmp(a,v) * will generate a "return(v?v:1)" from * the last call to * setjmp(a) * by restoring the previous context. */ ENTRY(setjmp) save %sp, -CCFSZ, %sp mov SIG_BLOCK, %o0 clr %o1 call CNAME(sigprocmask) add %i0, _JB_SIGMASK, %o2 restore stx %sp, [%o0 + _JB_SP] stx %o7, [%o0 + _JB_PC] stx %fp, [%o0 + _JB_FP] retl clr %o0 END(setjmp) .weak CNAME(longjmp) .set CNAME(longjmp),CNAME(__longjmp) ENTRY(__longjmp) save %sp, -CCFSZ, %sp mov SIG_SETMASK, %o0 add %i0, _JB_SIGMASK, %o1 call CNAME(sigprocmask) clr %o2 restore mov 1, %g1 movrnz %o1, %o1, %g1 mov %o0, %g2 ldx [%g2 + _JB_FP], %g3 1: cmp %fp, %g3 bl,a 1b restore be,a 2f ldx [%g2 + _JB_SP], %o0 .Lbotch: call CNAME(longjmperror) nop call CNAME(abort) nop illtrap 2: cmp %o0, %sp bge,a 3f mov %o0, %sp b,a .Lbotch nop 3: ldx [%g2 + _JB_PC], %o7 retl mov %g1, %o0 END(__longjmp) Index: head/lib/libc/sparc64/gen/sigsetjmp.S =================================================================== --- head/lib/libc/sparc64/gen/sigsetjmp.S (revision 99017) +++ head/lib/libc/sparc64/gen/sigsetjmp.S (revision 99018) @@ -1,58 +1,54 @@ /* * Copyright (c) 1995 Paul Kranenburg * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by Paul Kranenburg. * 4. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ -#if defined(SYSLIBC_RCS) && !defined(lint) - .text - .asciz "$FreeBSD$" -#endif /* SYSLIBC_RCS and not lint */ - #include +__FBSDID("$FreeBSD$"); #include "assym.s" ENTRY(sigsetjmp) PIC_PROLOGUE(%o3, %o2) SET(CNAME(setjmp), %o2, %o3) SET(CNAME(_setjmp), %o2, %o4) movrnz %o1, %o3, %o4 jmp %o4 stx %o1, [%o0 + _JB_SIGFLAG] END(sigsetjmp) ENTRY(siglongjmp) PIC_PROLOGUE(%o3, %o2) SET(CNAME(longjmp), %o2, %o3) SET(CNAME(_longjmp), %o2, %o4) ldx [%o0 + _JB_SIGFLAG], %o2 movrnz %o2, %o3, %o4 jmp %o4 nop END(siglongjmp)