OSDN Git Service

PR c++/25294
[pf3gnuchains/gcc-fork.git] / gcc / targhooks.c
index 1d5a7fe..5ef2369 100644 (file)
@@ -262,6 +262,9 @@ default_scalar_mode_supported_p (enum machine_mode mode)
        return true;
       return false;
 
+    case MODE_DECIMAL_FLOAT:
+      return false;
+
     default:
       gcc_unreachable ();
     }
@@ -514,10 +517,15 @@ default_secondary_reload (bool in_p ATTRIBUTE_UNUSED, rtx x ATTRIBUTE_UNUSED,
            }
 
          scratch_constraint = insn_data[(int) icode].operand[2].constraint;
-         /* The scratch register's constraint must start with "=&".  */
+         /* The scratch register's constraint must start with "=&",
+            except for an input reload, where only "=" is necessary,
+            and where it might be beneficial to re-use registers from
+            the input.  */
          gcc_assert (scratch_constraint[0] == '='
-                     && scratch_constraint[1] == '&');
-         scratch_constraint += 2;
+                     && (in_p || scratch_constraint[1] == '&'));
+         scratch_constraint++;
+         if (*scratch_constraint == '&')
+           scratch_constraint++;
          scratch_letter = *scratch_constraint;
          scratch_class
            = (scratch_letter == 'r' ? GENERAL_REGS