From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30035 invoked by alias); 18 Mar 2008 09:05:43 -0000 Received: (qmail 30025 invoked by uid 22791); 18 Mar 2008 09:05:42 -0000 X-Spam-Check-By: sourceware.org Received: from outdoor.onevision.de (HELO outdoor.onevision.de) (212.77.172.51) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 18 Mar 2008 09:05:19 +0000 Received: from sanders.onevision.de (moonrace [212.77.172.62]) by outdoor.onevision.de (8.13.7/8.13.7/ROSCH/DDB) with ESMTP id m2I95BSr009254; Tue, 18 Mar 2008 10:05:16 +0100 In-Reply-To: <90baa01f0803160336s17b535a4vbbe0d8f214985239@mail.gmail.com> To: "GCC Patches" Cc: NightStrike Subject: [patch]: pr33617 vector modes have to be passed via memory for x86_64-pc-mingw32 MIME-Version: 1.0 X-Mailer: Lotus Notes Release 7.0.1 January 17, 2006 Message-ID: From: Kai Tietz Date: Tue, 18 Mar 2008 09:12:00 -0000 Content-Type: multipart/mixed; boundary="=_mixed 0031E756C1257410_=" X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2008-03/txt/msg01035.txt.bz2 --=_mixed 0031E756C1257410_= Content-Type: text/plain; charset="US-ASCII" Content-length: 584 Hello, This bug was found via testsuite as regression bug for x86_64 mingw. By ABI structures and vector types have to be passed via memory. ChangeLog entries for gcc 2008-03-18 Kai Tietz * gcc/config/i386.c (return_in_memory_ms_64): Vector and block types are passed via memory. (testsuite gcc.c-torture/compile/pr33617.c). Tested for x86_64-pc-mingw32 target. Other targets are not affected. Cheers, Kai | (\_/) This is Bunny. Copy and paste Bunny | (='.'=) into your signature to help him gain | (")_(") world domination. --=_mixed 0031E756C1257410_= Content-Type: text/plain; name="mingw64_pr33617.txt" Content-Disposition: attachment; filename="mingw64_pr33617.txt" Content-Transfer-Encoding: quoted-printable Content-length: 906 Index: gcc/gcc/config/i386/i386.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc.orig/gcc/config/i386/i386.c +++ gcc/gcc/config/i386/i386.c @@ -4827,9 +4827,14 @@ return_in_memory_ms_64 (const_tree type, if (!COMPLEX_MODE_P (mode) && size =3D=3D 16 && VECTOR_MODE_P (mode)) return 0; =20 - /* Otherwise, the size must be exactly in [1248]. But not for complex. */ + /* Structures pass always via memory. */ + if (mode =3D=3D BLKmode) + return 1; + + /* Otherwise, the size must be exactly in [1248]. But not for complex + and vector. */ return (size !=3D 1 && size !=3D 2 && size !=3D 4 && size !=3D 8) - || COMPLEX_MODE_P (mode); + || COMPLEX_MODE_P (mode) || VECTOR_MODE_P (mode); } =20 int =3D= --=_mixed 0031E756C1257410_=--