re PR libstdc++/5730 (complex<double>::norm() -- huge slowdown from egcs-2.91.66)
authorJerry Quinn <jlquinn@optonline.net>
Sat, 22 Mar 2003 04:57:46 +0000 (04:57 +0000)
committerJerry Quinn <jlquinn@gcc.gnu.org>
Sat, 22 Mar 2003 04:57:46 +0000 (04:57 +0000)
2003-03-21  Jerry Quinn  <jlquinn@optonline.net>

PR libstdc++/5730
* include/bits/c++config (_GLIBCPP_FAST_MATH): Define.
        * include/std/std_complex.h (norm):  Use faster,
        less accurate computation for builtin float types under --fast-math.

From-SVN: r64701

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/c++config
libstdc++-v3/include/std/std_complex.h

index 71793c6..30583b0 100644 (file)
@@ -1,3 +1,10 @@
+2003-03-21  Jerry Quinn  <jlquinn@optonline.net>
+
+       PR libstdc++/5730
+       * include/bits/c++config (_GLIBCPP_FAST_MATH): Define.
+        * include/std/std_complex.h (norm):  Use faster,
+        less accurate computation for builtin float types under --fast-math.
+
 2003-03-21  Magnus Fromreide  <gnats@magfr.user.lysator.liu.se>
 
        * testsuite/testsuite_hooks.h: Fix warning nits.
index f833b41..829fe7e 100644 (file)
 #error __USE_MALLOC should never be defined.  Read the release notes.
 #endif
 
+// Create a boolean flag to be used to determine if --fast-math is set.
+#ifdef __FAST_MATH__
+#define _GLIBCPP_FAST_MATH 1
+#else
+#define _GLIBCPP_FAST_MATH 0
+#endif
+
 // The remainder of the prewritten config is mostly automatic; all the
 // user hooks are listed above.
 
index 955a12c..87e4bcb 100644 (file)
@@ -456,7 +456,7 @@ namespace std
     inline _Tp
     norm(const complex<_Tp>& __z)
     {
-      return _Norm_helper<__is_floating<_Tp>::_M_type>::_S_do_it(__z);
+      return _Norm_helper<__is_floating<_Tp>::_M_type && !_GLIBCPP_FAST_MATH>::_S_do_it(__z);
     }
 
   template<typename _Tp>