arm.c (arm_emit_probe_stack_range): Adjust comment.
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 6 Oct 2015 16:39:00 +0000 (16:39 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 6 Oct 2015 16:39:00 +0000 (16:39 +0000)
* config/arm/arm.c (arm_emit_probe_stack_range): Adjust comment.
(output_probe_stack_range): Rotate the loop and simplify.
(thumb1_expand_prologue): Tweak sorry message.
* config/arm/arm.md (probe_stack): Use bare string.

From-SVN: r228534

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

index 2de844f6eeb02cfa0329631224329f521c8af919..6204617f0715a4df37f9eed1393e3d150e304869 100644 (file)
@@ -1,3 +1,10 @@
+2015-10-06  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * config/arm/arm.c (arm_emit_probe_stack_range): Adjust comment.
+       (output_probe_stack_range): Rotate the loop and simplify.
+       (thumb1_expand_prologue): Tweak sorry message.
+       * config/arm/arm.md (probe_stack): Use bare string.
+
 2015-10-06  Nick Clifton  <nickc@redhat.com>
 
        * config.gcc (lm32-elf): Add newlib-stdint.h to tm_file.
index 87e55e9e35082fbdb0cf1172a1b0343ba23927d5..0bf1164845cc7bbb34de4f9e3bab74c855c2800c 100644 (file)
@@ -21262,11 +21262,12 @@ arm_emit_probe_stack_range (HOST_WIDE_INT first, HOST_WIDE_INT size,
 
       /* Step 3: the loop
 
-        while (TEST_ADDR != LAST_ADDR)
+        do
           {
             TEST_ADDR = TEST_ADDR + PROBE_INTERVAL
             probe at TEST_ADDR
           }
+        while (TEST_ADDR != LAST_ADDR)
 
         probes at FIRST + N * PROBE_INTERVAL for values of N from 1
         until it is equal to ROUNDED_SIZE.  */
@@ -21311,22 +21312,22 @@ output_probe_stack_range (rtx reg1, rtx reg2)
 
   ASM_GENERATE_INTERNAL_LABEL (loop_lab, "LPSRL", labelno++);
 
+  /* Loop.  */
   ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, loop_lab);
 
-   /* Test if TEST_ADDR == LAST_ADDR.  */
+  /* TEST_ADDR = TEST_ADDR + PROBE_INTERVAL.  */
   xops[0] = reg1;
-  xops[1] = reg2;
-  output_asm_insn ("cmp\t%0, %1", xops);
+  xops[1] = GEN_INT (PROBE_INTERVAL);
+  output_asm_insn ("sub\t%0, %0, %1", xops);
 
-  if (TARGET_THUMB2)
-    fputs ("\tittt\tne\n", asm_out_file);
+  /* Probe at TEST_ADDR.  */
+  output_asm_insn ("str\tr0, [%0, #0]", xops);
 
-  /* TEST_ADDR = TEST_ADDR + PROBE_INTERVAL.  */
-  xops[1] = GEN_INT (PROBE_INTERVAL);
-  output_asm_insn ("subne\t%0, %0, %1", xops);
+  /* Test if TEST_ADDR == LAST_ADDR.  */
+  xops[1] = reg2;
+  output_asm_insn ("cmp\t%0, %1", xops);
 
-  /* Probe at TEST_ADDR and branch.  */
-  output_asm_insn ("strne\tr0, [%0, #0]", xops);
+  /* Branch.  */
   fputs ("\tbne\t", asm_out_file);
   assemble_name_raw (asm_out_file, loop_lab);
   fputc ('\n', asm_out_file);
@@ -24869,7 +24870,7 @@ thumb1_expand_prologue (void)
 
   /* If we have a frame, then do stack checking.  FIXME: not implemented.  */
   if (flag_stack_check == STATIC_BUILTIN_STACK_CHECK && size)
-    sorry ("-fstack-check=specific for THUMB1");
+    sorry ("-fstack-check=specific for Thumb-1");
 
   amount = offsets->outgoing_args - offsets->saved_regs;
   amount -= 4 * thumb1_extra_regs_pushed (offsets, true);
index b4c555be5927e30cb2b6e369feb0415c274cb353..c5985bbb50665085d5a8e1e39cc276237a361bbc 100644 (file)
   [(set (match_operand 0 "memory_operand" "=m")
         (unspec [(const_int 0)] UNSPEC_PROBE_STACK))]
   "TARGET_32BIT"
-{
-  return "str%?\\tr0, %0";
-}
+  "str%?\\tr0, %0"
   [(set_attr "type" "store1")
    (set_attr "predicable" "yes")]
 )