------- Comment #2 from ubizjak at gmail dot com 2008-05-16 08:35 ------- It is actually a target issue. SECONDARY_MEMORY_NEEDED_MODE should be defined to handle this. From reload.c:
rtx get_secondary_mem (rtx x ATTRIBUTE_UNUSED, enum machine_mode mode, int opnum, enum reload_type type) { rtx loc; int mem_valid; /* By default, if MODE is narrower than a word, widen it to a word. This is required because most machines that require these memory locations do not support short load and stores from all registers (e.g., FP registers). */ #ifdef SECONDARY_MEMORY_NEEDED_MODE mode = SECONDARY_MEMORY_NEEDED_MODE (mode); #else if (GET_MODE_BITSIZE (mode) < BITS_PER_WORD && INTEGRAL_MODE_P (mode)) mode = mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (mode), 0); #endif -- ubizjak at gmail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- AssignedTo|unassigned at gcc dot gnu |ubizjak at gmail dot com |dot org | Status|UNCONFIRMED |ASSIGNED Component|rtl-optimization |target Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2008-05-16 08:35:28 date| | Summary|Reload chooses too wide mode|Reload chooses too wide mode |for reg->mem->reg reload |for reg->mem->xmmreg reload http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36246