This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

emit_group_load fix


Hi
for x86_64 I want to use single sse register to pass complex value,
as this soulution is consistent with what we do for structures and in
future we may want to use packed operations for complexs anyway.
Unfortunately emit_group_load is unable to handle converison.

Honza

Ne kvě  6 13:34:33 CEST 2001  Jan Hubicka  <jh@suse.cz>
	* expr.c (emit_group_load): Support CONCATs by storing them to memory
	and reloading.
*** expr.c.gload	Sat May  5 21:20:22 2001
--- expr.c	Sat May  5 21:33:06 2001
*************** emit_group_load (dst, orig_src, ssize, a
*** 2008,2013 ****
--- 2008,2021 ----
  	  else if (bytepos == (HOST_WIDE_INT) GET_MODE_SIZE (GET_MODE (XEXP (src, 0)))
  		   && bytelen == GET_MODE_SIZE (GET_MODE (XEXP (src, 1))))
  	    tmps[i] = XEXP (src, 1);
+ 	  else if (bytepos == 0)
+ 	    {
+ 	      rtx mem;
+ 	      mem = assign_stack_temp (GET_MODE (src),
+ 				       GET_MODE_SIZE (GET_MODE (src)), 0);
+ 	      emit_move_insn (mem, src);
+ 	      tmps[i] = change_address (mem, mode, XEXP (mem, 0));
+ 	    }
  	  else
  	    abort ();
  	}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]