OSDN Git Service

* calls.c (expand_call): Do NO_DEFER_POP unconditionally once
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 12 Apr 2000 13:56:19 +0000 (13:56 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 12 Apr 2000 13:56:19 +0000 (13:56 +0000)
stack is propertly aligned; add sanity checking for aligned
stack pointer.
(expand_library_call_value_1): Add sanity checking for aligned
stack pointer.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33106 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/calls.c

index 4a9e95b..c36a8d3 100644 (file)
@@ -1,3 +1,11 @@
+Wed Apr 12 15:54:11 MET DST 2000  Jan Hubicka  <jh@suse.cz>
+
+       * calls.c (expand_call): Do NO_DEFER_POP unconditionally once
+       stack is propertly aligned; add sanity checking for aligned
+       stack pointer.
+       (expand_library_call_value_1): Add sanity checking for aligned
+       stack pointer.
+
 Wed Apr 12 07:51:54 2000  Catherine Moore  <clm@cygnus.com>
  
         * calls.c (emit_library_call_value_1): Change 3rd arg to
index d4fef87..611eff0 100644 (file)
@@ -2671,10 +2671,10 @@ expand_call (exp, target, ignore)
          else if (argblock == 0)
            anti_adjust_stack (GEN_INT (args_size.constant
                                        - unadjusted_args_size));
-         /* Now that the stack is properly aligned, pops can't safely
-            be deferred during the evaluation of the arguments.  */
-         NO_DEFER_POP;
        }
+      /* Now that the stack is properly aligned, pops can't safely
+        be deferred during the evaluation of the arguments.  */
+      NO_DEFER_POP;
 #endif
 
       /* Don't try to defer pops if preallocating, not even from the first arg,
@@ -2800,6 +2800,12 @@ expand_call (exp, target, ignore)
       /* All arguments and registers used for the call must be set up by
         now!  */
 
+#ifdef PREFERRED_STACK_BOUNDARY
+      /* Stack must to be properly aligned now.  */
+      if (stack_pointer_delta & (preferred_stack_boundary / BITS_PER_UNIT - 1))
+       abort();
+#endif
+
       /* Generate the actual call instruction.  */
       emit_call_1 (funexp, fndecl, funtype, unadjusted_args_size,
                   args_size.constant, struct_value_size,
@@ -3692,6 +3698,12 @@ emit_library_call_value_1 (retval, orgfun, value, no_queue, outmode, nargs, p)
      cse'ing of library calls could delete a call and leave the pop.  */
   NO_DEFER_POP;
 
+#ifdef PREFERRED_STACK_BOUNDARY
+  /* Stack must to be properly aligned now.  */
+  if (stack_pointer_delta & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1))
+    abort();
+#endif
+
   /* We pass the old value of inhibit_defer_pop + 1 to emit_call_1, which
      will set inhibit_defer_pop to that value.  */
   /* The return type is needed to decide how many bytes the function pops.