NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: bin/46978: internal compiler error building qt4-libs



The following reply was made to PR bin/46978; it has been noted by GNATS.

From: Joerg Sonnenberger <joerg%britannica.bec.de@localhost>
To: Nick Hudson <skrll%netbsd.org@localhost>
Cc: gnats-bugs%netbsd.org@localhost, gnats-admin%netbsd.org@localhost
Subject: Re: bin/46978: internal compiler error building qt4-libs
Date: Sun, 30 Sep 2012 23:08:45 +0200

 --7AUc2qLy4jB3hD7Z
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 More detailed analysis shows that this happens under the following
 conditions:
 
 (1) MMX is enabled
 (2) MMX registers are spilled to the stack
 (3) Stack alignment is 32bit
 (4) Preferred stack boundary is 32bit too
 
 What happens is that ix86_local_alignment gets called to create the
 stack slot for a MMX register with mode DImode. This is handled as if it
 was a "long long" and the 64bit alignment is overriden and downgraded to
 32bit.
 
 The attached patch makes sure that MMX registers use the vector mode,
 not DImode for spill slots to distinguish this from "long long".
 
 Joerg
 
 --7AUc2qLy4jB3hD7Z
 Content-Type: text/x-diff; charset=us-ascii
 Content-Disposition: attachment; filename="i386.h.diff"
 
 Index: i386.h
 ===================================================================
 RCS file: 
/home/joerg/repo/netbsd/src/external/gpl3/gcc/dist/gcc/config/i386/i386.h,v
 retrieving revision 1.1.1.2
 diff -u -p -r1.1.1.2 i386.h
 --- i386.h     18 Sep 2012 06:15:11 -0000      1.1.1.2
 +++ i386.h     30 Sep 2012 20:20:51 -0000
 @@ -1085,6 +1085,7 @@ enum target_cpu_default
  
  #define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE)                       
\
    (CC_REGNO_P (REGNO) ? VOIDmode                                      \
 +   : MMX_REGNO_P (REGNO) ? V8QImode                                   \
     : (MODE) == VOIDmode && (NREGS) != 1 ? VOIDmode                    \
     : (MODE) == VOIDmode ? choose_hard_reg_mode ((REGNO), (NREGS), false) \
     : (MODE) == HImode && !TARGET_PARTIAL_REG_STALL ? SImode           \
 
 --7AUc2qLy4jB3hD7Z--
 


Home | Main Index | Thread Index | Old Index