This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[Patch] Use __builtin_clog & co in complex::log
- From: Paolo Carlini <pcarlini at suse dot de>
- To: libstdc++ <libstdc++ at gcc dot gnu dot org>
- Date: Mon, 30 May 2005 23:06:29 +0200
- Subject: [Patch] Use __builtin_clog & co in complex::log
Hi,
now that both c++/21784 and middle-end/21743 are fixed ;) we can finally
use __builtin_clog & co and remove the horrible FIXME!
Will wait until tomorrow morning, just in case...
Paolo.
////////////////
2005-05-31 Paolo Carlini <pcarlini@suse.de>
* include/std/std_complex.h (log(const complex<_Tp>&)): When
_GLIBCXX_USE_C99_COMPLEX, forward to __builtin_clog/clogf/clogl.
diff -prN libstdc++-v3-orig/include/std/std_complex.h libstdc++-v3/include/std/std_complex.h
*** libstdc++-v3-orig/include/std/std_complex.h Wed Mar 16 00:38:54 2005
--- libstdc++-v3/include/std/std_complex.h Mon May 30 22:24:23 2005
*************** namespace std
*** 749,755 ****
__complex_log(const complex<_Tp>& __z)
{ return complex<_Tp>(log(std::abs(__z)), std::arg(__z)); }
! /*
inline __complex__ float
__complex_log(__complex__ float __z) { return __builtin_clogf(__z); }
--- 749,755 ----
__complex_log(const complex<_Tp>& __z)
{ return complex<_Tp>(log(std::abs(__z)), std::arg(__z)); }
! #if _GLIBCXX_USE_C99_COMPLEX
inline __complex__ float
__complex_log(__complex__ float __z) { return __builtin_clogf(__z); }
*************** namespace std
*** 758,771 ****
inline __complex__ long double
__complex_log(const __complex__ long double& __z)
! { return __builtin_clogl(__z); } */
! // FIXME: Currently we don't use built-ins for log() because of some
! // obscure user name-space issues. So, we use the generic version
! // which is why we don't use __z.__rep() in the call below.
template<typename _Tp>
inline complex<_Tp>
log(const complex<_Tp>& __z) { return __complex_log(__z); }
template<typename _Tp>
inline complex<_Tp>
--- 758,773 ----
inline __complex__ long double
__complex_log(const __complex__ long double& __z)
! { return __builtin_clogl(__z); }
! template<typename _Tp>
! inline complex<_Tp>
! log(const complex<_Tp>& __z) { return __complex_log(__z.__rep()); }
! #else
template<typename _Tp>
inline complex<_Tp>
log(const complex<_Tp>& __z) { return __complex_log(__z); }
+ #endif
template<typename _Tp>
inline complex<_Tp>