From 2c6b27c369a9d2ab7f7116add931089b9e8f7b69 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Mon, 17 May 2004 17:23:12 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/config/i386/i386.c | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 694bb5cda3d..906b4d5a6a2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-05-17 Jan Hubicka + + * i386.c (construct_container): Do not produce BLKmode registers. + (classify_argument): Properly compute alignment of complex types. + 2004-05-17 H.J. Lu PR target/15084 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 9e8fdf48d0e..ad0407d7623 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -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. */ -- 2.30.2