OSDN Git Service

(reload_insi): New pattern.
authorwood <wood@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 19 Oct 1992 20:59:31 +0000 (20:59 +0000)
committerwood <wood@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 19 Oct 1992 20:59:31 +0000 (20:59 +0000)
(addsi3 pattern for large constants): Delete.  Causes reload trouble.

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

gcc/config/m88k/m88k.md

index 2e26800..5742c09 100644 (file)
@@ -28,7 +28,7 @@
 (define_expand "m88k_sccs_id"
   [(match_operand:SI 0 "" "")]
   ""
-  "{ static char sccs_id[] = \"@(#)m88k.md     2.2.13.3 10/13/92 13:03:43\";
+  "{ static char sccs_id[] = \"@(#)m88k.md     2.2.13.5 10/19/92 10:13:13\";
      FAIL; }")
 \f
 ;; Attribute specifications
   ""
   "
 {
-  if (emit_move_sequence (operands, SImode))
+  if (emit_move_sequence (operands, SImode, 0))
     DONE;
 }")
 
+(define_expand "reload_insi"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (match_operand:SI 1 "general_operand" ""))
+   (clobber (match_operand:SI 2 "register_operand" "=&r"))]
+  ""
+  "
+{
+  if (emit_move_sequence (operands, SImode, operands[2]))
+    DONE;
+
+  /* We don't want the clobber emitted, so handle this ourselves.  */
+  emit_insn (gen_rtx (SET, VOIDmode, operands[0], operands[1]));
+  DONE;
+}")
+
 (define_insn ""
   [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,m,r,r,r,x,x,x,m")
        (match_operand:SI 1 "move_operand" "rI,m,rO,J,M,x,r,x,m,x"))]
   ""
   "
 {
-  if (emit_move_sequence (operands, HImode))
+  if (emit_move_sequence (operands, HImode, 0))
     DONE;
 }")
 
   ""
   "
 {
-  if (emit_move_sequence (operands, QImode))
+  if (emit_move_sequence (operands, QImode, 0))
     DONE;
 }")
 
   ""
   "
 {
-  if (emit_move_sequence (operands, DImode))
+  if (emit_move_sequence (operands, DImode, 0))
     DONE;
 }")
 
   ""
   "
 {
-  if (emit_move_sequence (operands, DFmode))
+  if (emit_move_sequence (operands, DFmode, 0))
     DONE;
 }")
 
   ""
   "
 {
-  if (emit_move_sequence (operands, SFmode))
+  if (emit_move_sequence (operands, SFmode, 0))
     DONE;
 }")
 
   if (GET_CODE (operands[1]) == MEM
       && symbolic_address_p (XEXP (operands[1], 0)))
     operands[1]
-      = legitimize_address (flag_pic, operands[1], gen_reg_rtx (Pmode));
+      = legitimize_address (flag_pic, operands[1], 0, 0);
 }")
 
 (define_insn ""
   if (GET_CODE (operands[1]) == MEM
       && symbolic_address_p (XEXP (operands[1], 0)))
     operands[1]
-      = legitimize_address (flag_pic, operands[1], gen_reg_rtx (Pmode));
+      = legitimize_address (flag_pic, operands[1], 0, 0);
 }")
 
 (define_insn ""
       && symbolic_address_p (XEXP (operands[1], 0)))
     {
       operands[1]
-       = legitimize_address (flag_pic, operands[1], gen_reg_rtx (Pmode));
+       = legitimize_address (flag_pic, operands[1], 0, 0);
       emit_insn (gen_rtx (SET, VOIDmode, operands[0],
                          gen_rtx (ZERO_EXTEND, SImode, operands[1])));
       DONE;
   if (GET_CODE (operands[1]) == MEM
       && symbolic_address_p (XEXP (operands[1], 0)))
     operands[1]
-      = legitimize_address (flag_pic, operands[1], gen_reg_rtx (Pmode));
+      = legitimize_address (flag_pic, operands[1], 0, 0);
 }")
 
 (define_insn ""
   if (GET_CODE (operands[1]) == MEM
       && symbolic_address_p (XEXP (operands[1], 0)))
     operands[1]
-      = legitimize_address (flag_pic, operands[1], gen_reg_rtx (Pmode));
+      = legitimize_address (flag_pic, operands[1], 0, 0);
 }")
 
 (define_insn ""
   if (GET_CODE (operands[1]) == MEM
       && symbolic_address_p (XEXP (operands[1], 0)))
     operands[1]
-      = legitimize_address (flag_pic, operands[1], gen_reg_rtx (Pmode));
+      = legitimize_address (flag_pic, operands[1], 0, 0);
 }")
 
 (define_insn ""
    addu %0,%1,%2
    subu %0,%1,%n2")
 
-;; In unusual contexts, an add of a large value is generated (case statements
-;; for example).  In these contexts, it is sufficient to accept only those
-;; cases where the two registers are different.
-
-(define_insn ""
-  [(set (match_operand:SI 0 "register_operand" "=r,&r")
-       (plus:SI (match_operand:SI 1 "arith32_operand" "%r,r")
-                (match_operand:SI 2 "arith32_operand" "r,!n")))]
-  ""
-  "*
-{
-  rtx xoperands[10];
-
-  if (which_alternative == 0)
-    return \"addu %0,%1,%2\";
-
-  xoperands[0] = operands[0];
-  xoperands[1] = operands[2];
-  output_asm_insn (output_load_const_int (SImode, xoperands),
-                  xoperands);
-
-  return \"addu %0,%1,%0\";
-}"
-  [(set_attr "type" "arith,marith")
-   (set_attr "length" "1,3")]) ; may be 2 or 3.
-
 ;; patterns for mixed mode floating point.
 ;; Do not define patterns that utilize mixed mode arithmetic that result
 ;; in narrowing the precision, because it loses accuracy, since the standard