From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17328 invoked by alias); 17 Dec 2013 11:11:18 -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 17268 invoked by uid 48); 17 Dec 2013 11:11:14 -0000 From: "olegendo at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/54089] [SH] Refactor shift patterns Date: Tue, 17 Dec 2013 11:11: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: 4.8.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: enhancement X-Bugzilla-Who: olegendo at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: olegendo at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: 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: 2013-12/txt/msg01478.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54089 --- Comment #30 from Oleg Endo --- A case from libmpeg2/slice.c: mov.b @(1,r10),r0 // load of shift amount shld r7,r6 add #1,r6 extu.b r0,r0 // zero extend shift amount shld r0,r1 // r1 <<= r0 mov r1,r0 The zero extension of the shift amount variable could be omitted because shift amounts > 31 are undefined behavior. If the shift amount is in the valid range of 0...31 the zero extension won't do anything. A reduced test case: int test33 (unsigned char* x, int y) { return y << x[4]; } results in: mov.b @(4,r4),r0 extu.b r0,r0 shld r0,r5 rts mov r5,r0