+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>
* README.gnat: Remove file.
}
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
be BLKmode. */
rtx memloc = assign_temp (inner_type, 1, 1, 1);
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;
}