* recog.c (push_operand): Recognize new format of push instructions.
authorJan Hubicka <jh@suse.cz>
Wed, 21 Mar 2001 17:54:00 +0000 (18:54 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 21 Mar 2001 17:54:00 +0000 (17:54 +0000)
From-SVN: r40694

gcc/ChangeLog
gcc/recog.c

index 90ab387..15dabb0 100644 (file)
@@ -1,3 +1,7 @@
+Wed Mar 21 18:51:19 CET 2001  Jan Hubicka  <jh@suse.cz>
+
+       * recog.c (push_operand): Recognize new format of push instructions.
+
 Wed Mar 21 10:53:57 CET 2001  Jan Hubicka  <jh@suse.cz>
 
        * i386.md (pushqi1): New.
index bf8a3e3..195d3f4 100644 (file)
@@ -1358,8 +1358,26 @@ push_operand (op, mode)
 
   op = XEXP (op, 0);
 
-  if (GET_CODE (op) != STACK_PUSH_CODE)
-    return 0;
+  if (PUSH_ROUNDING (GET_MODE_SIZE (mode)) == GET_MODE_SIZE (mode))
+    {
+      if (GET_CODE (op) != STACK_PUSH_CODE)
+       return 0;
+    }
+  else
+    {
+      int rounded_size = PUSH_ROUNDING (GET_MODE_SIZE (mode));
+      if (GET_CODE (op) != PRE_MODIFY
+         || GET_CODE (XEXP (op, 1)) != PLUS
+         || XEXP (XEXP (op, 1), 0) != XEXP (op, 0)
+         || GET_CODE (XEXP (XEXP (op, 1), 1)) != CONST_INT
+#ifdef STACK_GROWS_DOWNWARD
+         || INTVAL (XEXP (XEXP (op, 1), 1)) != -rounded_size
+#else
+         || INTVAL (XEXP (XEXP (op, 1), 1)) != rounded_size
+#endif
+         )
+       return 0;
+    }
 
   return XEXP (op, 0) == stack_pointer_rtx;
 }