re PR libstdc++/5730 (complex<double>::norm() -- huge slowdown from egcs-2.91.66)

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
This commit is contained in:
Jerry Quinn 2003-03-22 04:57:46 +00:00 committed by Jerry Quinn
parent d9b2742a3d
commit 442c0874ea
3 changed files with 15 additions and 1 deletions

View 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> 2003-03-21 Magnus Fromreide <gnats@magfr.user.lysator.liu.se>
* testsuite/testsuite_hooks.h: Fix warning nits. * testsuite/testsuite_hooks.h: Fix warning nits.

View File

@ -87,6 +87,13 @@
#error __USE_MALLOC should never be defined. Read the release notes. #error __USE_MALLOC should never be defined. Read the release notes.
#endif #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 // The remainder of the prewritten config is mostly automatic; all the
// user hooks are listed above. // user hooks are listed above.

View File

@ -456,7 +456,7 @@ namespace std
inline _Tp inline _Tp
norm(const complex<_Tp>& __z) 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> template<typename _Tp>