From 5fbef188648f5150617e0a14f1011e600f1b3a0f Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sun, 16 Jun 1996 03:49:40 +0000 Subject: * hurd/Makefile (routines): Add get-host, set-host. (distribute): Add hurdhost.h. * hurd/hurdhost.h: New file. * sysdeps/mach/hurd/gethostname.c: Use _hurd_get_host_config. * sysdeps/mach/hurd/gethostid.c: Likewise. * sysdeps/mach/hurd/sethostname.c: Use _hurd_set_host_config. * sysdeps/mach/hurd/sethostid.c: Likewise. * hurd/get-host.c: New file. * hurd/set-host.c: New file. * math/Makefile (headers): Add fpu_control.h. (aux): New variable, list fpu_control and setfpucw. * sysdeps/generic/fpu_control.c: New file. * sysdeps/stub/fpu_control.h: New file. * sysdeps/unix/sysv/linux/m68k/fpu_control.h: Moved to ... * sysdeps/m68k/fpu_control.h: here. * sysdeps/unix/sysv/linux/i386/fpu_control.h: Moved to ... * sysdeps/i386/fpu_control.h: here. * sysdeps/unix/sysv/linux/alpha/fpu_control.h: Moved to ... * sysdeps/alpha/fpu/fpu_control.h: here. Fixed copyright. * sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_routines): Remove setfpucw, fpu_control. * sysdeps/unix/sysv/linux/alpha/fpu_control.c: File removed. * sysdeps/unix/sysv/linux/setfpucw.c: Moved to ... * sysdeps/generic/setfpucw.c: here. (__fpu_control): Variable removed. (__setfpucw): Use SET even if zero. --- ChangeLog | 28 +++++++ hurd/Makefile | 4 +- hurd/get-host.c | 57 ++++++++++++++ hurd/hurdhost.h | 28 +++++++ hurd/set-host.c | 48 ++++++++++++ math/Makefile | 4 +- sysdeps/alpha/fpu/fpu_control.h | 113 ++++++++++++++++++++++++++++ sysdeps/generic/fpu_control.c | 24 ++++++ sysdeps/generic/setfpucw.c | 33 ++++++++ sysdeps/i386/fpu_control.h | 105 ++++++++++++++++++++++++++ sysdeps/m68k/fpu_control.h | 108 ++++++++++++++++++++++++++ sysdeps/mach/hurd/gethostid.c | 16 ++-- sysdeps/mach/hurd/gethostname.c | 23 ++---- sysdeps/mach/hurd/sethostid.c | 19 ++++- sysdeps/mach/hurd/sethostname.c | 12 ++- sysdeps/stub/fpu_control.h | 46 +++++++++++ sysdeps/unix/sysv/linux/alpha/Makefile | 4 +- sysdeps/unix/sysv/linux/alpha/fpu_control.c | 21 ------ sysdeps/unix/sysv/linux/alpha/fpu_control.h | 105 -------------------------- sysdeps/unix/sysv/linux/i386/fpu_control.h | 104 ------------------------- sysdeps/unix/sysv/linux/m68k/fpu_control.h | 108 -------------------------- sysdeps/unix/sysv/linux/setfpucw.c | 37 --------- 22 files changed, 632 insertions(+), 415 deletions(-) create mode 100644 hurd/get-host.c create mode 100644 hurd/hurdhost.h create mode 100644 hurd/set-host.c create mode 100644 sysdeps/alpha/fpu/fpu_control.h create mode 100644 sysdeps/generic/fpu_control.c create mode 100644 sysdeps/generic/setfpucw.c create mode 100644 sysdeps/i386/fpu_control.h create mode 100644 sysdeps/m68k/fpu_control.h create mode 100644 sysdeps/stub/fpu_control.h delete mode 100644 sysdeps/unix/sysv/linux/alpha/fpu_control.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/fpu_control.h delete mode 100644 sysdeps/unix/sysv/linux/i386/fpu_control.h delete mode 100644 sysdeps/unix/sysv/linux/m68k/fpu_control.h delete mode 100644 sysdeps/unix/sysv/linux/setfpucw.c diff --git a/ChangeLog b/ChangeLog index 69eb550ebe..5929b2f59e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,33 @@ Sat Jun 15 18:13:43 1996 Roland McGrath + * hurd/Makefile (routines): Add get-host, set-host. + (distribute): Add hurdhost.h. + * hurd/hurdhost.h: New file. + * sysdeps/mach/hurd/gethostname.c: Use _hurd_get_host_config. + * sysdeps/mach/hurd/gethostid.c: Likewise. + * sysdeps/mach/hurd/sethostname.c: Use _hurd_set_host_config. + * sysdeps/mach/hurd/sethostid.c: Likewise. + * hurd/get-host.c: New file. + * hurd/set-host.c: New file. + + * math/Makefile (headers): Add fpu_control.h. + (aux): New variable, list fpu_control and setfpucw. + * sysdeps/generic/fpu_control.c: New file. + * sysdeps/stub/fpu_control.h: New file. + * sysdeps/unix/sysv/linux/m68k/fpu_control.h: Moved to ... + * sysdeps/m68k/fpu_control.h: here. + * sysdeps/unix/sysv/linux/i386/fpu_control.h: Moved to ... + * sysdeps/i386/fpu_control.h: here. + * sysdeps/unix/sysv/linux/alpha/fpu_control.h: Moved to ... + * sysdeps/alpha/fpu/fpu_control.h: here. Fixed copyright. + * sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_routines): Remove + setfpucw, fpu_control. + * sysdeps/unix/sysv/linux/alpha/fpu_control.c: File removed. + * sysdeps/unix/sysv/linux/setfpucw.c: Moved to ... + * sysdeps/generic/setfpucw.c: here. + (__fpu_control): Variable removed. + (__setfpucw): Use SET even if zero. + * elf/dl-deps.c (_dl_map_object_deps): Set MAP's mark bit before loop. Set mark bits of deps as opened, instead of as scanned. diff --git a/hurd/Makefile b/hurd/Makefile index 4f1f22c7c8..1484ad5a06 100644 --- a/hurd/Makefile +++ b/hurd/Makefile @@ -40,6 +40,7 @@ server-interfaces := hurd/msg faultexc routines = hurdstartup hurdinit \ hurdid hurdlookup hurdpid hurdrlimit hurdprio hurdexec \ + get-host set-host \ path-lookup \ setauth \ pid2task task2pid \ @@ -57,7 +58,8 @@ sig = hurdsig hurdfault siginfo hurd-raise preempt-sig \ dtable = dtable port2fd new-fd alloc-fd intern-fd \ getdport openport \ fd-close fd-read fd-write hurdioctl ctty-input ctty-output -distribute = hurdstartup.h hurdfault.h faultexc.defs intr-rpc.defs intr-rpc.h +distribute = hurdstartup.h hurdfault.h hurdhost.h \ + faultexc.defs intr-rpc.defs intr-rpc.h # XXX this is a temporary hack; see hurdmalloc.h routines += hurdmalloc diff --git a/hurd/get-host.c b/hurd/get-host.c new file mode 100644 index 0000000000..231ee59d88 --- /dev/null +++ b/hurd/get-host.c @@ -0,0 +1,57 @@ +/* Get a host configuration item kept as the whole contents of a file. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include +#include "hurdhost.h" + +ssize_t +_hurd_get_host_config (const char *item, char *buf, size_t buflen) +{ + error_t err; + char *data; + mach_msg_type_number_t nread, more; + file_t config = __file_name_lookup (item, O_RDONLY, 0); + if (config == MACH_PORT_NULL) + return -1; + + data = buf; + err = __io_read (config, &data, &nread, -1, buflen); + if (! err) + /* Check if there is more in the file we didn't read. */ + err = __io_readable (config, &more); + __mach_port_deallocate (__mach_task_self (), config); + if (err) + return __hurd_fail (err); + if (data != buf) + { + memcpy (buf, data, nread); + __vm_deallocate (__mach_task_self (), (vm_address_t) data, nread); + } + + /* Remove newlines in case someone wrote the file by hand. */ + while (buf[nread - 1] == '\n') + buf[--nread] = '\0'; + + if (more) + /* If we didn't read the whole file, tell the caller to use a bigger + buffer next time. */ + return __hurd_fail (ENAMETOOLONG); + + return nread; +} diff --git a/hurd/hurdhost.h b/hurd/hurdhost.h new file mode 100644 index 0000000000..7a826ebbbd --- /dev/null +++ b/hurd/hurdhost.h @@ -0,0 +1,28 @@ +/* Host configuration items kept as the whole contents of a file. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +/* Fetch and atomically store the contents of the file ITEM. + Returns the size read or written, or -1 for errors. + If BUFLEN is not big enough to contain the whole contents, + BUFLEN bytes of BUF are filled in and we fail with ENAMETOOLONG. */ + +ssize_t _hurd_get_host_config (const char *item, + char *buf, size_t buflen); +ssize_t _hurd_set_host_config (const char *item, + const char *value, size_t valuelen); diff --git a/hurd/set-host.c b/hurd/set-host.c new file mode 100644 index 0000000000..e9af697226 --- /dev/null +++ b/hurd/set-host.c @@ -0,0 +1,48 @@ +/* Set a host configuration item kept as the whole contents of a file. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include +#include "hurdhost.h" + +ssize_t +_hurd_set_host_config (const char *item, const char *value, size_t valuelen) +{ + error_t err; + mach_msg_type_number_t nwrote; + file_t new, dir; + + dir = __file_name_split (item, &item); + if (dir == MACH_PORT_NULL) + return -1; + + /* Create a new node. */ + err = __dir_mkfile (dir, O_CREAT|O_TRUNC, 0600, &new); + if (! err) + { + /* Write the contents. */ + err = __io_write (new, value, valuelen, 0, &nwrote); + if (! err) + /* Atomically link the new node onto the name. */ + err = __dir_link (dir, item, 0); + __mach_port_deallocate (__mach_task_self (), new); + } + __mach_port_deallocate (__mach_task_self (), dir); + + return nread; +} diff --git a/math/Makefile b/math/Makefile index beaa26912a..65302911c4 100644 --- a/math/Makefile +++ b/math/Makefile @@ -21,11 +21,13 @@ subdir := math # Installed header files. -headers := math.h mathcalls.h __math.h huge_val.h nan.h +headers := math.h mathcalls.h __math.h huge_val.h nan.h fpu_control.h # Internal header files. distribute := math_private.h machine/asm.h machine/endian.h +# FPU support code. +aux := fpu_control setfpucw # Build the -lm library. diff --git a/sysdeps/alpha/fpu/fpu_control.h b/sysdeps/alpha/fpu/fpu_control.h new file mode 100644 index 0000000000..219ea55f24 --- /dev/null +++ b/sysdeps/alpha/fpu/fpu_control.h @@ -0,0 +1,113 @@ +/* FPU control word bits. Alpha version. +Copyright (C) 1996 Free Software Foundation, Inc. +Contributed by Olaf Flebbe. + +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#ifndef _ALPHA_FPU_CONTROL_H +#define _ALPHA_FPU_CONTROL_H + +/* + * Since many programs seem to hardcode the values passed to __setfpucw() + * (rather than using the manifest constants) we emulate the x87 interface + * here (at least where this makes sense). + * + * 15-13 12 11-10 9-8 7-6 5 4 3 2 1 0 + * | reserved | IC | RC | PC | reserved | PM | UM | OM | ZM | DM | IM + * + * IM: Invalid operation mask + * DM: Denormalized operand mask + * ZM: Zero-divide mask + * OM: Overflow mask + * UM: Underflow mask + * PM: Precision (inexact result) mask + * + * Mask bit is 1 means no interrupt. + * + * PC: Precision control + * 11 - round to extended precision + * 10 - round to double precision + * 00 - round to single precision + * + * RC: Rounding control + * 00 - rounding to nearest + * 01 - rounding down (toward - infinity) + * 10 - rounding up (toward + infinity) + * 11 - rounding toward zero + * + * IC: Infinity control + * That is for 8087 and 80287 only. + * + * The hardware default is 0x037f. I choose 0x1372. + */ + +#include + +/* masking of interrupts */ +#define _FPU_MASK_IM 0x01 +#define _FPU_MASK_DM 0x02 +#define _FPU_MASK_ZM 0x04 +#define _FPU_MASK_OM 0x08 +#define _FPU_MASK_UM 0x10 +#define _FPU_MASK_PM 0x20 + +/* precision control */ +#define _FPU_EXTENDED 0x300 /* RECOMMENDED */ +#define _FPU_DOUBLE 0x200 +#define _FPU_SINGLE 0x0 /* DO NOT USE */ + +/* + * rounding control---notice that on the Alpha this affects only + * instructions with the dynamic rounding mode qualifier (/d). + */ +#define _FPU_RC_NEAREST 0x000 /* RECOMMENDED */ +#define _FPU_RC_DOWN 0x400 +#define _FPU_RC_UP 0x800 +#define _FPU_RC_ZERO 0xC00 + +#define _FPU_RESERVED 0xF0C0 /* Reserved bits in cw */ + + +/* Now two recommended cw */ + +/* Linux default: + - extended precision + - rounding to positive infinity. There is no /p instruction + qualifier. By setting the dynamic rounding mode to +infinity, + one can use /d to get round to +infinity with no extra overhead + (so long as the default isn't changed, of course...) + - exceptions on overflow, zero divide and NaN */ +#define _FPU_DEFAULT 0x1f72 + +/* IEEE: same as above, but exceptions */ +#define _FPU_IEEE 0x1f7f + +/* Type of the control word. */ +typedef unsigned int fpu_control_t; + +/* Default control word set at startup. */ +extern fpu_control_t __fpu_control; + +__BEGIN_DECLS + +/* called by start.o. It can be used to manipulate fpu control word. */ +extern void __setfpucw __P ((unsigned short)); + +__END_DECLS + +#endif /* _ALPHA_FPU_CONTROL */ diff --git a/sysdeps/generic/fpu_control.c b/sysdeps/generic/fpu_control.c new file mode 100644 index 0000000000..4a47e626a8 --- /dev/null +++ b/sysdeps/generic/fpu_control.c @@ -0,0 +1,24 @@ +/* Default FPU control word initialization. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include + +/* This module defines `__fpu_control' with the default value. */ + +fpu_control_t __fpu_control = _FPU_DEFAULT; diff --git a/sysdeps/generic/setfpucw.c b/sysdeps/generic/setfpucw.c new file mode 100644 index 0000000000..7b09a68b55 --- /dev/null +++ b/sysdeps/generic/setfpucw.c @@ -0,0 +1,33 @@ +/* Set the FPU control word. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "fpu_control.h" + +void +__setfpucw (fpu_control_t set) +{ + fpu_control_t cw; + + /* Fetch the current control word. */ + _FPU_GETCW (cw); + + /* Preserve the reserved bits, and set the rest as the user + specified (or the default, if the user gave zero). */ + _FPU_SETCW ((cw & _FPU_RESERVED) | (set & ~_FPU_RESERVED)); +} diff --git a/sysdeps/i386/fpu_control.h b/sysdeps/i386/fpu_control.h new file mode 100644 index 0000000000..d72f474eb6 --- /dev/null +++ b/sysdeps/i386/fpu_control.h @@ -0,0 +1,105 @@ +/* FPU control word bits. i387 version. +Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Olaf Flebbe. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#ifndef _FPU_CONTROL_H +#define _FPU_CONTROL_H + +/* Here is the dirty part. Settup up your 387 through the control word + * (cw) register. + * + * 15-13 12 11-10 9-8 7-6 5 4 3 2 1 0 + * | reserved | IC | RC | PC | reserved | PM | UM | OM | ZM | DM | IM + * + * IM: Invalid operation mask + * DM: Denormalized operand mask + * ZM: Zero-divide mask + * OM: Overflow mask + * UM: Underflow mask + * PM: Precision (inexact result) mask + * + * Mask bit is 1 means no interrupt. + * + * PC: Precision control + * 11 - round to extended precision + * 10 - round to double precision + * 00 - round to single precision + * + * RC: Rounding control + * 00 - rounding to nearest + * 01 - rounding down (toward - infinity) + * 10 - rounding up (toward + infinity) + * 11 - rounding toward zero + * + * IC: Infinity control + * That is for 8087 and 80287 only. + * + * The hardware default is 0x037f. I choose 0x1372. + */ + +#include + +/* masking of interrupts */ +#define _FPU_MASK_IM 0x01 +#define _FPU_MASK_DM 0x02 +#define _FPU_MASK_ZM 0x04 +#define _FPU_MASK_OM 0x08 +#define _FPU_MASK_UM 0x10 +#define _FPU_MASK_PM 0x20 + +/* precision control */ +#define _FPU_EXTENDED 0x300 +#define _FPU_DOUBLE 0x200 /* fdlibm requires double precision */ +#define _FPU_SINGLE 0x0 /* DO NOT USE */ + +/* rounding control */ +#define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */ +#define _FPU_RC_DOWN 0x400 +#define _FPU_RC_UP 0x800 +#define _FPU_RC_ZERO 0xC00 + +#define _FPU_RESERVED 0xF0C0 /* Reserved bits in cw */ + + +/* The fdlibm code requires strict IEEE double precision arithmetic, + and no interrupts for exceptions, rounding to nearest. */ + +#define _FPU_DEFAULT 0x127f + +/* IEEE: same as above, but exceptions */ +#define _FPU_IEEE 0x127f + +/* Type of the control word. */ +typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__))); + +/* Macros for accessing the hardware control word. */ +#define _FPU_GETCW(cw) __asm__ ("fnstcw %0" : "=m" (cw)) +#define _FPU_SETCW(cw) __asm__ ("fldcw %0" : : "m" (cw)) + +/* Default control word set at startup. */ +extern fpu_control_t __fpu_control; + +__BEGIN_DECLS + +/* Called at startup. It can be used to manipulate fpu control register. */ +extern void __setfpucw __P ((fpu_control_t)); + +__END_DECLS + +#endif /* fpu_control.h */ diff --git a/sysdeps/m68k/fpu_control.h b/sysdeps/m68k/fpu_control.h new file mode 100644 index 0000000000..97bde853bc --- /dev/null +++ b/sysdeps/m68k/fpu_control.h @@ -0,0 +1,108 @@ +/* 68k FPU control word definitions. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#ifndef _FPU_CONTROL_H +#define _FPU_CONTROL_H + +/* + * Motorola floating point control register bits. + * + * 31-16 -> reserved (read as 0, ignored on write) + * 15 -> enable trap for BSUN exception + * 14 -> enable trap for SNAN exception + * 13 -> enable trap for OPERR exception + * 12 -> enable trap for OVFL exception + * 11 -> enable trap for UNFL exception + * 10 -> enable trap for DZ exception + * 9 -> enable trap for INEX2 exception + * 8 -> enable trap for INEX1 exception + * 7-6 -> Precision Control + * 5-4 -> Rounding Control + * 3-0 -> zero (read as 0, write as 0) + * + * + * Precision Control: + * 00 - round to extended precision + * 01 - round to single precision + * 10 - round to double precision + * 11 - undefined + * + * Rounding Control: + * 00 - rounding to nearest (RN) + * 01 - rounding toward zero (RZ) + * 10 - rounding (down)toward minus infinity (RM) + * 11 - rounding (up) toward plus infinity (RP) + * + * The hardware default is 0x0000. I choose 0x5400. + */ + +#include + +/* masking of interrupts */ +#define _FPU_MASK_BSUN 0x8000 +#define _FPU_MASK_SNAN 0x4000 +#define _FPU_MASK_OPERR 0x2000 +#define _FPU_MASK_OVFL 0x1000 +#define _FPU_MASK_UNFL 0x0800 +#define _FPU_MASK_DZ 0x0400 +#define _FPU_MASK_INEX1 0x0200 +#define _FPU_MASK_INEX2 0x0100 + +/* precision control */ +#define _FPU_EXTENDED 0x00 /* RECOMMENDED */ +#define _FPU_DOUBLE 0x80 +#define _FPU_SINGLE 0x40 /* DO NOT USE */ + +/* rounding control */ +#define _FPU_RC_NEAREST 0x00 /* RECOMMENDED */ +#define _FPU_RC_ZERO 0x10 +#define _FPU_RC_DOWN 0x20 +#define _FPU_RC_UP 0x30 + +#define _FPU_RESERVED 0xFFFF000F /* Reserved bits in fpucr */ + + +/* Now two recommended fpucr */ + +/* The fdlibm code requires no interrupts for exceptions. Don't + change the rounding mode, it would break long double I/O! */ +#define _FPU_DEFAULT 0x00000000 + +/* IEEE: same as above, but exceptions. We must make it non-zero so + that __setfpucw works. This bit will be ignored. */ +#define _FPU_IEEE 0x00000001 + +/* Type of the control word. */ +typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__))); + +/* Macros for accessing the hardware control word. */ +#define _FPU_GETCW(cw) __asm__ ("fmove%.l %!, %0" : "=dm" (cw)) +#define _FPU_SETCW(cw) __asm__ volatile ("fmove%.l %0, %!" : : "dm" (cw)) + +/* Default control word set at startup. */ +extern fpu_control_t __fpu_control; + +__BEGIN_DECLS + +/* Called at startup. It can be used to manipulate fpu control register. */ +extern void __setfpucw __P ((fpu_control_t)); + +__END_DECLS + +#endif /* _M68K_FPU_CONTROL_H */ diff --git a/sysdeps/mach/hurd/gethostid.c b/sysdeps/mach/hurd/gethostid.c index 5a3309266e..a413a50308 100644 --- a/sysdeps/mach/hurd/gethostid.c +++ b/sysdeps/mach/hurd/gethostid.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 96 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,17 +17,19 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include -#include #include #include +#include "hurdhost.h" /* Return the current machine's Internet number. */ long int DEFUN_VOID(gethostid) { - int hostid; - error_t err; - if (err = __USEPORT (PROC, __proc_gethostid (port, &hostid))) - return __hurd_fail (err); - return hostid; + /* The hostid is just the contents of the file /etc/hostid, + kept as text of hexadecimal digits. */ + char buf[8]; + ssize_t n = _hurd_get_host_config ("/etc/hostid", buf, sizeof buf); + if (n < 0) + return -1; + return strtol (buf, NULL, 16); } diff --git a/sysdeps/mach/hurd/gethostname.c b/sysdeps/mach/hurd/gethostname.c index 94a0537d91..06703ead6a 100644 --- a/sysdeps/mach/hurd/gethostname.c +++ b/sysdeps/mach/hurd/gethostname.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,11 +17,8 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include -#include #include -#include -#include -#include +#include "hurdhost.h" /* Put the name of the current host in no more than LEN bytes of NAME. The result is null-terminated if LEN is large enough for the full @@ -30,19 +27,9 @@ int DEFUN(__gethostname, (name, len), char *name AND size_t len) { - error_t err; - char *buf = name; - mach_msg_type_number_t buflen = len; - if (err = __USEPORT (PROC, __proc_gethostname (port, &buf, &buflen))) - return __hurd_fail (err); - if (buf != name) - { - memcpy (name, buf, len < buflen ? len : buflen); - __vm_deallocate (__mach_task_self (), (vm_address_t) buf, buflen); - } - if (buflen > len) - return __hurd_fail (ENAMETOOLONG); - return 0; + /* The host name is just the contents of the file /etc/hostname. */ + ssize_t n = _hurd_get_host_config ("/etc/hostname", name, len); + return n < 0 ? -1 : 0; } weak_alias (__gethostname, gethostname) diff --git a/sysdeps/mach/hurd/sethostid.c b/sysdeps/mach/hurd/sethostid.c index dc8153caa6..64f5e0c1c6 100644 --- a/sysdeps/mach/hurd/sethostid.c +++ b/sysdeps/mach/hurd/sethostid.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1996 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,15 +17,26 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include -#include #include #include +#include "hurdhost.h" +#include "../stdio-common/_itoa.h" /* Set the current machine's Internet number to ID. This call is restricted to the super-user. */ int DEFUN(sethostid, (id), long int id) { - error_t err = __USEPORT (PROC, __proc_sethostid (port, id)); - return err ? __hurd_fail (err) : 0; + char buf[8], *bp; + ssize_t n; + + /* The hostid is kept in the file /etc/hostid, + eight characters of upper-case hexadecimal. */ + + bp = _itoa_word (id, &buf[sizeof buf], 16, 1); + while (bp > buf) + *--bp = '0'; + + n = _hurd_set_host_config ("/etc/hostid", buf, sizeof buf); + return n < 0 ? -1 : 0; } diff --git a/sysdeps/mach/hurd/sethostname.c b/sysdeps/mach/hurd/sethostname.c index 2c019cf99e..d07e69d395 100644 --- a/sysdeps/mach/hurd/sethostname.c +++ b/sysdeps/mach/hurd/sethostname.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 94, 96 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,9 +17,8 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include -#include #include -#include +#include "hurdhost.h" /* Set the name of the current host to NAME, which is LEN bytes long. This call is restricted to the super-user. */ @@ -27,8 +26,7 @@ int DEFUN(sethostname, (name, len), CONST char *name AND size_t len) { - error_t err = __USEPORT (PROC, __proc_sethostname (port, name, len)); - if (err) - return __hurd_fail (err); - return 0; + /* The host name is just the contents of the file /etc/hostname. */ + ssize_t n = _hurd_set_host_config ("/etc/hostname", name, len); + return n < 0 ? -1 : 0; } diff --git a/sysdeps/stub/fpu_control.h b/sysdeps/stub/fpu_control.h new file mode 100644 index 0000000000..65f58824ae --- /dev/null +++ b/sysdeps/stub/fpu_control.h @@ -0,0 +1,46 @@ +/* FPU control word definitions. Stub version. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#ifndef _FPU_CONTROL_H +#define _FPU_CONTROL_H + +#define _FPU_RESERVED ??? /* These bits are reserved are not changed. */ + +/* The fdlibm code requires no interrupts for exceptions. Don't + change the rounding mode, it would break long double I/O! */ +#define _FPU_DEFAULT 0x00000000 /* Default value. */ + +/* Type of the control word. */ +typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__?I__))); + +/* Macros for accessing the hardware control word. */ +#define _FPU_GETCW(cw) __asm__ ("fetch fpu control word into %0" : "=g" (cw)) +#define _FPU_SETCW(cw) __asm__ ("set fpu control word to %0" : : "g" (cw)) + +/* Default control word set at startup. */ +extern fpu_control_t __fpu_control; + +__BEGIN_DECLS + +/* Called at startup. It can be used to manipulate fpu control register. */ +extern void __setfpucw __P ((fpu_control_t)); + +__END_DECLS + +#endif /* _M68K_FPU_CONTROL_H */ diff --git a/sysdeps/unix/sysv/linux/alpha/Makefile b/sysdeps/unix/sysv/linux/alpha/Makefile index e6e421da9d..9d596719da 100644 --- a/sysdeps/unix/sysv/linux/alpha/Makefile +++ b/sysdeps/unix/sysv/linux/alpha/Makefile @@ -1,6 +1,6 @@ ifeq ($(subdir), misc) sysdep_headers += alpha/ptrace.h alpha/regdef.h -sysdep_routines += ieee_get_fp_control ieee_set_fp_control fpu_control \ - setfpucw sethae ioperm osf_sigprocmask fstatfs statfs +sysdep_routines += ieee_get_fp_control ieee_set_fp_control \ + sethae ioperm osf_sigprocmask fstatfs statfs endif diff --git a/sysdeps/unix/sysv/linux/alpha/fpu_control.c b/sysdeps/unix/sysv/linux/alpha/fpu_control.c deleted file mode 100644 index 20c032a03c..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fpu_control.c +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 1993, 1995 Free Software Foundation, Inc. - Contributed by David Mosberger (davidm@azstarnet.com). - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include - -fpu_control_t __fpu_control = _FPU_DEFAULT; diff --git a/sysdeps/unix/sysv/linux/alpha/fpu_control.h b/sysdeps/unix/sysv/linux/alpha/fpu_control.h deleted file mode 100644 index 782f33e040..0000000000 --- a/sysdeps/unix/sysv/linux/alpha/fpu_control.h +++ /dev/null @@ -1,105 +0,0 @@ -/* Copyright (C) 1993 Olaf Flebbe -This file is part of the Linux C Library. - -The Linux C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The Linux C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. */ - -#ifndef _ALPHA_FPU_CONTROL_H -#define _ALPHA_FPU_CONTROL_H - -/* - * Since many programs seem to hardcode the values passed to __setfpucw() - * (rather than using the manifest constants) we emulate the x87 interface - * here (at least where this makes sense). - * - * 15-13 12 11-10 9-8 7-6 5 4 3 2 1 0 - * | reserved | IC | RC | PC | reserved | PM | UM | OM | ZM | DM | IM - * - * IM: Invalid operation mask - * DM: Denormalized operand mask - * ZM: Zero-divide mask - * OM: Overflow mask - * UM: Underflow mask - * PM: Precision (inexact result) mask - * - * Mask bit is 1 means no interrupt. - * - * PC: Precision control - * 11 - round to extended precision - * 10 - round to double precision - * 00 - round to single precision - * - * RC: Rounding control - * 00 - rounding to nearest - * 01 - rounding down (toward - infinity) - * 10 - rounding up (toward + infinity) - * 11 - rounding toward zero - * - * IC: Infinity control - * That is for 8087 and 80287 only. - * - * The hardware default is 0x037f. I choose 0x1372. - */ - -#include - -/* masking of interrupts */ -#define _FPU_MASK_IM 0x01 -#define _FPU_MASK_DM 0x02 -#define _FPU_MASK_ZM 0x04 -#define _FPU_MASK_OM 0x08 -#define _FPU_MASK_UM 0x10 -#define _FPU_MASK_PM 0x20 - -/* precision control */ -#define _FPU_EXTENDED 0x300 /* RECOMMENDED */ -#define _FPU_DOUBLE 0x200 -#define _FPU_SINGLE 0x0 /* DO NOT USE */ - -/* - * rounding control---notice that on the Alpha this affects only - * instructions with the dynamic rounding mode qualifier (/d). - */ -#define _FPU_RC_NEAREST 0x000 /* RECOMMENDED */ -#define _FPU_RC_DOWN 0x400 -#define _FPU_RC_UP 0x800 -#define _FPU_RC_ZERO 0xC00 - -#define _FPU_RESERVED 0xF0C0 /* Reserved bits in cw */ - - -/* Now two recommended cw */ - -/* Linux default: - - extended precision - - rounding to positive infinity. There is no /p instruction - qualifier. By setting the dynamic rounding mode to +infinity, - one can use /d to get round to +infinity with no extra overhead - (so long as the default isn't changed, of course...) - - exceptions on overflow, zero divide and NaN */ -#define _FPU_DEFAULT 0x1f72 - -/* IEEE: same as above, but exceptions */ -#define _FPU_IEEE 0x1f7f - -/* Type of the control word. */ -typedef unsigned int fpu_control_t; - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -__BEGIN_DECLS - -/* called by start.o. It can be used to manipulate fpu control word. */ -extern void __setfpucw __P ((unsigned short)); - -__END_DECLS - -#endif /* _ALPHA_FPU_CONTROL */ diff --git a/sysdeps/unix/sysv/linux/i386/fpu_control.h b/sysdeps/unix/sysv/linux/i386/fpu_control.h deleted file mode 100644 index 8c04c1ea11..0000000000 --- a/sysdeps/unix/sysv/linux/i386/fpu_control.h +++ /dev/null @@ -1,104 +0,0 @@ -/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by Olaf Flebbe. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H - -/* Here is the dirty part. Settup up your 387 through the control word - * (cw) register. - * - * 15-13 12 11-10 9-8 7-6 5 4 3 2 1 0 - * | reserved | IC | RC | PC | reserved | PM | UM | OM | ZM | DM | IM - * - * IM: Invalid operation mask - * DM: Denormalized operand mask - * ZM: Zero-divide mask - * OM: Overflow mask - * UM: Underflow mask - * PM: Precision (inexact result) mask - * - * Mask bit is 1 means no interrupt. - * - * PC: Precision control - * 11 - round to extended precision - * 10 - round to double precision - * 00 - round to single precision - * - * RC: Rounding control - * 00 - rounding to nearest - * 01 - rounding down (toward - infinity) - * 10 - rounding up (toward + infinity) - * 11 - rounding toward zero - * - * IC: Infinity control - * That is for 8087 and 80287 only. - * - * The hardware default is 0x037f. I choose 0x1372. - */ - -#include - -/* masking of interrupts */ -#define _FPU_MASK_IM 0x01 -#define _FPU_MASK_DM 0x02 -#define _FPU_MASK_ZM 0x04 -#define _FPU_MASK_OM 0x08 -#define _FPU_MASK_UM 0x10 -#define _FPU_MASK_PM 0x20 - -/* precision control */ -#define _FPU_EXTENDED 0x300 -#define _FPU_DOUBLE 0x200 /* fdlibm requires double precision */ -#define _FPU_SINGLE 0x0 /* DO NOT USE */ - -/* rounding control */ -#define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */ -#define _FPU_RC_DOWN 0x400 -#define _FPU_RC_UP 0x800 -#define _FPU_RC_ZERO 0xC00 - -#define _FPU_RESERVED 0xF0C0 /* Reserved bits in cw */ - - -/* The fdlibm code requires strict IEEE double precision arithmetic, - and no interrupts for exceptions, rounding to nearest. */ - -#define _FPU_DEFAULT 0x127f - -/* IEEE: same as above, but exceptions */ -#define _FPU_IEEE 0x127f - -/* Type of the control word. */ -typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__))); - -/* Macros for accessing the hardware control word. */ -#define _FPU_GETCW(cw) __asm__ ("fnstcw %0" : "=m" (cw)) -#define _FPU_SETCW(cw) __asm__ ("fldcw %0" : : "m" (cw)) - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -__BEGIN_DECLS - -/* Called at startup. It can be used to manipulate fpu control register. */ -extern void __setfpucw __P ((fpu_control_t)); - -__END_DECLS - -#endif /* fpu_control.h */ diff --git a/sysdeps/unix/sysv/linux/m68k/fpu_control.h b/sysdeps/unix/sysv/linux/m68k/fpu_control.h deleted file mode 100644 index 97bde853bc..0000000000 --- a/sysdeps/unix/sysv/linux/m68k/fpu_control.h +++ /dev/null @@ -1,108 +0,0 @@ -/* 68k FPU control word definitions. -Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H - -/* - * Motorola floating point control register bits. - * - * 31-16 -> reserved (read as 0, ignored on write) - * 15 -> enable trap for BSUN exception - * 14 -> enable trap for SNAN exception - * 13 -> enable trap for OPERR exception - * 12 -> enable trap for OVFL exception - * 11 -> enable trap for UNFL exception - * 10 -> enable trap for DZ exception - * 9 -> enable trap for INEX2 exception - * 8 -> enable trap for INEX1 exception - * 7-6 -> Precision Control - * 5-4 -> Rounding Control - * 3-0 -> zero (read as 0, write as 0) - * - * - * Precision Control: - * 00 - round to extended precision - * 01 - round to single precision - * 10 - round to double precision - * 11 - undefined - * - * Rounding Control: - * 00 - rounding to nearest (RN) - * 01 - rounding toward zero (RZ) - * 10 - rounding (down)toward minus infinity (RM) - * 11 - rounding (up) toward plus infinity (RP) - * - * The hardware default is 0x0000. I choose 0x5400. - */ - -#include - -/* masking of interrupts */ -#define _FPU_MASK_BSUN 0x8000 -#define _FPU_MASK_SNAN 0x4000 -#define _FPU_MASK_OPERR 0x2000 -#define _FPU_MASK_OVFL 0x1000 -#define _FPU_MASK_UNFL 0x0800 -#define _FPU_MASK_DZ 0x0400 -#define _FPU_MASK_INEX1 0x0200 -#define _FPU_MASK_INEX2 0x0100 - -/* precision control */ -#define _FPU_EXTENDED 0x00 /* RECOMMENDED */ -#define _FPU_DOUBLE 0x80 -#define _FPU_SINGLE 0x40 /* DO NOT USE */ - -/* rounding control */ -#define _FPU_RC_NEAREST 0x00 /* RECOMMENDED */ -#define _FPU_RC_ZERO 0x10 -#define _FPU_RC_DOWN 0x20 -#define _FPU_RC_UP 0x30 - -#define _FPU_RESERVED 0xFFFF000F /* Reserved bits in fpucr */ - - -/* Now two recommended fpucr */ - -/* The fdlibm code requires no interrupts for exceptions. Don't - change the rounding mode, it would break long double I/O! */ -#define _FPU_DEFAULT 0x00000000 - -/* IEEE: same as above, but exceptions. We must make it non-zero so - that __setfpucw works. This bit will be ignored. */ -#define _FPU_IEEE 0x00000001 - -/* Type of the control word. */ -typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__))); - -/* Macros for accessing the hardware control word. */ -#define _FPU_GETCW(cw) __asm__ ("fmove%.l %!, %0" : "=dm" (cw)) -#define _FPU_SETCW(cw) __asm__ volatile ("fmove%.l %0, %!" : : "dm" (cw)) - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -__BEGIN_DECLS - -/* Called at startup. It can be used to manipulate fpu control register. */ -extern void __setfpucw __P ((fpu_control_t)); - -__END_DECLS - -#endif /* _M68K_FPU_CONTROL_H */ diff --git a/sysdeps/unix/sysv/linux/setfpucw.c b/sysdeps/unix/sysv/linux/setfpucw.c deleted file mode 100644 index 47a021c587..0000000000 --- a/sysdeps/unix/sysv/linux/setfpucw.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Set the FPU control word. -Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#include "fpu_control.h" - -void -__setfpucw (fpu_control_t set) -{ - fpu_control_t cw; - - /* Fetch the current control word. */ - _FPU_GETCW (cw); - - /* Preserve the reserved bits, and set the rest as the user - specified (or the default, if the user gave zero). */ - _FPU_SETCW ((cw & _FPU_RESERVED) | ((set ?: _FPU_DEFAULT) & ~_FPU_RESERVED)); -} - -/* The startup code in init-first.c calls __setfpucw (__fpu_control). */ - -fpu_control_t __fpu_control; -- cgit v1.2.1