Move and adjust PROBE_STACK reg definitions for aarch64
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). 2020-11-07 Olivier Hainque <hainque@adacore.com> gcc/ * 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.
This commit is contained in:
parent
58c9de4654
commit
5773855c3f
2 changed files with 9 additions and 6 deletions
|
@ -6272,10 +6272,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. */
|
||||
|
||||
|
@ -6289,7 +6285,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);
|
||||
|
@ -6347,7 +6343,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. */
|
||||
|
||||
|
|
|
@ -111,6 +111,13 @@
|
|||
;; "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.
|
||||
;; Note that the use of these registers is mutually exclusive with the use
|
||||
;; of STACK_CLASH_SVE_CFA_REGNUM, which is for -fstack-clash-protection
|
||||
;; rather than -fstack-check.
|
||||
(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)
|
||||
|
|
Loading…
Add table
Reference in a new issue