about summary refs log tree commit diff
path: root/math
diff options
context:
space:
mode:
Diffstat (limited to 'math')
-rw-r--r--math/Makefile11
-rw-r--r--math/test-fpucw-ieee-static.c1
-rw-r--r--math/test-fpucw-ieee.c24
-rw-r--r--math/test-fpucw-static.c1
-rw-r--r--math/test-fpucw.c10
5 files changed, 40 insertions, 7 deletions
diff --git a/math/Makefile b/math/Makefile
index 3ed78fc9c3..a9bd49baee 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -87,9 +87,11 @@ long-c-yes = $(calls:=l)
 
 # Rules for the test suite.
 tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \
-	test-misc test-fpucw tst-definitions test-tgmath test-tgmath-ret \
-	bug-nextafter bug-nexttoward bug-tgmath1 test-tgmath-int \
-	test-tgmath2 test-powl tst-CMPLX tst-CMPLX2 test-snan
+	test-misc test-fpucw test-fpucw-ieee tst-definitions test-tgmath \
+	test-tgmath-ret bug-nextafter bug-nexttoward bug-tgmath1 \
+	test-tgmath-int test-tgmath2 test-powl tst-CMPLX tst-CMPLX2 test-snan \
+	$(tests-static)
+tests-static = test-fpucw-static test-fpucw-ieee-static
 # We do the `long double' tests only if this data type is available and
 # distinct from `double'.
 test-longdouble-yes = test-ldouble test-ildoubl
@@ -217,7 +219,8 @@ $(objpfx)libieee.a: $(objpfx)ieee-math.o
 	$(LN_S) $(<F) $(@F)
 
 ifeq ($(build-shared),yes)
-$(addprefix $(objpfx),$(tests)): $(objpfx)libm.so$(libm.so-version)
+$(addprefix $(objpfx),$(filter-out $(tests-static),$(tests))): $(objpfx)libm.so$(libm.so-version)
+$(addprefix $(objpfx),$(tests-static)): $(objpfx)libm.a
 else
 $(addprefix $(objpfx),$(tests)): $(objpfx)libm.a
 endif
diff --git a/math/test-fpucw-ieee-static.c b/math/test-fpucw-ieee-static.c
new file mode 100644
index 0000000000..3a35542060
--- /dev/null
+++ b/math/test-fpucw-ieee-static.c
@@ -0,0 +1 @@
+#include "test-fpucw-ieee.c"
diff --git a/math/test-fpucw-ieee.c b/math/test-fpucw-ieee.c
new file mode 100644
index 0000000000..ae5fc73f6e
--- /dev/null
+++ b/math/test-fpucw-ieee.c
@@ -0,0 +1,24 @@
+/* FPU control word overridden initialization test.
+   Copyright (C) 2013 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 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/>.  */
+
+#define FPU_CONTROL _FPU_IEEE
+
+#include "test-fpucw.c"
+
+/* Preempt the library's definition of `__fpu_control'.  */
+fpu_control_t __fpu_control = _FPU_IEEE;
diff --git a/math/test-fpucw-static.c b/math/test-fpucw-static.c
new file mode 100644
index 0000000000..bc1cfa8ce5
--- /dev/null
+++ b/math/test-fpucw-static.c
@@ -0,0 +1 @@
+#include "test-fpucw.c"
diff --git a/math/test-fpucw.c b/math/test-fpucw.c
index 1961a67481..ae6a2c9a71 100644
--- a/math/test-fpucw.c
+++ b/math/test-fpucw.c
@@ -19,6 +19,10 @@
 #include <fpu_control.h>
 #include <stdio.h>
 
+#ifndef FPU_CONTROL
+# define FPU_CONTROL _FPU_DEFAULT
+#endif
+
 int
 main (void)
 {
@@ -30,11 +34,11 @@ main (void)
 
   cw &= ~_FPU_RESERVED;
 
-  if (cw != (_FPU_DEFAULT & ~_FPU_RESERVED))
+  if (cw != (FPU_CONTROL & ~_FPU_RESERVED))
     printf ("control word is 0x%lx but should be 0x%lx.\n",
-	    (long int) cw, (long int) (_FPU_DEFAULT & ~_FPU_RESERVED));
+	    (long int) cw, (long int) (FPU_CONTROL & ~_FPU_RESERVED));
 
-  return cw != (_FPU_DEFAULT & ~_FPU_RESERVED);
+  return cw != (FPU_CONTROL & ~_FPU_RESERVED);
 
 #else
   return 0;