------- Comment #11 from dominiq at lps dot ens dot fr 2009-12-08 22:13 ------- I think I understand why apple gcc42 does not show the problem: it does not call ___divdc3:
[macbook] f90/bug% diff -up pr42333_42.s pr42333_45.s --- pr42333_42.s 2009-12-08 23:00:29.000000000 +0100 +++ pr42333_45.s 2009-12-08 23:00:07.000000000 +0100 ... @@ -15,68 +15,61 @@ LCFI2: movq %rax, -16(%rbp) movabsq $9214364837600034815, %rax movq %rax, -8(%rbp) - movq -16(%rbp), %rax - movq -8(%rbp), %rdx - movq %rax, -24(%rbp) - movsd -24(%rbp), %xmm1 + movq -16(%rbp), %rdx + movq -8(%rbp), %rax movq %rdx, -24(%rbp) movsd -24(%rbp), %xmm0 - movapd %xmm0, %xmm2 - addsd %xmm1, %xmm2 - movapd %xmm0, %xmm3 - subsd %xmm1, %xmm3 - movsd LC1(%rip), %xmm0 - movapd %xmm2, %xmm1 - divsd %xmm0, %xmm1 - movsd LC1(%rip), %xmm0 - movapd %xmm3, %xmm2 - divsd %xmm0, %xmm2 - movapd %xmm2, %xmm0 - movsd %xmm1, -24(%rbp) - movq -24(%rbp), %rax + movq %rax, -24(%rbp) + movsd -24(%rbp), %xmm1 + movsd LC2(%rip), %xmm3 + movsd LC2(%rip), %xmm2 + call ___divdc3 movsd %xmm0, -24(%rbp) movq -24(%rbp), %rdx ... This also explain why the test compiled with -c and 4.5, but linked with 4.2 fails. So my guess about the lazy complex division seems right in libm. Could someone write a C code forcing the use of ___divdc3? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42333