From patchwork Wed Oct 27 16:09:34 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Stubbs X-Patchwork-Id: 69372 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id A4B2BB70D1 for ; Thu, 28 Oct 2010 03:09:48 +1100 (EST) Received: (qmail 14962 invoked by alias); 27 Oct 2010 16:09:46 -0000 Received: (qmail 14953 invoked by uid 22791); 27 Oct 2010 16:09:44 -0000 X-SWARE-Spam-Status: No, hits=-1.6 required=5.0 tests=AWL, BAYES_00, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 27 Oct 2010 16:09:40 +0000 Received: (qmail 22169 invoked from network); 27 Oct 2010 16:09:38 -0000 Received: from unknown (HELO ?192.168.0.104?) (ams@127.0.0.2) by mail.codesourcery.com with ESMTPA; 27 Oct 2010 16:09:38 -0000 Message-ID: <4CC84EBE.4040007@codesourcery.com> Date: Wed, 27 Oct 2010 17:09:34 +0100 From: Andrew Stubbs User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.11) Gecko/20101007 Lightning/1.0b2 Thunderbird/3.1.5 MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org Subject: [PATCH][ARM] Don't reject valid Thumb2 constants Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Thumb2 permits any shifted 8 bit constant, or repeated patterns of the form 0xXYXYXYXY, 0x00XY00XY, or 0xXY00XY00. For some reason this last form is not detected - presumably a simple omission? The attached patch fixes the problem. Andrew 2010-10-27 Andrew Stubbs gcc/ * config/arm/arm.c (const_ok_for_arm): Support 0xXY00XY00 pattern constants in thumb2. --- src/gcc-mainline/gcc/config/arm/arm.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/src/gcc-mainline/gcc/config/arm/arm.c b/src/gcc-mainline/gcc/config/arm/arm.c index 3bcd1a9..f0ed338 100644 --- a/src/gcc-mainline/gcc/config/arm/arm.c +++ b/src/gcc-mainline/gcc/config/arm/arm.c @@ -2351,11 +2351,17 @@ const_ok_for_arm (HOST_WIDE_INT i) { HOST_WIDE_INT v; - /* Allow repeated pattern. */ + /* Allow repeated patterns 0x00XY00XY or 0xXYXYXYXY. */ v = i & 0xff; v |= v << 16; if (i == v || i == (v | (v << 8))) return TRUE; + + /* Allow repeated pattern 0xXY00XY00. */ + v = i & 0xff00; + v |= v << 16; + if (i == v) + return TRUE; } return FALSE;