This is the mail archive of the libc-hacker@sourceware.cygnus.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
I've written a small program to test if the fpu control word is set correctly. On i686 the program outputs: $ cat math/test-fpucw.out control word is 0x37f but should be 0x137f. What's the right value? The kernel uses 0x37f but glibc also sets 0x1000 which seems to be a reserved bit. Why do we set this? What do you think of the appended patches? Andreas 2000-07-04 Andreas Jaeger <aj@suse.de> * sysdeps/i386/fpu_control.h (_FPU_DEFAULT): Correct value. (_FPU_IEEE): Likewise. * math/Makefile (tests): Add test-fpucw. * math/test-fpucw.c (main): New file. ============================================================ Index: math/Makefile --- math/Makefile 2000/05/25 06:26:11 1.96 +++ math/Makefile 2000/07/04 08:07:58 @@ -79,7 +79,7 @@ # Rules for the test suite. tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \ - test-misc + test-misc test-fpucw # We do the `long double' tests only if this data type is available and # distinct from `double'. test-longdouble-yes = test-ldouble test-ildoubl ============================================================ Index: sysdeps/i386/fpu_control.h --- sysdeps/i386/fpu_control.h 1998/11/26 12:00:07 1.7 +++ sysdeps/i386/fpu_control.h 2000/07/04 08:07:58 @@ -1,5 +1,5 @@ /* FPU control word bits. i387 version. - Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1993, 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Olaf Flebbe. @@ -50,7 +50,7 @@ * IC: Infinity control * That is for 8087 and 80287 only. * - * The hardware default is 0x037f. I choose 0x1372. + * The hardware default is 0x037f which we use. */ #include <features.h> @@ -80,10 +80,10 @@ /* The fdlibm code requires strict IEEE double precision arithmetic, and no interrupts for exceptions, rounding to nearest. */ -#define _FPU_DEFAULT 0x137f +#define _FPU_DEFAULT 0x037f /* IEEE: same as above. */ -#define _FPU_IEEE 0x137f +#define _FPU_IEEE 0x037f /* Type of the control word. */ typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__))); ============================================================ Index: math/test-fpucw.c --- math/test-fpucw.c created +++ math/test-fpucw.c Tue Jul 4 09:59:49 2000 1.1 @@ -0,0 +1,40 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Andreas Jaeger <aj@suse.de>, 2000. + + 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> +#include <stdlib.h> + +int +main (void) +{ +#ifdef _FPU_GETCW +/* Some architectures don't have _FPU_GETCW (e.g. Linux/Alpha). */ + fpu_control_t cw; + + _FPU_GETCW (cw); + + if (cw != _FPU_DEFAULT) + printf ("control word is 0x%x but should be 0x%x.\n", cw, _FPU_DEFAULT); + + return (cw != _FPU_DEFAULT); + +#else + return 0; +#endif +} -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |