> I'm experiencing a strange gfortran bug, i686-pc-mingw32 specific,
> with options -march=pentium4 -mfpmath=sse -msse.

Some more input... the bug appears when SSE sqrtsd is called, but only
if libgfortran contrusctors have been run:

 cat a.s
        .file   "a.f90"
        .section .rdata,"dr"
        .align 8
LC0:
        .long   0
        .long   1073741824
        .text
.globl _MAIN__
        .def    _MAIN__;        .scl    2;      .type   32;     .endef
_MAIN__:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $16, %esp
        movsd   LC0, %xmm0
        movsd   %xmm0, -8(%ebp)
        sqrtsd  -8(%ebp), %xmm0
        movsd   %xmm0, -8(%ebp)
        leave
        ret
$ gcc a.s -lgfortranbegin -lgfortran && ./a.exe
[popus up crash dialog]
$ diff a.s a_nolibgfortran.s
8,10c8,10
< .globl _MAIN__
<       .def    _MAIN__;        .scl    2;      .type   32;     .endef
< _MAIN__:
---
> .globl _main
>       .def    _main;  .scl    2;      .type   32;     .endef
> _main:
$ gcc a.s && ./a.exe
[works ok]

The problem appears to be inside the libgfortran constructor and
functions called herein. I'll try to narrow it, but I don't really
know what to look for... What kind of code can be expected to generate
such bad behaviour?

FX

Reply via email to