Revert last patch from Richard Henderson.
authorAndreas Jaeger <aj@suse.de>
Mon, 8 Apr 2002 17:09:50 +0000 (19:09 +0200)
committerAndreas Jaeger <aj@gcc.gnu.org>
Mon, 8 Apr 2002 17:09:50 +0000 (19:09 +0200)
From-SVN: r52029

gcc/ChangeLog
gcc/stmt.c

index 761d430..f227901 100644 (file)
@@ -1,3 +1,8 @@
+2002-04-08  Andreas Jaeger  <aj@suse.de>
+
+       * stmt.c (expand_asm_operands): Revert last patch from Richard
+       Henderson.
+
 2002-04-08  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>
 
        * doc/contrib.texi (Contributors): Add John David Anglin and Loren
index c5399bc..4f0cb17 100644 (file)
@@ -1740,48 +1740,25 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
              && (allows_mem || GET_CODE (DECL_RTL (val)) == REG)
              && ! (GET_CODE (DECL_RTL (val)) == REG
                    && GET_MODE (DECL_RTL (val)) != TYPE_MODE (type)))
+         || ! allows_reg
          || is_inout)
        {
-         enum { do_not_copy, do_copy_reg, do_copy_mem } do_copy;
-         rtx op;
+         output_rtx[i] = expand_expr (val, NULL_RTX, VOIDmode, EXPAND_WRITE);
 
-         op = expand_expr (val, NULL_RTX, VOIDmode, EXPAND_WRITE);
-         output_rtx[i] = op;
-
-         if (! allows_reg && GET_CODE (op) != MEM)
+         if (! allows_reg && GET_CODE (output_rtx[i]) != MEM)
            error ("output number %d not directly addressable", i);
-
-         do_copy = do_not_copy;
-         if (! allows_mem && GET_CODE (op) == MEM)
-           do_copy = do_copy_reg;
-         else if (GET_CODE (op) == CONCAT)
-           do_copy = do_copy_reg;
-         else if (asm_operand_ok (op, constraints[i]) <= 0)
-           {
-             if (allows_reg && !register_operand (op, VOIDmode))
-               do_copy = do_copy_reg;
-             else if (allows_mem && GET_CODE (op) != MEM)
-               do_copy = do_copy_mem;
-             else
-               warning ("asm operand %d probably doesn't match constraints", i);
-           }
-
-         if (do_copy == do_copy_reg)
-           {
-             real_output_rtx[i] = protect_from_queue (op, 1);
-             output_rtx[i] = gen_reg_rtx (GET_MODE (op));
-           }
-         else if (do_copy == do_copy_mem)
+         if ((! allows_mem && GET_CODE (output_rtx[i]) == MEM)
+             || GET_CODE (output_rtx[i]) == CONCAT)
            {
-             real_output_rtx[i] = op;
-             output_rtx[i] = assign_temp (type, 0, 1, 1);
+             real_output_rtx[i] = protect_from_queue (output_rtx[i], 1);
+             output_rtx[i] = gen_reg_rtx (GET_MODE (output_rtx[i]));
+             if (is_inout)
+               emit_move_insn (output_rtx[i], real_output_rtx[i]);
            }
-         if (do_copy && is_inout)
-           emit_move_insn (output_rtx[i], real_output_rtx[i]);
        }
       else
        {
-         output_rtx[i] = assign_temp (type, 0, !allows_reg, 1);
+         output_rtx[i] = assign_temp (type, 0, 0, 1);
          TREE_VALUE (tail) = make_tree (type, output_rtx[i]);
        }
 
@@ -1835,9 +1812,9 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
 
       if (asm_operand_ok (op, constraint) <= 0)
        {
-         if (allows_reg && !register_operand (op, VOIDmode))
+         if (allows_reg)
            op = force_reg (TYPE_MODE (type), op);
-         else if (!allows_mem || GET_CODE (op) == MEM)
+         else if (!allows_mem)
            warning ("asm operand %d probably doesn't match constraints",
                     i + noutputs);
          else if (CONSTANT_P (op))