diff mbox

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

Message ID 961392e8-08ad-571a-6029-642185fc556d@foss.arm.com
State Superseded
Headers show

Commit Message

Thomas Preudhomme Nov. 28, 2016, 4:52 p.m. UTC
Hi Richard,

Ping?

Best regards,

Thomas

On 17/11/16 20:42, Thomas Preudhomme wrote:
> Ping?

>

> Best regards,

>

> Thomas

>

> On 08/11/16 13:35, Thomas Preudhomme wrote:

>> Ping,

>>

>> Best regards,

>>

>> Thomas

>>

>> On 02/11/16 10:04, Thomas Preudhomme wrote:

>>> Ping?

>>>

>>> Best regards,

>>>

>>> Thomas

>>>

>>> On 28/10/16 10:49, Thomas Preudhomme wrote:

>>>> 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

Comments

Mike Stump Nov. 28, 2016, 7:01 p.m. UTC | #1
On Nov 28, 2016, at 8:52 AM, Thomas Preudhomme <thomas.preudhomme@foss.arm.com> wrote:
> 

> Ping?


Ok.

> On 17/11/16 20:42, Thomas Preudhomme wrote:

>> Ping?

>> 

>> Best regards,

>> 

>> Thomas

>> 

>> On 08/11/16 13:35, Thomas Preudhomme wrote:

>>> Ping,

>>> 

>>> Best regards,

>>> 

>>> Thomas

>>> 

>>> On 02/11/16 10:04, Thomas Preudhomme wrote:

>>>> Ping?

>>>> 

>>>> Best regards,

>>>> 

>>>> Thomas

>>>> 

>>>> On 28/10/16 10:49, Thomas Preudhomme wrote:

>>>>> 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
diff mbox

Patch

diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index b5a9faab5a47d01371c6402a5b07d34071dbc34b..ce2fc0af116a4ffbec272642dff21ed5797a3028 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -3679,25 +3679,26 @@  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__
-				     v8_2a "-march=armv8.2a" __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__
+	v8_2a "-march=armv8.2a" __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" ] &&