* pa.md: Add 2nd reload peephole somehow omitted from Nov27 changes.
authorJeff Law <law@gcc.gnu.org>
Sun, 17 Dec 1995 19:32:56 +0000 (12:32 -0700)
committerJeff Law <law@gcc.gnu.org>
Sun, 17 Dec 1995 19:32:56 +0000 (12:32 -0700)
From-SVN: r10791

gcc/config/pa/pa.md

index b758aa876fda4f876f79b86bd50882824ee40063..80f5db3e201bfaaa195cae14bdb05228e8494877 100644 (file)
   return \"\";
 }")
 
+(define_peephole
+  [(set (match_operand 0 "register_operand" "f")
+       (match_operand 1 "reg_or_nonsymb_mem_operand" ""))
+   (set (match_operand 2 "register_operand" "f")
+       (match_dup 1))]
+  "! TARGET_SOFT_FLOAT
+   && GET_CODE (operands[1]) == MEM
+   && ! MEM_VOLATILE_P (operands[1])
+   && GET_MODE (operands[0]) == GET_MODE (operands[1])
+   && GET_MODE (operands[0]) == GET_MODE (operands[2])
+   && GET_MODE (operands[0]) == DFmode
+   && REGNO_REG_CLASS (REGNO (operands[1]))
+      == REGNO_REG_CLASS (REGNO (operands[2]))"
+  "*
+{
+  enum machine_mode mode = GET_MODE (operands[0]);
+  rtx xoperands[2];
+
+  if (FP_REG_P (operands[0]))
+    output_asm_insn (output_fp_move_double (operands), operands);
+  else
+    output_asm_insn (output_move_double (operands), operands);
+
+  xoperands[0] = operands[2];
+  xoperands[1] = operands[0];
+      
+  if (FP_REG_P (xoperands[1]))
+    output_asm_insn (output_fp_move_double (xoperands), xoperands);
+  else
+    output_asm_insn (output_move_double (xoperands), xoperands);
+
+  return \"\";
+}")
+
 ;; Flush the I and D cache line found at the address in operand 0.
 ;; This is used by the trampoline code for nested functions.
 ;; So long as the trampoline itself is less than 32 bytes this