OSDN Git Service

* config/i386/i386.md (adddi_4_rex64, addsi_4, addhi_4): For
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 21 May 2009 13:32:47 +0000 (13:32 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 21 May 2009 13:32:47 +0000 (13:32 +0000)
operand2 -128 override length_immediate attribute to 1.
* config/i386/predicates.md (constm128_operand): New predicate.

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

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

index 29fd61b..3c4c882 100644 (file)
@@ -1,5 +1,9 @@
 2009-05-21  Jakub Jelinek  <jakub@redhat.com>
 
+       * config/i386/i386.md (adddi_4_rex64, addsi_4, addhi_4): For
+       operand2 -128 override length_immediate attribute to 1.
+       * config/i386/predicates.md (constm128_operand): New predicate.
+
        * config/i386/i386.c (memory_address_length): Handle %r12
        the same as %rsp and %r13 the same as %rbp.  For %rsp and %rbp
        also check REGNO.
index 6d439f0..596f770 100644 (file)
      (if_then_else (match_operand:DI 2 "incdec_operand" "")
        (const_string "incdec")
        (const_string "alu")))
+   (set (attr "length_immediate")
+      (if_then_else
+       (and (eq_attr "type" "alu") (match_operand 2 "constm128_operand" ""))
+       (const_string "1")
+       (const_string "*")))
    (set_attr "mode" "DI")])
 
 (define_insn "*adddi_5_rex64"
      (if_then_else (match_operand:SI 2 "incdec_operand" "")
        (const_string "incdec")
        (const_string "alu")))
+   (set (attr "length_immediate")
+      (if_then_else
+       (and (eq_attr "type" "alu") (match_operand 2 "constm128_operand" ""))
+       (const_string "1")
+       (const_string "*")))
    (set_attr "mode" "SI")])
 
 (define_insn "*addsi_5"
      (if_then_else (match_operand:HI 2 "incdec_operand" "")
        (const_string "incdec")
        (const_string "alu")))
+   (set (attr "length_immediate")
+      (if_then_else
+       (and (eq_attr "type" "alu") (match_operand 2 "constm128_operand" ""))
+       (const_string "1")
+       (const_string "*")))
    (set_attr "mode" "SI")])
 
 
index fc89ec4..c9921d6 100644 (file)
   (and (match_code "const_int")
        (match_test "INTVAL (op) == 128")))
 
+;; Match exactly -128.
+(define_predicate "constm128_operand"
+  (and (match_code "const_int")
+       (match_test "INTVAL (op) == -128")))
+
 ;; Match 2, 4, or 8.  Used for leal multiplicands.
 (define_predicate "const248_operand"
   (match_code "const_int")