------- Comment #3 from ubizjak at gmail dot com 2008-05-16 12:12 ------- Patch in testing:
Index: i386.h =================================================================== --- i386.h (revision 135408) +++ i386.h (working copy) @@ -1516,6 +1516,14 @@ #define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \ ix86_secondary_memory_needed ((CLASS1), (CLASS2), (MODE), 1) +/* Get_secondary_mem widens integral modes to BITS_PER_WORD. + There is no need to emit full 64 bit move for integral modes + that can be moved using 32 bit move. */ +#define SECONDARY_MEMORY_NEEDED_MODE(MODE) \ + (GET_MODE_BITSIZE (MODE) < 32 && INTEGRAL_MODE_P (MODE) \ + ? mode_for_size (32, GET_MODE_CLASS (MODE), 0) \ + : MODE) + /* QImode spills from non-QI registers need a scratch. This does not happen often -- the only example so far requires an uninitialized pseudo. */ -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36246