bfin.c (branch_dest): Add comment why it's necessary.
authorJie Zhang <jie.zhang@analog.com>
Thu, 19 May 2005 08:42:26 +0000 (08:42 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Thu, 19 May 2005 08:42:26 +0000 (08:42 +0000)
* 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 <bernd.schmidt@analog.com>
From-SVN: r99966

gcc/ChangeLog
gcc/config/bfin/bfin.c
gcc/config/bfin/bfin.md

index 4722b924d0c84a503a750b2b0864ba709856b7e3..9511f564213d3f203c7b6eb6615f8ee9cbd96bc9 100644 (file)
@@ -1,3 +1,11 @@
+2005-05-18  Jie Zhang  <jie.zhang@analog.com>
+            Bernd Schmidt  <bernd.schmidt@analog.com>
+
+       * 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  <jbeulich@novell.com>
 
        * unwind-compat.c: Include tconfig.h and tsystem.h.
index a9b59f2bbda3b245b2f4cb3771551f114a32c0cf..653c2003104ce3ce35dde9ef46d342462b37eb4c 100644 (file)
@@ -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)
index f0ff33f6bf9ae7e8842d6a46c879dd713c6c5ec3..986e649e3caf0e36c20db2ae19e700478604cbeb 100644 (file)
 ;;;   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,
                    (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))