OSDN Git Service

* pa.md (adddi3): Change predicate of operand 2 to adddi3_operand
authordanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 11 Jul 2002 18:47:45 +0000 (18:47 +0000)
committerdanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 11 Jul 2002 18:47:45 +0000 (18:47 +0000)
and delete code to force constant to register.
* pa-protos.h (adddi3_operand): Add prototype.
* pa.c (adddi3_operand): New function.

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

gcc/ChangeLog
gcc/config/pa/pa-protos.h
gcc/config/pa/pa.c
gcc/config/pa/pa.md

index 4bd4085..ff52771 100644 (file)
@@ -1,3 +1,10 @@
+2002-07-11  John David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+       * pa.md (adddi3): Change predicate of operand 2 to adddi3_operand
+       and delete code to force constant to register.
+       * pa-protos.h (adddi3_operand): Add prototype.
+       * pa.c (adddi3_operand): New function.
+
 2002-07-11  Roger Sayle  <roger@eyesopen.com>
 
        * c-decl.c (duplicate_decls): Preserve the noreturn attribute on
index a21a383..8f1c330 100644 (file)
@@ -63,6 +63,7 @@ extern rtx legitimize_pic_address PARAMS ((rtx, enum machine_mode, rtx));
 extern struct rtx_def *gen_cmp_fp PARAMS ((enum rtx_code, rtx, rtx));
 extern void hppa_encode_label PARAMS ((rtx));
 extern int arith11_operand PARAMS ((rtx, enum machine_mode));
+extern int adddi3_operand PARAMS ((rtx, enum machine_mode));
 extern int symbolic_expression_p PARAMS ((rtx));
 extern int hppa_address_cost PARAMS ((rtx));
 extern int symbolic_memory_operand PARAMS ((rtx, enum machine_mode));
index c06a7b4..7619f2b 100644 (file)
@@ -578,6 +578,18 @@ arith11_operand (op, mode)
          || (GET_CODE (op) == CONST_INT && INT_11_BITS (op)));
 }
 
+/* Return truth value of whether OP can be used as an operand in a
+   adddi3 insn.  */
+int
+adddi3_operand (op, mode)
+     rtx op;
+     enum machine_mode mode;
+{
+  return (register_operand (op, mode)
+         || (GET_CODE (op) == CONST_INT
+             && (TARGET_64BIT ? INT_14_BITS (op) : INT_11_BITS (op))));
+}
+
 /* A constant integer suitable for use in a PRE_MODIFY memory
    reference.  */
 int
index 10c0462..73f2831 100644 (file)
 (define_expand "adddi3"
   [(set (match_operand:DI 0 "register_operand" "")
        (plus:DI (match_operand:DI 1 "register_operand" "")
-                (match_operand:DI 2 "arith_operand" "")))]
+                (match_operand:DI 2 "adddi3_operand" "")))]
   ""
-  "
-{
-  if (!TARGET_64BIT
-      && GET_CODE (operands[2]) == CONST_INT
-      && !VAL_11_BITS_P (INTVAL (operands[2])))
-    operands[2] = force_reg (DImode, operands[2]);
-}")
+  "")
 
 (define_insn ""
   [(set (match_operand:DI 0 "register_operand" "=r")