Karl Meakin <karl.mea...@arm.com> writes: > Extract the hardcoded values for the minimum PC-relative displacements > into named constants and document them. > > gcc/ChangeLog: > > * config/aarch64/aarch64.md (BRANCH_LEN_P_128MiB): New constant. > (BRANCH_LEN_N_128MiB): likewise. > (BRANCH_LEN_P_1MiB): likewise. > (BRANCH_LEN_N_1MiB): likewise. > (BRANCH_LEN_P_32KiB): likewise. > (BRANCH_LEN_N_32KiB): likewise. > (BRANCH_LEN_P_1KiB): likewise. > (BRANCH_LEN_N_1KiB): likewise. > --- > gcc/config/aarch64/aarch64.md | 68 ++++++++++++++++++++++++++--------- > 1 file changed, 52 insertions(+), 16 deletions(-) > > diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md > index 23775ec58ca..ca5bd96a754 100644 > --- a/gcc/config/aarch64/aarch64.md > +++ b/gcc/config/aarch64/aarch64.md > @@ -696,7 +696,27 @@ (define_insn "jump" > [(set_attr "type" "branch")] > ) > > +;; Maximum PC-relative positive/negative displacements for various branching > +;; instructions. > +(define_constants > + [ > + ;; +/- 128MiB. Used by B, BL. > + (BRANCH_LEN_P_128Mib 134217724) > + (BRANCH_LEN_N_128Mib -134217728)
It'd be good to use the same capitalisation style in the comments, changelog, and identifiers, so MiB rather than Mib and KiB rather than Kib. Otherwise +1 to Kyrill's ok. Very minor, but... > + > + ;; +/- 1MiB. Used by B.<cond>, CBZ, CBNZ. > + (BRANCH_LEN_P_1Mib 1048572) > + (BRANCH_LEN_N_1Mib -1048576) > > + ;; +/- 32KiB. Used by TBZ, TBNZ. > + (BRANCH_LEN_P_32Kib 32764) > + (BRANCH_LEN_N_32Kib -32768) > + > + ;; +/- 1KiB. Used by CBB<cond>, CBH<cond>, CB<cond>. > + (BRANCH_LEN_P_1Kib 1020) > + (BRANCH_LEN_N_1Kib -1024) ...from a staging perspective, it might be better to put this in patch 8, with the code that uses it. Thanks, Richard > + ] > +) > > ;; ------------------------------------------------------------------- > ;; Conditional jumps > @@ -760,13 +780,17 @@ (define_insn "aarch64_bcond" > } > [(set_attr "type" "branch") > (set (attr "length") > - (if_then_else (and (ge (minus (match_dup 2) (pc)) (const_int -1048576)) > - (lt (minus (match_dup 2) (pc)) (const_int 1048572))) > + (if_then_else (and (ge (minus (match_dup 2) (pc)) > + (const_int BRANCH_LEN_N_1Mib)) > + (lt (minus (match_dup 2) (pc)) > + (const_int BRANCH_LEN_P_1Mib))) > (const_int 4) > (const_int 8))) > (set (attr "far_branch") > - (if_then_else (and (ge (minus (match_dup 2) (pc)) (const_int -1048576)) > - (lt (minus (match_dup 2) (pc)) (const_int 1048572))) > + (if_then_else (and (ge (minus (match_dup 2) (pc)) > + (const_int BRANCH_LEN_N_1Mib)) > + (lt (minus (match_dup 2) (pc)) > + (const_int BRANCH_LEN_P_1Mib))) > (const_int 0) > (const_int 1)))] > ) > @@ -823,13 +847,17 @@ (define_insn "aarch64_cb<optab><mode>1" > } > [(set_attr "type" "branch") > (set (attr "length") > - (if_then_else (and (ge (minus (match_dup 1) (pc)) (const_int -1048576)) > - (lt (minus (match_dup 1) (pc)) (const_int 1048572))) > + (if_then_else (and (ge (minus (match_dup 1) (pc)) > + (const_int BRANCH_LEN_N_1Mib)) > + (lt (minus (match_dup 1) (pc)) > + (const_int BRANCH_LEN_P_1Mib))) > (const_int 4) > (const_int 8))) > (set (attr "far_branch") > - (if_then_else (and (ge (minus (match_dup 2) (pc)) (const_int -1048576)) > - (lt (minus (match_dup 2) (pc)) (const_int 1048572))) > + (if_then_else (and (ge (minus (match_dup 2) (pc)) > + (const_int BRANCH_LEN_N_1Mib)) > + (lt (minus (match_dup 2) (pc)) > + (const_int BRANCH_LEN_P_1Mib))) > (const_int 0) > (const_int 1)))] > ) > @@ -864,13 +892,17 @@ (define_insn "*cb<optab><mode>1" > } > [(set_attr "type" "branch") > (set (attr "length") > - (if_then_else (and (ge (minus (match_dup 1) (pc)) (const_int -32768)) > - (lt (minus (match_dup 1) (pc)) (const_int 32764))) > + (if_then_else (and (ge (minus (match_dup 1) (pc)) > + (const_int BRANCH_LEN_N_32Kib)) > + (lt (minus (match_dup 1) (pc)) > + (const_int BRANCH_LEN_P_32Kib))) > (const_int 4) > (const_int 8))) > (set (attr "far_branch") > - (if_then_else (and (ge (minus (match_dup 1) (pc)) (const_int -1048576)) > - (lt (minus (match_dup 1) (pc)) (const_int 1048572))) > + (if_then_else (and (ge (minus (match_dup 1) (pc)) > + (const_int BRANCH_LEN_N_1Mib)) > + (lt (minus (match_dup 1) (pc)) > + (const_int BRANCH_LEN_P_1Mib))) > (const_int 0) > (const_int 1)))] > ) > @@ -925,13 +957,17 @@ (define_insn "@aarch64_tb<optab><ALLI:mode><GPI:mode>" > } > [(set_attr "type" "branch") > (set (attr "length") > - (if_then_else (and (ge (minus (match_dup 2) (pc)) (const_int -32768)) > - (lt (minus (match_dup 2) (pc)) (const_int 32764))) > + (if_then_else (and (ge (minus (match_dup 2) (pc)) > + (const_int BRANCH_LEN_N_32Kib)) > + (lt (minus (match_dup 2) (pc)) > + (const_int BRANCH_LEN_P_32Kib))) > (const_int 4) > (const_int 8))) > (set (attr "far_branch") > - (if_then_else (and (ge (minus (match_dup 2) (pc)) (const_int -1048576)) > - (lt (minus (match_dup 2) (pc)) (const_int 1048572))) > + (if_then_else (and (ge (minus (match_dup 2) (pc)) > + (const_int BRANCH_LEN_N_1Mib)) > + (lt (minus (match_dup 2) (pc)) > + (const_int BRANCH_LEN_P_1Mib))) > (const_int 0) > (const_int 1)))]