mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-05 21:00:05 +00:00
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:
parent
363113d02a
commit
2a072de4a1
14
ChangeLog
14
ChangeLog
@ -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.
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
@ -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
|
||||
|
||||
|
@ -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;
|
@ -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);
|
37
sysdeps/unix/sysv/linux/setfpucw.c
Normal file
37
sysdeps/unix/sysv/linux/setfpucw.c
Normal 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;
|
Loading…
Reference in New Issue
Block a user