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