------- 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

Reply via email to