Tue Feb 13 05:12:02 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>

* sysdeps/unix/sysv/linux/Makefile [$(subdir)=math]
	(sysdep_routines): Append setfpucw.
	(extra-objs): Append ieee-fpucw.o.
	(install-lib): Append libieee.a.
	(libieee.a): New target.
	* sysdeps/unix/sysv/linux/ieee-fpucw.c: New file.
	* sysdeps/unix/sysv/linux/i386/fpu_control.h
	(_FPU_GETCW, _FPU_SETCW): New macros.
	(fpu_control_t): New typedef.
	(__setfpucw): Use fpu_control_t for argument type.
	* sysdeps/unix/sysv/linux/fpu_control.c: Moved from linux/i386.

	* sysdeps/unix/sysv/linux/init-first.c: Moved from linux/i386.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=math]
	(sysdep_routines): Append setfpucw.
	(extra-objs): Append ieee-fpucw.o.
	(install-lib): Append libieee.a.
	(libieee.a): New target.
	* sysdeps/unix/sysv/linux/ieee-fpucw.c: New file.
	* sysdeps/unix/sysv/linux/i386/fpu_control.h
	(_FPU_GETCW, _FPU_SETCW): New macros.
	(fpu_control_t): New typedef.
	(__setfpucw): Use fpu_control_t for argument type.
	* sysdeps/unix/sysv/linux/fpu_control.c: Moved from linux/i386.

	* sysdeps/unix/sysv/linux/init-first.c: Moved from linux/i386.
This commit is contained in:
Roland McGrath 1996-02-13 11:07:05 +00:00
parent 363113d02a
commit 2a072de4a1
7 changed files with 90 additions and 25 deletions

View File

@ -1,5 +1,19 @@
Tue Feb 13 05:12:02 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=math]
(sysdep_routines): Append setfpucw.
(extra-objs): Append ieee-fpucw.o.
(install-lib): Append libieee.a.
(libieee.a): New target.
* sysdeps/unix/sysv/linux/ieee-fpucw.c: New file.
* sysdeps/unix/sysv/linux/i386/fpu_control.h
(_FPU_GETCW, _FPU_SETCW): New macros.
(fpu_control_t): New typedef.
(__setfpucw): Use fpu_control_t for argument type.
* sysdeps/unix/sysv/linux/fpu_control.c: Moved from linux/i386.
* sysdeps/unix/sysv/linux/init-first.c: Moved from linux/i386.
* sysdeps/unix/sysv/linux/syscalls.list: Add ipc syscall.
* sysdeps/unix/sysv/linux/i386/syscalls.list: File removed.

View File

@ -1,3 +1,13 @@
ifeq ($(subdir), math)
sysdep_routines += setfpucw
extra-objs += ieee-fpucw.o
install-lib += libieee.a
$(objpfx)libieee.a: $(objpfx)ieee-fpucw.o
rm -f $@
ln $< $@
endif
ifeq ($(subdir), io)
sysdep_routines += fxstat lxstat xstat
endif
@ -7,17 +17,13 @@ sysdep_routines += xmknod mount umount s_ptrace
headers += sys/mount.h
endif
#ifeq ($(subdir), posix)
#sysdep_routines := $(sysdep_routines) setpgrp
#endif
ifeq ($(subdir), time)
sysdep_routines := $(sysdep_routines) adjtimex
sysdep_routines += adjtimex
headers += sys/timex.h
endif
ifeq ($(subdir), sysvipc)
sysdep_routines := $(sysdep_routines) ipc
sysdep_routines += ipc
endif
ifeq ($(subdir), socket)

View File

@ -1,7 +0,0 @@
ifeq ($(subdir), misc)
sysdep_routines := $(sysdep_routines) fpu_control setfpucw
extra-libs := $(extra-libs) libieee
libieee-routines := ieee_fpu
libieee-inhibit-o := .so .po
endif

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Olaf Flebbe.
@ -87,13 +87,20 @@ Boston, MA 02111-1307, USA. */
/* IEEE: same as above, but exceptions */
#define _FPU_IEEE 0x137f
/* private namespace. It should only be used in init-first.o. */
extern unsigned short __fpu_control;
/* 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 in init-first.o. It can be used to manipulate 387 control word. */
extern void __setfpucw __P ((unsigned short));
/* Called at startup. It can be used to manipulate fpu control register. */
extern void __setfpucw __P ((fpu_control_t));
__END_DECLS

View File

@ -1,5 +1,5 @@
/* Default control word for ix86 FPU.
Copyright (C) 1995 Free Software Foundation, Inc.
/* Set default FPU control word for IEEE operation.
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
@ -14,7 +14,9 @@ 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. */
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
unsigned short __fpu_control = 0;
#include "fpu_control.h"
fpu_control_t __fpu_control = _FPU_IEEE;

View File

@ -1,5 +1,5 @@
/* Initialization code run first thing by the ELF startup code. i386/Linux
Copyright (C) 1995 Free Software Foundation, Inc.
/* Initialization code run first thing by the ELF startup code. Linux version.
Copyright (C) 1995, 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
@ -21,6 +21,10 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h>
#include "fpu_control.h"
/* This code is mostly the same for all machines. This version works at
least for i386 and m68k, and probably any CISCy machine with a normal
stack arrangement. */
extern void __libc_init (int, char **, char **);
extern void __libc_global_ctors (void);
@ -32,6 +36,7 @@ init (int *data)
char **argv = (void *) (data + 1);
char **envp = &argv[argc + 1];
#ifdef __i386__
/* Make sure we are not using the iBSC2 personality. The `personality'
syscall takes one argument; zero means the Linux personality. The
argument arrives in %ebx; we have to save and restore %ebx by hand
@ -42,6 +47,7 @@ init (int *data)
"int $0x80 # syscall no %0\n"
"popl %%ebx"
: : "a" (SYS_ify (personality)));
#endif
/* Set the FPU control word to the proper default value. */
__setfpucw (__fpu_control);

View File

@ -0,0 +1,37 @@
/* 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;