OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / explow.c
index 4d1d24e..09f786a 100644 (file)
@@ -24,6 +24,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
+#include "diagnostic-core.h"
 #include "toplev.h"
 #include "rtl.h"
 #include "tree.h"
@@ -33,6 +34,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "function.h"
 #include "expr.h"
 #include "optabs.h"
+#include "libfuncs.h"
 #include "hard-reg-set.h"
 #include "insn-config.h"
 #include "ggc.h"
@@ -42,7 +44,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "output.h"
 
 static rtx break_out_memory_refs (rtx);
-static void emit_stack_probe (rtx);
 
 
 /* Truncate and perhaps sign-extend C as appropriate for MODE.  */
@@ -1346,14 +1347,15 @@ allocate_dynamic_stack_space (rtx size, rtx target, int known_align)
 static GTY(()) rtx stack_check_libfunc;
 
 void
-set_stack_check_libfunc (rtx libfunc)
+set_stack_check_libfunc (const char *libfunc_name)
 {
-  stack_check_libfunc = libfunc;
+  gcc_assert (stack_check_libfunc == NULL_RTX);
+  stack_check_libfunc = gen_rtx_SYMBOL_REF (Pmode, libfunc_name);
 }
 \f
 /* Emit one stack probe at ADDRESS, an address within the stack.  */
 
-static void
+void
 emit_stack_probe (rtx address)
 {
   rtx memref = gen_rtx_MEM (word_mode, address);
@@ -1366,9 +1368,6 @@ emit_stack_probe (rtx address)
     emit_insn (gen_probe_stack (memref));
   else
 #endif
-  if (STACK_CHECK_PROBE_LOAD)
-    emit_move_insn (gen_reg_rtx (word_mode), memref);
-  else
     emit_move_insn (memref, const0_rtx);
 }
 
@@ -1568,7 +1567,7 @@ anti_adjust_stack_and_probe (rtx size, bool adjust_back)
       HOST_WIDE_INT isize = INTVAL (size), i;
       bool first_probe = true;
 
-      /* Adjust SP and probe to PROBE_INTERVAL + N * PROBE_INTERVAL for
+      /* Adjust SP and probe at PROBE_INTERVAL + N * PROBE_INTERVAL for
         values of N from 1 until it exceeds SIZE.  If only one probe is
         needed, this will not generate any code.  Then adjust and probe
         to PROBE_INTERVAL + SIZE.  */
@@ -1624,13 +1623,13 @@ anti_adjust_stack_and_probe (rtx size, bool adjust_back)
 
       /* Step 3: the loop
 
-         while (SP != LAST_ADDR)
-           {
-             SP = SP + PROBE_INTERVAL
-             probe at SP
-           }
+        while (SP != LAST_ADDR)
+          {
+            SP = SP + PROBE_INTERVAL
+            probe at SP
+          }
 
-        adjusts SP and probes to PROBE_INTERVAL + N * PROBE_INTERVAL for
+        adjusts SP and probes at PROBE_INTERVAL + N * PROBE_INTERVAL for
         values of N from 1 until it is equal to ROUNDED_SIZE.  */
 
       emit_label (loop_lab);
@@ -1648,7 +1647,7 @@ anti_adjust_stack_and_probe (rtx size, bool adjust_back)
       emit_label (end_lab);
 
 
-      /* Step 4: adjust SP and probe to PROBE_INTERVAL + SIZE if we cannot
+      /* Step 4: adjust SP and probe at PROBE_INTERVAL + SIZE if we cannot
         assert at compile-time that SIZE is equal to ROUNDED_SIZE.  */
 
       /* TEMP = SIZE - ROUNDED_SIZE.  */