rs6000.c (rs6000_hard_regno_mode_ok): Reject decimal float modes for all floating...
authorBen Elliston <bje@au.ibm.com>
Tue, 17 Jan 2006 19:58:35 +0000 (19:58 +0000)
committerBen Elliston <bje@gcc.gnu.org>
Tue, 17 Jan 2006 19:58:35 +0000 (06:58 +1100)
* config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): Reject
decimal float modes for all floating point registers.

From-SVN: r109836

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index eb684fb..252bab0 100644 (file)
@@ -1,5 +1,8 @@
 2006-01-18  Ben Elliston  <bje@au.ibm.com>
 
+       * config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): Reject
+       decimal float modes for all floating point registers.
+
        * config/rs6000/predicates.md (reg_or_mem_operand): Pair up
        match_code "mem" with match_test "macho_lo_sum_memory_operand".
 
index b41a393..97430dd 100644 (file)
@@ -1031,10 +1031,12 @@ rs6000_hard_regno_mode_ok (int regno, enum machine_mode mode)
   if (INT_REGNO_P (regno))
     return INT_REGNO_P (regno + HARD_REGNO_NREGS (regno, mode) - 1);
 
-  /* The float registers can only hold floating modes and DImode.  */
+  /* The float registers can only hold floating modes and DImode.
+     This also excludes decimal float modes.  */
   if (FP_REGNO_P (regno))
     return
       (SCALAR_FLOAT_MODE_P (mode)
+       && !DECIMAL_FLOAT_MODE_P (mode)
        && FP_REGNO_P (regno + HARD_REGNO_NREGS (regno, mode) - 1))
       || (GET_MODE_CLASS (mode) == MODE_INT
          && GET_MODE_SIZE (mode) == UNITS_PER_FP_WORD);