i386.md (length_immediate): Do not refer to insn address.
authorJan Hubicka <hubicka@gcc.gnu.org>
Tue, 19 Nov 2002 22:52:40 +0000 (22:52 +0000)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 19 Nov 2002 22:52:40 +0000 (22:52 +0000)
* i386.md (length_immediate): Do not refer to insn address.
(jcc*, jmp patterns):  Compute length explicitly.

From-SVN: r59279

gcc/ChangeLog
gcc/config/i386/i386.md

index 91f8dc988607c70b11674fa29612ad7efad966d8..3fa0f79a28e6d13442c2fa028ee85c2b67cc58bb 100644 (file)
@@ -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
index f50a52461b26ac62111702f786c987b58324d523..befbfe49569700d34cac46ec35157f5098ae4ef7 100644 (file)
           (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")))
   "%+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)
   "%+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 
   ""
   "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"
                                    (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)