target/10077: gcc -msse2 generates movd to move dwords between xmm regs
Andreas Jaeger
aj@suse.de
Fri Mar 14 09:36:00 GMT 2003
The following reply was made to PR target/10077; it has been noted by GNATS.
From: Andreas Jaeger <aj@suse.de>
To: douze@enseeiht.fr
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: target/10077: gcc -msse2 generates movd to move dwords between
xmm regs
Date: Fri, 14 Mar 2003 10:31:02 +0100
douze@enseeiht.fr writes:
>>Number: 10077
>>Category: target
>>Synopsis: gcc -msse2 generates movd to move dwords between xmm regs
>>Confidential: no
>>Severity: critical
>>Priority: medium
>>Responsible: unassigned
>>State: open
>>Class: sw-bug
>>Submitter-Id: net
>>Arrival-Date: Fri Mar 14 08:16:00 UTC 2003
>>Closed-Date:
>>Last-Modified:
>>Originator: douze@enseeiht.fr
>>Release: gcc 3.2.2 on x86
>>Organization:
>>Environment:
> Linux 2.4.18
>>Description:
> The bug appears when I compile a function with many variables. GCC then uses xmm registers as 32-bit scalar integer registers.
>
> When it has to move data with an xmm register involved, it generates a movd instruction, which doesn't work (movss might work better). Although there is sse2 assembly in my code, I don't think it comes from there.
>
> The assembler used is GNU assembler version 2.11.92.0.10 (i486-suse-linux) using BFD version 2.11.92.0.10 20011021 (SuSE)
>>How-To-Repeat:
> Compile the code with
>
> gcc -c gcc_bug.i -msse2 -O3
>>Fix:
> replace movd with movss in the .s file
Which instruction is generated in this case? I only see one movd
generated (with not exactly the same compiler) and that one looks fine
to me (and might even come from your inline assembler).
Please tell us a bit more why the generated code is wrong,
Andreas
--
Andreas Jaeger
SuSE Labs aj@suse.de
private aj@arthur.inka.de
http://www.suse.de/~aj
More information about the Gcc-prs
mailing list