Commit df6018fd by Jakub Jelinek Committed by Jakub Jelinek

expr.c (expand_expr): Handle when op0 is RETURN_DECL passed in multiple non-contiguous locations.

	* expr.c (expand_expr) [ADDR_EXPR]: Handle when op0 is RETURN_DECL
	passed in multiple non-contiguous locations.

From-SVN: r37316
parent 14ae1d50
2000-11-08 Jakub Jelinek <jakub@redhat.com>
* expr.c (expand_expr) [ADDR_EXPR]: Handle when op0 is RETURN_DECL
passed in multiple non-contiguous locations.
2000-11-08 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> 2000-11-08 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
* README.gnat: Remove file. * README.gnat: Remove file.
......
...@@ -8371,7 +8371,8 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8371,7 +8371,8 @@ expand_expr (exp, target, tmode, modifier)
} }
else if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG else if (GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG
|| GET_CODE (op0) == CONCAT || GET_CODE (op0) == ADDRESSOF) || GET_CODE (op0) == CONCAT || GET_CODE (op0) == ADDRESSOF
|| GET_CODE (op0) == PARALLEL)
{ {
/* If this object is in a register, it must be not /* If this object is in a register, it must be not
be BLKmode. */ be BLKmode. */
...@@ -8379,7 +8380,14 @@ expand_expr (exp, target, tmode, modifier) ...@@ -8379,7 +8380,14 @@ expand_expr (exp, target, tmode, modifier)
rtx memloc = assign_temp (inner_type, 1, 1, 1); rtx memloc = assign_temp (inner_type, 1, 1, 1);
mark_temp_addr_taken (memloc); mark_temp_addr_taken (memloc);
emit_move_insn (memloc, op0); if (GET_CODE (op0) == PARALLEL)
/* Handle calls that pass values in multiple non-contiguous
locations. The Irix 6 ABI has examples of this. */
emit_group_store (memloc, op0,
int_size_in_bytes (inner_type),
TYPE_ALIGN (inner_type));
else
emit_move_insn (memloc, op0);
op0 = memloc; op0 = memloc;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment