From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 89366 invoked by alias); 18 Sep 2015 15:03:43 -0000 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 Received: (qmail 89273 invoked by uid 89); 18 Sep 2015 15:03:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=1.2 required=5.0 tests=AWL,BAYES_50,KAM_LAZY_DOMAIN_SECURITY,KAM_STOCKGEN,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: foss.arm.com Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 18 Sep 2015 15:03:41 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3467454C; Fri, 18 Sep 2015 08:03:41 -0700 (PDT) Received: from e105689-lin.cambridge.arm.com (e105689-lin.cambridge.arm.com [10.2.207.32]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 779693F23A; Fri, 18 Sep 2015 08:03:38 -0700 (PDT) Subject: Re: [PATCH, ARM]: Fix static interworking call To: Christian Bruel , "kyrylo.tkachov@arm.com" , "Ramana.Radhakrishnan@arm.com" References: <55FA7DD9.8090108@st.com> <55FC1CD2.10207@foss.arm.com> <55FC21D0.909@st.com> Cc: "gcc-patches@gcc.gnu.org" From: Richard Earnshaw X-Enigmail-Draft-Status: N1110 Message-ID: <55FC27C8.7050503@foss.arm.com> Date: Fri, 18 Sep 2015 15:14:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <55FC21D0.909@st.com> Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2015-09/txt/msg01425.txt.bz2 On 18/09/15 15:38, Christian Bruel wrote: > > > On 09/18/2015 04:16 PM, Richard Earnshaw wrote: >> On 17/09/15 09:46, Christian Bruel wrote: >>> As obvious, bad operand number. >>> >>> OK for trunk ? >>> >>> Christian >>> >>> >>> p1.patch >>> >>> >>> 2015-09-18 Christian Bruel >>> >>> * config/arm/arm.md (*call_value_symbol): Fix operand for >>> interworking. >>> >>> 2015-09-18 Christian Bruel >>> >>> * gcc.target/arm/attr_thumb-static2.c: New test. >>> >>> --- gnu_trunk.ref/gcc/gcc/config/arm/arm.md 2015-09-14 >>> 09:52:37.697264500 +0200 >>> +++ gnu_trunk.p0/gcc/gcc/config/arm/arm.md 2015-09-17 >>> 10:03:33.849451705 +0200 >>> @@ -7891,7 +7891,7 @@ >>> /* Switch mode now when possible. */ >>> if (SYMBOL_REF_DECL (op) && !TREE_PUBLIC (SYMBOL_REF_DECL (op)) >>> && arm_arch5 && arm_change_mode_p (SYMBOL_REF_DECL (op))) >>> - return NEED_PLT_RELOC ? \"blx%?\\t%a0(PLT)\" : \"blx%?\\t(%a0)\"; >>> + return NEED_PLT_RELOC ? \"blx%?\\t%a1(PLT)\" : \"blx%?\\t(%a1)\"; >>> >>> return NEED_PLT_RELOC ? \"bl%?\\t%a1(PLT)\" : \"bl%?\\t%a1\"; >>> }" >>> diff -ruNp >>> gnu_trunk.ref/gcc/gcc/testsuite/gcc.target/arm/attr_thumb-static2.c >>> gnu_trunk.p0/gcc/gcc/testsuite/gcc.target/arm/attr_thumb-static2.c >>> --- >>> gnu_trunk.ref/gcc/gcc/testsuite/gcc.target/arm/attr_thumb-static2.c 1970-01-01 >>> 01:00:00.000000000 +0100 >>> +++ >>> gnu_trunk.p0/gcc/gcc/testsuite/gcc.target/arm/attr_thumb-static2.c >>> 2015-09-17 10:08:08.350064131 +0200 >>> @@ -0,0 +1,40 @@ >>> +/* Check that interwork between static functions is correctly >>> resolved. */ >>> + >>> +/* { dg-skip-if "" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */ >>> +/* { dg-options "-O0 -march=armv7-a -mfloat-abi=hard" } */ >> >> You can't have thumb1 and hard float, > > Ah OK I didn't know that. Is it that there was no FPU before V5 ? > Thumb1 had no instruction encodings for accessing the FPU. >> so the skip unless thumb1 seems a nonsense. > > And there is no thumb1 and march=armv7-a !. So indeed the skip unless > thumb1 is a nonsense. > Is the attached patch OK to clean this up ? > > thanks, > > >> >> R. >> >>> +/* { dg-do compile } */ >>> + >>> +struct _NSPoint >>> +{ >>> + float x; >>> + float y; >>> +}; >>> + >>> +typedef struct _NSPoint NSPoint; >>> + >>> +static NSPoint >>> +__attribute__ ((target("arm"))) >>> +NSMakePoint (float x, float y) >>> +{ >>> + NSPoint point; >>> + point.x = x; >>> + point.y = y; >>> + return point; >>> +} >>> + >>> +static NSPoint >>> +__attribute__ ((target("thumb"))) >>> +RelativePoint (NSPoint point, NSPoint refPoint) >>> +{ >>> + return NSMakePoint (refPoint.x + point.x, refPoint.y + point.y); >>> +} >>> + >>> +NSPoint >>> +__attribute__ ((target("arm"))) >>> +g(NSPoint refPoint) >>> +{ >>> + float pointA, pointB; >>> + return RelativePoint (NSMakePoint (0, pointA), refPoint); >>> +} >>> + >>> +/* { dg-final { scan-assembler-times "blx" 2 } } */ >>> >> > > 1.patch > > > 2015-09-17 Christian Bruel > > * gcc.target/arm/attr_thumb-static2.c: Test only for thumb2. > > Index: attr_thumb-static2.c > =================================================================== > --- attr_thumb-static2.c (revision 227904) > +++ attr_thumb-static2.c (working copy) > @@ -1,6 +1,6 @@ > /* Check that interwork between static functions is correctly resolved. */ > > -/* { dg-skip-if "" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */ > +/* { dg-require-effective-target arm_thumb2_ok } */ > /* { dg-options "-O0 -march=armv7-a -mfloat-abi=hard" } */ > /* { dg-do compile } */ > > Do you really need -mfloat-abi=hard for this test? If so, I think you also need "dg-require-effective-target arm_hard_vfp_ok". See gcc.target/arm/pr65729.c R.