This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC 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]

[Bug middle-end/19953] Special-case real + complex arithmetic operation (-ffast-math)


------- Additional Comments From fredrik dot huss at home dot se  2005-03-16 17:25 -------
I see similar problems with real by complex multiplications in C++. 
The following test program, 
 
#include <complex> 
 
std::complex<double> a, b; 
double c; 
 
void f() 
{ 
 a = b * c; 
} 
 
when compiled with "g++ -O3 -march=pentium4 -mfpmath=sse -S -c test.C", gives 
this result (from test.s): 
 
_Z1fv: 
.LFB1857: 
 pushl %ebp 
.LCFI0: 
 movl %esp, %ebp 
.LCFI1: 
 movsd b+8, %xmm3 
 movsd b, %xmm2 
 movsd c, %xmm4 
 pxor %xmm5, %xmm5 
 movapd %xmm2, %xmm0 
 mulsd %xmm5, %xmm0 
 movapd %xmm4, %xmm1 
 mulsd %xmm3, %xmm1 
 addsd %xmm1, %xmm0 
 movsd %xmm0, a+8 
 mulsd %xmm4, %xmm2 
 mulsd %xmm5, %xmm3 
 subsd %xmm3, %xmm2 
 movsd %xmm2, a 
 popl %ebp 
 ret 
 
I.e, the real value c is still converted to a complex value and a full 
multiplication is done. 
 
I'm using the following version of gcc: 
 
Using built-in specs. 
Target: i686-pc-linux-gnu 
Configured with: ../gcc-4.0-20050312/configure --prefix=/home/fredrik/gcc 
--enable-languages=c,c++ 
Thread model: posix 
gcc version 4.0.0 20050312 (prerelease) 
 

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19953


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