OSDN Git Service

* config/bfin/bfin.c (branch_dest): Add comment why it's
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 19 May 2005 08:42:26 +0000 (08:42 +0000)
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 19 May 2005 08:42:26 +0000 (08:42 +0000)
necessary.
* config/bfin/bfin.md (attr "length" default): Change the offset of
forward conditional branch of length 4 from 4096 to 4092.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@99966 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 4722b92..9511f56 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 a9b59f2..653c200 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 f0ff33f..986e649 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))