From 2a594532c35366d1a01dcf94633edae84a2005e6 Mon Sep 17 00:00:00 2001 From: "Dale S. Rahn" Date: Fri, 23 Jul 1999 03:16:28 +0000 Subject: replace the stub ieeefp functions with the real working functions, from NetBSD. --- lib/libc/arch/powerpc/gen/Makefile.inc | 4 ++- lib/libc/arch/powerpc/gen/fp.c | 44 -------------------------- lib/libc/arch/powerpc/gen/fpgetmask.c | 50 ++++++++++++++++++++++++++++++ lib/libc/arch/powerpc/gen/fpgetround.c | 50 ++++++++++++++++++++++++++++++ lib/libc/arch/powerpc/gen/fpgetsticky.c | 50 ++++++++++++++++++++++++++++++ lib/libc/arch/powerpc/gen/fpsetmask.c | 55 +++++++++++++++++++++++++++++++++ lib/libc/arch/powerpc/gen/fpsetround.c | 55 +++++++++++++++++++++++++++++++++ lib/libc/arch/powerpc/gen/fpsetsticky.c | 55 +++++++++++++++++++++++++++++++++ 8 files changed, 318 insertions(+), 45 deletions(-) delete mode 100644 lib/libc/arch/powerpc/gen/fp.c create mode 100644 lib/libc/arch/powerpc/gen/fpgetmask.c create mode 100644 lib/libc/arch/powerpc/gen/fpgetround.c create mode 100644 lib/libc/arch/powerpc/gen/fpgetsticky.c create mode 100644 lib/libc/arch/powerpc/gen/fpsetmask.c create mode 100644 lib/libc/arch/powerpc/gen/fpsetround.c create mode 100644 lib/libc/arch/powerpc/gen/fpsetsticky.c (limited to 'lib/libc') diff --git a/lib/libc/arch/powerpc/gen/Makefile.inc b/lib/libc/arch/powerpc/gen/Makefile.inc index 42c368e74ca..1aeb2065cd4 100644 --- a/lib/libc/arch/powerpc/gen/Makefile.inc +++ b/lib/libc/arch/powerpc/gen/Makefile.inc @@ -1,3 +1,5 @@ SRCS+= isinf.c infinity.c setjmp.S sigsetjmp.S flt_rounds.c modf.c SRCS+= ldexp.c fabs.c frexp.c -SRCS+= fp.c +SRCS+= fpgetmask.c fpsetmask.c +SRCS+= fpgetround.c fpsetround.c +SRCS+= fpgetsticky.c fpsetsticky.c diff --git a/lib/libc/arch/powerpc/gen/fp.c b/lib/libc/arch/powerpc/gen/fp.c deleted file mode 100644 index 4249e864edf..00000000000 --- a/lib/libc/arch/powerpc/gen/fp.c +++ /dev/null @@ -1,44 +0,0 @@ -#if defined(LIBC_SCCS) && !defined(lint) -static char rcsid[] = "$OpenBSD: fp.c,v 1.1 1997/01/02 02:28:58 rahnds Exp $"; -#endif /* LIBC_SCCS and not lint */ - -#include - -fp_except -fpgetmask() -{ - return 0; /* stub --- XXX */ -} - -fp_rnd -fpgetround() -{ - return 0; /* stub --- XXX */ -} - -fp_except -fpsetmask(mask) - fp_except mask; -{ - return 0; /* stub --- XXX */ -} - -fp_rnd -fpsetround(rnd_dir) - fp_rnd rnd_dir; -{ - return 0; /* stub --- XXX */ -} - -fp_except -fpsetsticky(sticky) - fp_except sticky; -{ - return 0; /* stub --- XXX */ -} - -fp_except -fpgetsticky() -{ - return 0; /* stub --- XXX */ -} diff --git a/lib/libc/arch/powerpc/gen/fpgetmask.c b/lib/libc/arch/powerpc/gen/fpgetmask.c new file mode 100644 index 00000000000..f5db7ce5a85 --- /dev/null +++ b/lib/libc/arch/powerpc/gen/fpgetmask.c @@ -0,0 +1,50 @@ +/* $OpenBSD: fpgetmask.c,v 1.1 1999/07/23 03:16:27 rahnds Exp $ */ +/* $NetBSD: fpgetmask.c,v 1.1 1999/07/07 01:55:07 danw Exp $ */ + +/* + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Dan Winship. + * + * 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 NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include +#include + +fp_except +fpgetmask() +{ + u_int64_t fpscr; + + __asm__ __volatile("mffs %0" : "=f"(fpscr)); + return ((fpscr >> 3) & 0x1f); +} diff --git a/lib/libc/arch/powerpc/gen/fpgetround.c b/lib/libc/arch/powerpc/gen/fpgetround.c new file mode 100644 index 00000000000..a2655568e23 --- /dev/null +++ b/lib/libc/arch/powerpc/gen/fpgetround.c @@ -0,0 +1,50 @@ +/* $OpenBSD: fpgetround.c,v 1.1 1999/07/23 03:16:27 rahnds Exp $ */ +/* $NetBSD: fpgetround.c,v 1.1 1999/07/07 01:55:08 danw Exp $ */ + +/* + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Dan Winship. + * + * 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 NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include +#include + +fp_rnd +fpgetround() +{ + u_int64_t fpscr; + + __asm__ __volatile("mffs %0" : "=f"(fpscr)); + return (fpscr & 0x3); +} diff --git a/lib/libc/arch/powerpc/gen/fpgetsticky.c b/lib/libc/arch/powerpc/gen/fpgetsticky.c new file mode 100644 index 00000000000..888cf093aa8 --- /dev/null +++ b/lib/libc/arch/powerpc/gen/fpgetsticky.c @@ -0,0 +1,50 @@ +/* $OpenBSD: fpgetsticky.c,v 1.1 1999/07/23 03:16:27 rahnds Exp $ */ +/* $NetBSD: fpgetsticky.c,v 1.1 1999/07/07 01:55:08 danw Exp $ */ + +/* + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Dan Winship. + * + * 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 NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include +#include + +fp_except +fpgetsticky() +{ + u_int64_t fpscr; + + __asm__ __volatile("mffs %0" : "=f"(fpscr)); + return ((fpscr >> 25) & 0x1f); +} diff --git a/lib/libc/arch/powerpc/gen/fpsetmask.c b/lib/libc/arch/powerpc/gen/fpsetmask.c new file mode 100644 index 00000000000..76329b1da31 --- /dev/null +++ b/lib/libc/arch/powerpc/gen/fpsetmask.c @@ -0,0 +1,55 @@ +/* $OpenBSD: fpsetmask.c,v 1.1 1999/07/23 03:16:27 rahnds Exp $ */ +/* $NetBSD: fpsetmask.c,v 1.1 1999/07/07 01:55:08 danw Exp $ */ + +/* + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Dan Winship. + * + * 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 NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include +#include + +fp_except +fpsetmask(mask) + fp_except mask; +{ + u_int64_t fpscr; + fp_rnd old; + + __asm__ __volatile("mffs %0" : "=f"(fpscr)); + old = (fpscr >> 3) & 0x1f; + fpscr = (fpscr & 0xffffff07) | (mask << 3); + __asm__ __volatile("mtfsf 0xff,%0" :: "f"(fpscr)); + return (old); +} diff --git a/lib/libc/arch/powerpc/gen/fpsetround.c b/lib/libc/arch/powerpc/gen/fpsetround.c new file mode 100644 index 00000000000..b75688a15d3 --- /dev/null +++ b/lib/libc/arch/powerpc/gen/fpsetround.c @@ -0,0 +1,55 @@ +/* $OpenBSD: fpsetround.c,v 1.1 1999/07/23 03:16:27 rahnds Exp $ */ +/* $NetBSD: fpsetround.c,v 1.1 1999/07/07 01:55:08 danw Exp $ */ + +/* + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Dan Winship. + * + * 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 NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include +#include + +fp_rnd +fpsetround(rnd_dir) + fp_rnd rnd_dir; +{ + u_int64_t fpscr; + fp_rnd old; + + __asm__ __volatile("mffs %0" : "=f"(fpscr)); + old = fpscr & 0x3; + fpscr = (fpscr & 0xfffffffc) | rnd_dir; + __asm__ __volatile("mtfsf 0xff,%0" :: "f"(fpscr)); + return (old); +} diff --git a/lib/libc/arch/powerpc/gen/fpsetsticky.c b/lib/libc/arch/powerpc/gen/fpsetsticky.c new file mode 100644 index 00000000000..54b5530fcae --- /dev/null +++ b/lib/libc/arch/powerpc/gen/fpsetsticky.c @@ -0,0 +1,55 @@ +/* $OpenBSD: fpsetsticky.c,v 1.1 1999/07/23 03:16:27 rahnds Exp $ */ +/* $NetBSD: fpsetsticky.c,v 1.1 1999/07/07 01:55:08 danw Exp $ */ + +/* + * Copyright (c) 1999 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Dan Winship. + * + * 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 NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#include +#include + +fp_except +fpsetsticky(mask) + fp_except mask; +{ + u_int64_t fpscr; + fp_rnd old; + + __asm__ __volatile("mffs %0" : "=f"(fpscr)); + old = (fpscr >> 25) & 0x1f; + fpscr = (fpscr & 0xc1ffffff) | (mask << 25); + __asm__ __volatile("mtfsf 0xff,%0" :: "f"(fpscr)); + return (old); +} -- cgit v1.2.3