OSDN Git Service

PR target/30039
[pf3gnuchains/gcc-fork.git] / gcc / config / pa / pa.md
index 0853bb8..3b5a5fc 100644 (file)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 ;; Branch on Variable Bit patterns.
 (define_insn ""
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 (define_insn ""
   [(set (pc)
               (const_int MAX_17BIT_OFFSET))
           (const_int 8)
           (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0))
-          (const_int 28)
+          (const_int 24)
           (eq (symbol_ref "flag_pic") (const_int 0))
-          (const_int 24)]
-         (const_int 32)))])
+          (const_int 20)]
+         (const_int 28)))])
 
 ;; Floating point branches
 
   switch (GET_CODE (op1))
     {
     case CONST_INT:
+#if HOST_BITS_PER_WIDE_INT <= 32
       operands[0] = operand_subword (op0, 1, 0, DImode);
       output_asm_insn (\"ldil L'%1,%0\", operands);
 
        output_asm_insn (\"ldi -1,%0\", operands);
       else
        output_asm_insn (\"ldi 0,%0\", operands);
+#else
+      operands[0] = operand_subword (op0, 1, 0, DImode);
+      operands[1] = GEN_INT (INTVAL (op1) & 0xffffffff);
+      output_asm_insn (\"ldil L'%1,%0\", operands);
+
+      operands[0] = operand_subword (op0, 0, 0, DImode);
+      operands[1] = GEN_INT (INTVAL (op1) >> 32);
+      output_asm_insn (singlemove_string (operands), operands);
+#endif
       break;
 
     case CONST_DOUBLE:
   return \"\";
 }"
   [(set_attr "type" "move")
-   (set_attr "length" "8")])
+   (set_attr "length" "12")])
 
 (define_insn ""
   [(set (match_operand:DI 0 "move_dest_operand"
      handle it correctly.  */
   if (GET_CODE (operands[2]) == CONST_DOUBLE)
     operands[2] = GEN_INT (CONST_DOUBLE_LOW (operands[2]));
+  else if (HOST_BITS_PER_WIDE_INT > 32
+          && GET_CODE (operands[2]) == CONST_INT)
+    operands[2] = GEN_INT (INTVAL (operands[2]) & 0xffffffff);
   if (which_alternative == 1)
     output_asm_insn (\"copy %1,%0\", operands);
   return \"ldo R'%G2(%R1),%R0\";