From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 79415 invoked by alias); 28 Apr 2015 12:58:04 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 78786 invoked by uid 48); 28 Apr 2015 12:58:01 -0000 From: "ubizjak at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/65871] bzhi builtin/intrinsic wrongly assumes bzhi instruction doesn't set the ZF flag Date: Tue, 28 Apr 2015 12:58:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Version: 5.1.0 X-Bugzilla-Keywords: missed-optimization X-Bugzilla-Severity: normal X-Bugzilla-Who: ubizjak at gmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cc attachments.created Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2015-04/txt/msg02393.txt.bz2 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D65871 Uro=C5=A1 Bizjak changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ubizjak at gmail dot com --- Comment #2 from Uro=C5=A1 Bizjak --- Created attachment 35411 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=3D35411&action=3Dedit Prototype patch for bextr and bzhi Prototype patch that removes flag checks for bextr and bzhi insns. >>From gcc-bugs-return-484844-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Tue Apr 28 13:06:31 2015 Return-Path: Delivered-To: listarch-gcc-bugs@gcc.gnu.org Received: (qmail 116522 invoked by alias); 28 Apr 2015 13:06:31 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Delivered-To: mailing list gcc-bugs@gcc.gnu.org Received: (qmail 116156 invoked by uid 48); 28 Apr 2015 13:06:26 -0000 From: "nikolay.pakulin at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug c/65916] New: Unnecessary floating-point instruction causes runtime exception on PowerPC Date: Tue, 28 Apr 2015 13:06:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c X-Bugzilla-Version: 4.9.1 X-Bugzilla-Keywords: X-Bugzilla-Severity: critical X-Bugzilla-Who: nikolay.pakulin at gmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone attachments.created Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2015-04/txt/msg02396.txt.bz2 Content-length: 2333 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65916 Bug ID: 65916 Summary: Unnecessary floating-point instruction causes runtime exception on PowerPC Product: gcc Version: 4.9.1 Status: UNCONFIRMED Severity: critical Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: nikolay.pakulin at gmail dot com Target Milestone: --- Created attachment 35412 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=35412&action=edit Test case to reproduce the issue Writing 64-bit integers to memory on 32-bit PPC involves floating point register FP0. When floating-point support is disabled (bit FP is cleared in MSR register) the generated code leads to exception "FP unavailable interrupt". The test case compiled by GCC cross compiler running on x86_64 Linux. powerpc-elf-gcc -S -m32 -mcpu=e500mc uint64.c -- uint64.c -- typedef unsigned long long u64; u64 globvar; void f(u64 arg) { globvar = arg; } -- /uint64.c -- -- Generated ASM -- f: stwu 1,-32(1) stw 31,28(1) mr 31,1 stw 3,8(31) # Copies 'arg' to the temporary on the stack stw 4,12(31) # lis 9,globvar@ha la 9,globvar@l(9) lfd 0,8(31) # Loads the temporary to FP0 -- exception! stfd 0,0(9) # Store FP0 to memory addi 11,31,32 lwz 31,-4(11) mr 1,11 blr -- End of Generated ASM -- == GCC specs == Using built-in specs. COLLECT_GCC=powerpc-elf-gcc COLLECT_LTO_WRAPPER=/opt/crosstools/powerpc-elf-4.9.1-Linux-x86_64/bin/../libexec/gcc/powerpc-elf/4.9.1/lto-wrapper Target: powerpc-elf Configured with: ../gcc-4.9.1/configure --target=powerpc-elf --prefix=/home/geist/svn/toolchains/powerpc-elf-4.9.1-Linux-x86_64 --enable-languages=c,c++ --disable-werror Thread model: single gcc version 4.9.1 (GCC) == End of GCC specs == The workaround is to compile with optimization turned on. With -O switch GCC produces ASM without FP0: powerpc-elf-gcc -S -m32 -mcpu=e500mc -O uint64.c -- Generated optimized ASM -- f: lis 9,globvar@ha la 9,globvar@l(9) stw 3,0(9) # direct write to the destination stw 4,4(9) # blr -- End of generated optimized ASM --