From a2391c6a3515ecf759f126ba37851b02122c8525 Mon Sep 17 00:00:00 2001 From: Jie Zhang Date: Thu, 19 May 2005 08:42:26 +0000 Subject: [PATCH] bfin.c (branch_dest): Add comment why it's necessary. * config/bfin/bfin.c (branch_dest): Add comment why it's necessary. * config/bfin/bfin.md (attr "length" default): Change the offset of forward conditional branch of length 4 from 4096 to 4092. Co-Authored-By: Bernd Schmidt From-SVN: r99966 --- gcc/ChangeLog | 8 ++++++++ gcc/config/bfin/bfin.c | 5 ++++- gcc/config/bfin/bfin.md | 6 ++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4722b924d0c..9511f564213 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-05-18 Jie Zhang + Bernd Schmidt + + * config/bfin/bfin.c (branch_dest): Add comment why it's + necessary. + * config/bfin/bfin.md (attr "length" default): Change the offset of + forward conditional branch of length 4 from 4096 to 4092. + 2005-05-19 Jan Beulich * unwind-compat.c: Include tconfig.h and tsystem.h. diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c index a9b59f2bbda..653c2003104 100644 --- a/gcc/config/bfin/bfin.c +++ b/gcc/config/bfin/bfin.c @@ -1751,7 +1751,10 @@ override_options (void) flag_schedule_insns = 0; } -/* Return the destination address of BRANCH. */ +/* Return the destination address of BRANCH. + We need to use this instead of get_attr_length, because the + cbranch_with_nops pattern conservatively sets its length to 6, and + we still prefer to use shorter sequences. */ static int branch_dest (rtx branch) diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md index f0ff33f6bf9..986e649e3ca 100644 --- a/gcc/config/bfin/bfin.md +++ b/gcc/config/bfin/bfin.md @@ -173,7 +173,9 @@ ;;; if cc jmp; jump.[sl] offset ;;; offset of jump.[sl] is from the jump instruction but ;;; gcc calculates length from the if cc jmp instruction -;;; hence our range is (-4094, 4096) instead of (-4096, 4094) for a br +;;; furthermore gcc takes the end address of the branch instruction +;;; as (pc) for a forward branch +;;; hence our range is (-4094, 4092) instead of (-4096, 4094) for a br ;;; ;;; The way the (pc) rtx works in these calculations is somewhat odd; ;;; for backward branches it's the address of the current instruction, @@ -210,7 +212,7 @@ (ge (minus (match_dup 3) (pc)) (const_int -1024))) (const_int 2) (and - (le (minus (match_dup 3) (pc)) (const_int 4096)) + (le (minus (match_dup 3) (pc)) (const_int 4092)) (ge (minus (match_dup 3) (pc)) (const_int -4094))) (const_int 4)] (const_int 6)) -- 2.30.2