i386.c (construct_container): Do not produce BLKmode registers.

* i386.c (construct_container): Do not produce BLKmode registers.
	(classify_argument): Properly compute alignment of complex types.

From-SVN: r81937
This commit is contained in:
Jan Hubicka 2004-05-17 17:23:12 +02:00 committed by Jan Hubicka
parent 044b389201
commit 2c6b27c369
2 changed files with 11 additions and 2 deletions

View file

@ -1,3 +1,8 @@
2004-05-17 Jan Hubicka <jh@suse.cz>
* i386.c (construct_container): Do not produce BLKmode registers.
(classify_argument): Properly compute alignment of complex types.
2004-05-17 H.J. Lu <hongjiu.lu@intel.com>
PR target/15084

View file

@ -2246,6 +2246,8 @@ classify_argument (enum machine_mode mode, tree type,
mode_alignment = 128;
else if (mode == XCmode)
mode_alignment = 256;
if (COMPLEX_MODE_P (mode))
mode_alignment /= 2;
/* Misaligned fields are always returned in memory. */
if (bit_offset % mode_alignment)
return 0;
@ -2423,7 +2425,8 @@ construct_container (enum machine_mode mode, tree type, int in_return,
default:
abort ();
}
if (n == 2 && class[0] == X86_64_SSE_CLASS && class[1] == X86_64_SSEUP_CLASS)
if (n == 2 && class[0] == X86_64_SSE_CLASS && class[1] == X86_64_SSEUP_CLASS
&& mode != BLKmode)
return gen_rtx_REG (mode, SSE_REGNO (sse_regno));
if (n == 2
&& class[0] == X86_64_X87_CLASS && class[1] == X86_64_X87UP_CLASS)
@ -2435,7 +2438,8 @@ construct_container (enum machine_mode mode, tree type, int in_return,
return gen_rtx_REG (mode, intreg[0]);
if (n == 4
&& class[0] == X86_64_X87_CLASS && class[1] == X86_64_X87UP_CLASS
&& class[2] == X86_64_X87_CLASS && class[3] == X86_64_X87UP_CLASS)
&& class[2] == X86_64_X87_CLASS && class[3] == X86_64_X87UP_CLASS
&& mode != BLKmode)
return gen_rtx_REG (XCmode, FIRST_STACK_REG);
/* Otherwise figure out the entries of the PARALLEL. */