From 9e03c9f874fbf6656e1e77af6f6a3b47cf572fce Mon Sep 17 00:00:00 2001
From: aj <aj@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 8 Apr 2002 17:09:50 +0000
Subject: [PATCH] Revert last patch from Richard Henderson.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@52029 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog |  5 +++++
 gcc/stmt.c    | 47 ++++++++++++-----------------------------------
 2 files changed, 17 insertions(+), 35 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 761d43073043..f2279012a21b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/stmt.c b/gcc/stmt.c
index c5399bc293f0..4f0cb1795476 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -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))
-- 
GitLab