[PATCH, ARM]: Fix static interworking call

Christian Bruel christian.bruel@st.com
Fri Sep 18 14:51:00 GMT 2015



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  <christian.bruel@st.com>
>>
>> 	* config/arm/arm.md (*call_value_symbol): Fix operand for interworking.
>>
>> 2015-09-18  Christian Bruel  <christian.bruel@st.com>
>>
>> 	* 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 ?

 > 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 } } */
>>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 1.patch
Type: text/x-patch
Size: 597 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20150918/e58d5df7/attachment.bin>


More information about the Gcc-patches mailing list