This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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>

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]