From 0f0d6464fafa37dc31c985a0fe68b9becf007673 Mon Sep 17 00:00:00 2001 From: hubicka Date: Tue, 19 Nov 2002 22:52:40 +0000 Subject: [PATCH] * i386.md (length_immediate): Do not refer to insn address. (jcc*, jmp patterns): Compute length explicitly. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@59279 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 ++++++- gcc/config/i386/i386.md | 39 +++++++++++++++++++-------------------- 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   +Tue Nov 19 23:50:56 CET 2002 Jan Hubicka + + * i386.md (length_immediate): Do not refer to insn address. + (jcc*, jmp patterns): Compute length explicitly. + +2002-11-19 Eric Botcazou 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) -- 2.7.4