[cfe-dev] MinGW problem with GSL

Ruben Van Boxem vanboxem.ruben at gmail.com
Wed Jul 6 15:21:23 PDT 2011


2011/7/6 Eric Christopher <echristo at apple.com>:
>
> On Jul 6, 2011, at 2:37 PM, Ruben Van Boxem wrote:
>
>> GCC does not have this problem. I can't discern any notable difference
>> in config.log. Could it be something wrt passing options down to the
>> GNU tools?
>
> Two things:
>
> a) try passing -no-integrated-as to see if it's a problem with passing down arguments

Same problem. I have also verified all the commands being run against
a matching GCC install.

> b) try to get a testcase of the failing instructions

Heh, well, yeah. Euhm... My assembly isn't that... good, and that's
being optimistic. As in, I know *nothing* about it, except that it
exists. So here I go:

The bits of assembly causing the problem are these:

.Ltmp224:
	.loc	4 129 5
	movsd	%xmm6, -616(%rbp)
	fldl	-616(%rbp)
	fstpt	-772(%rbp)
	fld	%ss
	#APP
	fabs;
	#NO_APP
	fstpl	-624(%rbp)
	movsd	.LCPI3_10(%rip), %xmm0
...
.Ltmp521:
	fstpt	-656(%rbp)
	fld	%ss
	#APP
	fabs;
	#NO_APP

I can't find these or even similar bits in GCC's output, which
probably isn't surprising.

The source file this comes from is pretty big, with a lot of GSL
specific functionality being used (kind of expected). I do know GCC
does not have a "fld" instruction anywhere in its version of the
assembler output.

Would this have anything to do with the <ieeefp.h> header? This is
used when Clang is used, but a mingw-w64 (which provides the header)
dev told me it includes ansidecl.h which is a GCC internal header. It
defines (among a *lot* of other things) some va_args things, but
there's no error when clang parses this file, so it probably is not
causing the issue. Plus, the only place where it's being used is GSL's
sys/infnan.c (grep -r , which couldn't possibly be included in the
file causing the error.

I also tried a i686-w64-mingw32 built Clang with matching mingw-w64
CRT and GCC. It hits the same problem.

Any tips on what simple testcase couldd produce an fld instruction?
GCC doesn't in this case, which only adds to the oddity.

Thanks,

Ruben



More information about the cfe-dev mailing list