http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48970
--- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> 2011-05-11 21:23:45 UTC --- Also const int mmxsse_to_integer; /* cost of moving mmxsse register to integer and vice versa. */ isn't limited to integers: /* Moves between SSE/MMX and integer unit are expensive. */ if (MMX_CLASS_P (class1) != MMX_CLASS_P (class2) || SSE_CLASS_P (class1) != SSE_CLASS_P (class2)) /* ??? By keeping returned value relatively high, we limit the number of moves between integer and MMX/SSE registers for all targets. Additionally, high value prevents problem with x86_modes_tieable_p(), where integer modes in MMX/SSE registers are not tieable because of missing QImode and HImode moves to, from or between MMX/SSE registers. */ return MAX (8, ix86_cost->mmxsse_to_integer); Integer register classes aren't checked at all.