[PATCH, ARM/testsuite 6/7] Force soft float in ARMv6-M and ARMv8-M Baseline options

Thomas Preudhomme thomas.preudhomme@foss.arm.com
Fri Oct 28 09:49:00 GMT 2016


On 22/09/16 16:47, Richard Earnshaw (lists) wrote:
> On 22/09/16 15:51, Thomas Preudhomme wrote:
>> Sorry, noticed an error in the patch. It was not caught during testing
>> because GCC was built with --with-mode=thumb. Correct patch attached.
>>
>> Best regards,
>>
>> Thomas
>>
>> On 22/09/16 14:49, Thomas Preudhomme wrote:
>>> Hi,
>>>
>>> ARMv6-M and ARMv8-M Baseline only support soft float ABI. Therefore, the
>>> arm_arch_v8m_base add option should pass -mfloat-abi=soft, much like
>>> -mthumb is
>>> passed for architectures that only support Thumb instruction set. This
>>> patch
>>> adds -mfloat-abi=soft to both arm_arch_v6m and arm_arch_v8m_base add
>>> options.
>>> Patch is in attachment.
>>>
>>> ChangeLog entry is as follows:
>>>
>>> *** gcc/testsuite/ChangeLog ***
>>>
>>> 2016-07-15  Thomas Preud'homme  <thomas.preudhomme@arm.com>
>>>
>>>         * lib/target-supports.exp (add_options_for_arm_arch_v6m): Add
>>>         -mfloat-abi=soft option.
>>>         (add_options_for_arm_arch_v8m_base): Likewise.
>>>
>>>
>>> Is this ok for trunk?
>>>
>>> Best regards,
>>>
>>> Thomas
>>
>> 6_softfloat_testing_v6m_v8m_baseline.patch
>>
>>
>> diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
>> index 0dabea0850124947a7fe333e0b94c4077434f278..b5d72f1283be6a6e4736a1d20936e169c1384398 100644
>> --- a/gcc/testsuite/lib/target-supports.exp
>> +++ b/gcc/testsuite/lib/target-supports.exp
>> @@ -3540,24 +3540,25 @@ proc check_effective_target_arm_fp16_hw { } {
>>  # Usage: /* { dg-require-effective-target arm_arch_v5_ok } */
>>  #        /* { dg-add-options arm_arch_v5 } */
>>  #	 /* { dg-require-effective-target arm_arch_v5_multilib } */
>> -foreach { armfunc armflag armdef } { v4 "-march=armv4 -marm" __ARM_ARCH_4__
>> -				     v4t "-march=armv4t" __ARM_ARCH_4T__
>> -				     v5 "-march=armv5 -marm" __ARM_ARCH_5__
>> -				     v5t "-march=armv5t" __ARM_ARCH_5T__
>> -				     v5te "-march=armv5te" __ARM_ARCH_5TE__
>> -				     v6 "-march=armv6" __ARM_ARCH_6__
>> -				     v6k "-march=armv6k" __ARM_ARCH_6K__
>> -				     v6t2 "-march=armv6t2" __ARM_ARCH_6T2__
>> -				     v6z "-march=armv6z" __ARM_ARCH_6Z__
>> -				     v6m "-march=armv6-m -mthumb" __ARM_ARCH_6M__
>> -				     v7a "-march=armv7-a" __ARM_ARCH_7A__
>> -				     v7r "-march=armv7-r" __ARM_ARCH_7R__
>> -				     v7m "-march=armv7-m -mthumb" __ARM_ARCH_7M__
>> -				     v7em "-march=armv7e-m -mthumb" __ARM_ARCH_7EM__
>> -				     v8a "-march=armv8-a" __ARM_ARCH_8A__
>> -				     v8_1a "-march=armv8.1a" __ARM_ARCH_8A__
>> -				     v8m_base "-march=armv8-m.base -mthumb" __ARM_ARCH_8M_BASE__
>> -				     v8m_main "-march=armv8-m.main -mthumb" __ARM_ARCH_8M_MAIN__ } {
>> +foreach { armfunc armflag armdef } {
>> +	v4 "-march=armv4 -marm" __ARM_ARCH_4__
>> +	v4t "-march=armv4t" __ARM_ARCH_4T__
>> +	v5 "-march=armv5 -marm" __ARM_ARCH_5__
>> +	v5t "-march=armv5t" __ARM_ARCH_5T__
>> +	v5te "-march=armv5te" __ARM_ARCH_5TE__
>> +	v6 "-march=armv6" __ARM_ARCH_6__
>> +	v6k "-march=armv6k" __ARM_ARCH_6K__
>> +	v6t2 "-march=armv6t2" __ARM_ARCH_6T2__
>> +	v6z "-march=armv6z" __ARM_ARCH_6Z__
>> +	v6m "-march=armv6-m -mthumb -mfloat-abi=soft" __ARM_ARCH_6M__
>> +	v7a "-march=armv7-a" __ARM_ARCH_7A__
>> +	v7r "-march=armv7-r" __ARM_ARCH_7R__
>> +	v7m "-march=armv7-m -mthumb" __ARM_ARCH_7M__
>> +	v7em "-march=armv7e-m -mthumb" __ARM_ARCH_7EM__
>> +	v8a "-march=armv8-a" __ARM_ARCH_8A__
>> +	v8_1a "-march=armv8.1a" __ARM_ARCH_8A__
>> +	v8m_base "-march=armv8-m.base -mthumb -mfloat-abi=soft" __ARM_ARCH_8M_BASE__
>> +	v8m_main "-march=armv8-m.main -mthumb" __ARM_ARCH_8M_MAIN__ } {
>>      eval [string map [list FUNC $armfunc FLAG $armflag DEF $armdef ] {
>>  	proc check_effective_target_arm_arch_FUNC_ok { } {
>>  	    if { [ string match "*-marm*" "FLAG" ] &&
>>
>
> I think if you're going to do this you need to also check that changing
> the ABI in this way isn't incompatible with other aspects of how the
> user has invoked dejagnu.

The reason this patch was made is that without it dg-require-effective-target 
arm_arch_v8m_base_ok evaluates to true for an arm-none-linux-gnueabihf toolchain 
but then any testcase containing a function for such a target (such as the 
atomic-op-* in gcc.target/arm) will error out because ARMv8-M Baseline does not 
support hard float ABI.

I see 2 ways to fix this:

1) the approach taken in this patch, ie saying that to select ARMv8-M baseline 
architecture you need the right -march, -mthumb but also the right float ABI.

Note that the comment at the top of that procedure says:
# Creates a series of routines that return 1 if the given architecture
# can be selected and a routine to give the flags to select that architecture

2) Add a function to the assembly that is used to test support for the architecture.

The reason I favor the first one is that it enables more test while the second 
test would just skip ARMv6-M and ARMv8-M Baseline tests for 
arm-none-linux-gnueabihf toolchains.

Is this patch ok for trunk?

Best regards,

Thomas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 6_softfloat_testing_v6m_v8m_baseline.patch
Type: text/x-patch
Size: 2591 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20161028/7ebbc3a6/attachment.bin>


More information about the Gcc-patches mailing list