Ping, please ?

Patch re-attached for convenience.

Thanks in advance!

Best Regards,

Olivier

> On 24 Sep 2020, at 11:46, Olivier Hainque <hain...@adacore.com> wrote:
> 
> Re-proposing this patch after re-testing with a recent
> mainline on on aarch64-linux (bootstrap and regression test
> with --enable-languages=all), and more than a year of in-house
> use in production for a few aarch64 ports on a gcc-9 base.
> 
> The change moves the definitions of PROBE_STACK_FIRST_REG
> and PROBE_STACK_SECOND_REG to a more appropriate place for such
> items (here, in aarch64.md as suggested by Richard), and adjusts
> their value from r9/r10 to r10/r11 to free r9 for a possibly
> more general purpose (e.g. as a static chain at least on targets
> which have a private use of r18, such as Windows or Vxworks).
> 
> OK to commit?
> 
> Thanks in advance,
> 
> With Kind Regards,
> 
> Olivier
> 
> 2020-11-07  Olivier Hainque  <hain...@adacore.com>
> 
>       * config/aarch64/aarch64.md: Define PROBE_STACK_FIRST_REGNUM
>       and PROBE_STACK_SECOND_REGNUM constants, designating r10/r11.
>       Replacements for the PROBE_STACK_FIRST/SECOND_REG constants in
>       aarch64.c.
>       * config/aarch64/aarch64.c (PROBE_STACK_FIRST_REG): Remove.
>       (PROBE_STACK_SECOND_REG): Remove.
>       (aarch64_emit_probe_stack_range): Adjust to the _REG -> _REGNUM
>       suffix update for PROBE_STACK register numbers.

diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index b6d74496cd0..5e94e4b1a79 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -6200,10 +6200,6 @@ aarch64_libgcc_cmp_return_mode (void)
 #error Cannot use simple address calculation for stack probing
 #endif
 
-/* The pair of scratch registers used for stack probing.  */
-#define PROBE_STACK_FIRST_REG  R9_REGNUM
-#define PROBE_STACK_SECOND_REG R10_REGNUM
-
 /* Emit code to probe a range of stack addresses from FIRST to FIRST+POLY_SIZE,
    inclusive.  These are offsets from the current stack pointer.  */
 
@@ -6217,7 +6213,7 @@ aarch64_emit_probe_stack_range (HOST_WIDE_INT first, 
poly_int64 poly_size)
       return;
     }
 
-  rtx reg1 = gen_rtx_REG (Pmode, PROBE_STACK_FIRST_REG);
+  rtx reg1 = gen_rtx_REG (Pmode, PROBE_STACK_FIRST_REGNUM);
 
   /* See the same assertion on PROBE_INTERVAL above.  */
   gcc_assert ((first % ARITH_FACTOR) == 0);
@@ -6275,7 +6271,7 @@ aarch64_emit_probe_stack_range (HOST_WIDE_INT first, 
poly_int64 poly_size)
      equality test for the loop condition.  */
   else
     {
-      rtx reg2 = gen_rtx_REG (Pmode, PROBE_STACK_SECOND_REG);
+      rtx reg2 = gen_rtx_REG (Pmode, PROBE_STACK_SECOND_REGNUM);
 
       /* Step 1: round SIZE to the previous multiple of the interval.  */
 
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 9b20dd0b1a0..df5533e113b 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -111,6 +111,10 @@
     ;; "FFR token": a fake register used for representing the scheduling
     ;; restrictions on FFR-related operations.
     (FFRT_REGNUM       85)
+    ;; The pair of scratch registers used for stack probing with -fstack-check.
+    ;; Leave R9 alone as a possible choice for the static chain.
+    (PROBE_STACK_FIRST_REGNUM  10)
+    (PROBE_STACK_SECOND_REGNUM 11)
     ;; Scratch register used by stack clash protection to calculate
     ;; SVE CFA offsets during probing.
     (STACK_CLASH_SVE_CFA_REGNUM 11)

Reply via email to