mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-05 11:11:04 +00:00
898c62f488
On powerpc, floating-point environment macros are defined as pointers to constants in the library that contain the bit-patterns of the desired environment, instead of being magic constants cast to pointer type. For soft-float, the bit-patterns used for fenv_t are not laid out the same as for hard-float. (e500 has a third layout used; that's not an ABI issue because these values are only meaningful within a single process, all of whose glibc libraries must come from the same build of glibc.) While the __fe_dfl_env value for soft-float was appropriate for the soft-float fenv_t representation, the other two constants had the same bit-patterns as for hard-float. Those bit patterns had the effect of having exceptions already raised, causing math/test-fenv-return to fail; this patch fixes the patterns used. (__fe_nonieee_env also had exceptions unmasked, though they should be masked to match hard-float semantics. Since there is no separate non-IEEE mode for soft-float, it's most appropriate for __fe_nonieee_env to be the same as __fe_dfl_env; this patch makes it an alias.) Tested for powerpc-nofpu. [BZ #17261] * sysdeps/powerpc/nofpu/fenv_const.c (__fe_enabled_env): Change value to 0. (__fe_nonieee_env): Define as an alias for __fe_dfl_env.
35 lines
1.5 KiB
C
35 lines
1.5 KiB
C
/* Constants for fenv_bits.h (soft float edition).
|
|
Copyright (C) 2002-2014 Free Software Foundation, Inc.
|
|
Contributed by Aldy Hernandez <aldyh@redhat.com>, 2002.
|
|
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 Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 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
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with the GNU C Library. If not, see
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
/* We want to specify the bit pattern of the __fe_*_env constants, so
|
|
pretend they're really `long long' instead of `double'. */
|
|
|
|
/* If the default argument is used we use this value. Disable all
|
|
signalling exceptions as default. */
|
|
const unsigned long long __fe_dfl_env __attribute__ ((aligned (8))) =
|
|
0x000000003e000000ULL;
|
|
|
|
/* Floating-point environment where none of the exceptions are masked. */
|
|
const unsigned long long __fe_enabled_env __attribute__ ((aligned (8))) =
|
|
0x0000000000000000ULL;
|
|
|
|
/* Floating-point environment with the NI bit set. No difference for
|
|
soft float from the default environment. */
|
|
strong_alias (__fe_dfl_env, __fe_nonieee_env)
|