]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
arm.c: Verify modes on operands in predicates
authorBernd Schmidt <bernds@cygnus.co.uk>
Tue, 19 Oct 1999 16:47:23 +0000 (16:47 +0000)
committerBernd Schmidt <crux@gcc.gnu.org>
Tue, 19 Oct 1999 16:47:23 +0000 (16:47 +0000)
From-SVN: r30088

gcc/ChangeLog
gcc/config/arm/arm.c

index a183c593791ab1d357f7cb26b9f610725f17787b..dcc0393c8e6dcf60e6af4de3864d3495ae8ad2b1 100644 (file)
@@ -1,3 +1,10 @@
+Tue Oct 19 18:42:58 1999  Bernd Schmidt  <bernds@cygnus.co.uk>
+
+       * arm.c (fpu_rhs_operand): Verify modes.
+       (fpu_add_operand): Likewise.
+       (di_operand): Likewise.
+       (soft_df_operand): Likewise.
+
 Tue Oct 19 15:26:11 1999  Richard Earnshaw  (rearnsha@arm.com)
 
        * arm.c (arm_return_in_memory): APCS rules state that the elements
index 2e6e969828f25e9730f9e430c3e767d2d33175b5..27fc21d939a7436839700af05cca187071bf77ed 100644 (file)
@@ -2213,8 +2213,12 @@ fpu_rhs_operand (op, mode)
 {
   if (s_register_operand (op, mode))
     return TRUE;
-  else if (GET_CODE (op) == CONST_DOUBLE)
-    return (const_double_rtx_ok_for_fpu (op));
+
+  if (GET_MODE (op) != mode && mode != VOIDmode)
+    return FALSE;
+
+  if (GET_CODE (op) == CONST_DOUBLE)
+    return const_double_rtx_ok_for_fpu (op);
 
   return FALSE;
 }
@@ -2226,7 +2230,11 @@ fpu_add_operand (op, mode)
 {
   if (s_register_operand (op, mode))
     return TRUE;
-  else if (GET_CODE (op) == CONST_DOUBLE)
+
+  if (GET_MODE (op) != mode && mode != VOIDmode)
+    return FALSE;
+
+  if (GET_CODE (op) == CONST_DOUBLE)
     return (const_double_rtx_ok_for_fpu (op) 
            || neg_const_double_rtx_ok_for_fpu (op));
 
@@ -2261,6 +2269,9 @@ di_operand (op, mode)
   if (s_register_operand (op, mode))
     return TRUE;
 
+  if (mode != VOIDmode && GET_MODE (op) != VOIDmode && GET_MODE (op) != DImode)
+    return FALSE;
+
   if (GET_CODE (op) == SUBREG)
     op = SUBREG_REG (op);
 
@@ -2291,9 +2302,12 @@ soft_df_operand (op, mode)
   if (s_register_operand (op, mode))
     return TRUE;
 
+  if (mode != VOIDmode && GET_MODE (op) != mode)
+    return FALSE;
+
   if (GET_CODE (op) == SUBREG)
     op = SUBREG_REG (op);
-
+  
   switch (GET_CODE (op))
     {
     case CONST_DOUBLE: