aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@gcc.gnu.org>2002-11-19 22:52:40 +0000
committerJan Hubicka <hubicka@gcc.gnu.org>2002-11-19 22:52:40 +0000
commitefcc70370b9319ec419e220cece0e8c82642c298 (patch)
tree3b90df3d843a74e136e75315026cbfe3646fa6df /gcc
parentda98b11a83c2d996b984bdb19d50d24b853ae120 (diff)
downloadgcc-efcc70370b9319ec419e220cece0e8c82642c298.zip
gcc-efcc70370b9319ec419e220cece0e8c82642c298.tar.gz
gcc-efcc70370b9319ec419e220cece0e8c82642c298.tar.bz2
i386.md (length_immediate): Do not refer to insn address.
* i386.md (length_immediate): Do not refer to insn address. (jcc*, jmp patterns): Compute length explicitly. From-SVN: r59279
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/i386.md39
2 files changed, 25 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 91f8dc9..3fa0f79 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,9 @@
-2002-11-19  Eric Botcazou  <ebotcazou@libertysurf.fr>
+Tue Nov 19 23:50:56 CET 2002 Jan Hubicka <jh@suse.cz>
+
+ * i386.md (length_immediate): Do not refer to insn address.
+ (jcc*, jmp patterns): Compute length explicitly.
+
+2002-11-19 Eric Botcazou <ebotcazou@libertysurf.fr>
PR c/8588
* optabs.c (expand_binop): Convert CONST_INTs in shift
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index f50a524..befbfe4 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -187,13 +187,10 @@
(if_then_else (match_operand 1 "constant_call_address_operand" "")
(const_int 4)
(const_int 0))
+ ;; We don't know the size before shorten_branches. Expect
+ ;; the instruction to fit for better scheduling.
(eq_attr "type" "ibr")
- (if_then_else (and (ge (minus (match_dup 0) (pc))
- (const_int -128))
- (lt (minus (match_dup 0) (pc))
- (const_int 124)))
- (const_int 1)
- (const_int 4))
+ (const_int 1)
]
(symbol_ref "/* Update immediate_length and other attributes! */
abort(),1")))
@@ -12840,13 +12837,13 @@
"%+j%C1\t%l0"
[(set_attr "type" "ibr")
(set_attr "modrm" "0")
- (set (attr "prefix_0f")
+ (set (attr "length")
(if_then_else (and (ge (minus (match_dup 0) (pc))
(const_int -128))
(lt (minus (match_dup 0) (pc))
(const_int 124)))
- (const_int 0)
- (const_int 1)))])
+ (const_int 2)
+ (const_int 6)))])
(define_insn "*jcc_2"
[(set (pc)
@@ -12858,13 +12855,13 @@
"%+j%c1\t%l0"
[(set_attr "type" "ibr")
(set_attr "modrm" "0")
- (set (attr "prefix_0f")
+ (set (attr "length")
(if_then_else (and (ge (minus (match_dup 0) (pc))
(const_int -128))
(lt (minus (match_dup 0) (pc))
(const_int 124)))
- (const_int 0)
- (const_int 1)))])
+ (const_int 2)
+ (const_int 6)))])
;; In general it is not safe to assume too much about CCmode registers,
;; so simplify-rtx stops when it sees a second one. Under certain
@@ -13125,6 +13122,13 @@
""
"jmp\t%l0"
[(set_attr "type" "ibr")
+ (set (attr "length")
+ (if_then_else (and (ge (minus (match_dup 0) (pc))
+ (const_int -128))
+ (lt (minus (match_dup 0) (pc))
+ (const_int 124)))
+ (const_int 2)
+ (const_int 5)))
(set_attr "modrm" "0")])
(define_expand "indirect_jump"
@@ -13251,14 +13255,9 @@
(const_int 124))))
(const_int 2)
(const_int 16)))
- (set (attr "type")
- (if_then_else (and (eq_attr "alternative" "0")
- (and (ge (minus (match_dup 0) (pc))
- (const_int -128))
- (lt (minus (match_dup 0) (pc))
- (const_int 124))))
- (const_string "ibr")
- (const_string "multi")))])
+ ;; We don't know the type before shorten branches. Optimistically expect
+ ;; the loop instruction to match.
+ (set (attr "type") (const_string "ibr"))])
(define_split
[(set (pc)