mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03: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:
14
ChangeLog
14
ChangeLog
@ -1,5 +1,19 @@
|
|||||||
Tue Feb 13 05:12:02 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
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/syscalls.list: Add ipc syscall.
|
||||||
* sysdeps/unix/sysv/linux/i386/syscalls.list: File removed.
|
* 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)
|
ifeq ($(subdir), io)
|
||||||
sysdep_routines += fxstat lxstat xstat
|
sysdep_routines += fxstat lxstat xstat
|
||||||
endif
|
endif
|
||||||
@ -7,17 +17,13 @@ sysdep_routines += xmknod mount umount s_ptrace
|
|||||||
headers += sys/mount.h
|
headers += sys/mount.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#ifeq ($(subdir), posix)
|
|
||||||
#sysdep_routines := $(sysdep_routines) setpgrp
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ifeq ($(subdir), time)
|
ifeq ($(subdir), time)
|
||||||
sysdep_routines := $(sysdep_routines) adjtimex
|
sysdep_routines += adjtimex
|
||||||
headers += sys/timex.h
|
headers += sys/timex.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(subdir), sysvipc)
|
ifeq ($(subdir), sysvipc)
|
||||||
sysdep_routines := $(sysdep_routines) ipc
|
sysdep_routines += ipc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(subdir), socket)
|
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.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Olaf Flebbe.
|
Contributed by Olaf Flebbe.
|
||||||
|
|
||||||
@ -87,13 +87,20 @@ Boston, MA 02111-1307, USA. */
|
|||||||
/* IEEE: same as above, but exceptions */
|
/* IEEE: same as above, but exceptions */
|
||||||
#define _FPU_IEEE 0x137f
|
#define _FPU_IEEE 0x137f
|
||||||
|
|
||||||
/* private namespace. It should only be used in init-first.o. */
|
/* Type of the control word. */
|
||||||
extern unsigned short __fpu_control;
|
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
|
__BEGIN_DECLS
|
||||||
|
|
||||||
/* called in init-first.o. It can be used to manipulate 387 control word. */
|
/* Called at startup. It can be used to manipulate fpu control register. */
|
||||||
extern void __setfpucw __P ((unsigned short));
|
extern void __setfpucw __P ((fpu_control_t));
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Default control word for ix86 FPU.
|
/* Set default FPU control word for IEEE operation.
|
||||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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
|
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
|
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,
|
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||||
Boston, MA 02111-1307, USA. */
|
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
|
/* Initialization code run first thing by the ELF startup code. Linux version.
|
||||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
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 <sysdep.h>
|
||||||
#include "fpu_control.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_init (int, char **, char **);
|
||||||
extern void __libc_global_ctors (void);
|
extern void __libc_global_ctors (void);
|
||||||
|
|
||||||
@ -32,6 +36,7 @@ init (int *data)
|
|||||||
char **argv = (void *) (data + 1);
|
char **argv = (void *) (data + 1);
|
||||||
char **envp = &argv[argc + 1];
|
char **envp = &argv[argc + 1];
|
||||||
|
|
||||||
|
#ifdef __i386__
|
||||||
/* Make sure we are not using the iBSC2 personality. The `personality'
|
/* Make sure we are not using the iBSC2 personality. The `personality'
|
||||||
syscall takes one argument; zero means the Linux personality. The
|
syscall takes one argument; zero means the Linux personality. The
|
||||||
argument arrives in %ebx; we have to save and restore %ebx by hand
|
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"
|
"int $0x80 # syscall no %0\n"
|
||||||
"popl %%ebx"
|
"popl %%ebx"
|
||||||
: : "a" (SYS_ify (personality)));
|
: : "a" (SYS_ify (personality)));
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Set the FPU control word to the proper default value. */
|
/* Set the FPU control word to the proper default value. */
|
||||||
__setfpucw (__fpu_control);
|
__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;
|
Reference in New Issue
Block a user