public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH, ARM] Fix aprofile multilib mappings
@ 2016-08-10 13:29 Thomas Preudhomme
  2016-08-17  9:55 ` [PATCH, ARM, ping] " Thomas Preudhomme
  2016-08-24  8:13 ` [PATCH, ARM] " Ramana Radhakrishnan
  0 siblings, 2 replies; 5+ messages in thread
From: Thomas Preudhomme @ 2016-08-10 13:29 UTC (permalink / raw)
  To: gcc-patches, kyrylo.tkachov, ramana.radhakrishnan, richard.earnshaw

[-- Attachment #1: Type: text/plain, Size: 7970 bytes --]

Hi,

Mappings (MULTILIB_MATCHES and MULTILIB_REUSE) in ARM aprofile multilib 
suffer from a number of issues:

* missing mapping of -mcpu=cortex-a7 to -march=armv7-a
* typo on vfpv3-d16-fp16 (MULTILIB_MATCHES uses vfpv3-fp16-d16 instead)
* missing mapping for neon-fp16, fpv5-d16 and fp-armv8 to neon, vfpv4 
and vfpv4 respectively
* reuse directive with option not in MULTILIB_OPTION (-mfpu=vfpv4 and 
-mfpu=fp-armv8)

The latter leads to unexpected results currently: GCC creates a reuse 
mapping that match for any -mfpu not in MULTILIB_OPTIONS. This means for 
instance that -march=armv7-a -mfpu=vfp -mfloat-abi=hard is mapped to 
-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard. With this patch, it is 
now mapped to the default multilib (ie. -print-multi-directory gives .) 
which is a softfloat multilib. Arguably an option not in 
MULTILIB_OPTIONS should give an error when appearing in MULTILIB_REUSE 
rather the current behavior. This should be the object of a future patch.

The patch in attachment fixes all the issues mentioned above.

ChangeLog entry is as follows:


*** gcc/ChangeLog ***

2016-08-01  Thomas Preud'homme  <thomas.preudhomme@arm.com>

         * config/arm/t-aprofile (MULTILIB_MATCHES): Add mapping for
         -mcpu=cortex-a7, -mfpu=neon-fp16, -mfpu=fpv5-d16 and 
-mfpu=fp-armv8.
         Fix typo in -mfpu=vfpv3-d16-fp16 mapping.
         (MULTILIB_REUSE): Remove reuse rules for option set including
         -mfpu=fp-armv8 and -mfpu=vfpv4


The mappings added have been tested to work as expected and the option 
combinations that the intended behavior of removed MULTILIB_REUSE 
directives were checked as well. For details, see [1]. Regression 
testsuite for arm-none-eabi with aprofile multilib shows no regression.

Is this ok for trunk?

Best regards,

Thomas


[1] Format of the tests is as follows:

# expected mapping
% command line for getting multilib we should be mapping to
expected result
% command line for the multilib that should be mapped to the one above
[before] result without patch
[ after] result with patch

Provided that the second set of options should indeed be mapped to the 
first set, the result [ after] should be the same as the expected result.


# cortex-a7 -> armv7-a
% arm-none-eabi-gcc -march=armv7ve -print-multi-directory
v7ve
% arm-none-eabi-gcc -mcpu=cortex-a7 -print-multi-directory
[before] .
[ after] v7ve

# vfpv3-d16-fp16 -> vfpv3-d16
% arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv3-d16 -mfloat-abi=hard 
-print-multi-directory
v7-a/fpv3/hard
% arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv3-d16-fp16 -mfloat-abi=hard 
-print-multi-directory
[before] v7ve/fpv4/hard
[ after] v7-a/fpv3/hard

# neon-fp16 -> neon
arm-none-eabi-gcc -march=armv7-a -mfpu=neon -mfloat-abi=hard 
-print-multi-directory
v7-a/simdv1/hard
% arm-none-eabi-gcc -march=armv7-a -mfpu=neon-fp16 -mfloat-abi=hard 
-print-multi-directory
[before] v7-a/fpv3/hard
[ after] v7-a/simdv1/hard

# fpv5-d16 -> vfpv4-d16
% arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard 
-print-multi-directory
v7ve/fpv4/hard
% arm-none-eabi-gcc -march=armv7ve -mfpu=fpv5-d16 -mfloat-abi=hard 
-print-multi-directory
[before] v7ve/fpv4/hard
[ after] v7ve/fpv4/hard

# fp-armv8 -> vfpv4-d16
% arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard 
-print-multi-directory
v7ve/fpv4/hard
% arm-none-eabi-gcc -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=hard 
-print-multi-directory
[before] v7ve/fpv4/hard
[ after] v7ve/fpv4/hard

# armv7-a vfpv4 softfp -> armv7-a vfpv3-d16 softfp
% arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv4-d16 -mfloat-abi=softfp 
-print-multi-directory
v7-a/fpv3/softfp
% arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv4 -mfloat-abi=softfp 
-print-multi-directory
[before] v7-a/fpv3/softfp
[ after] v7-a/fpv3/softfp

# armv7-a vfpv4 hard -> armv7-a vfpv3-d16 hard
% arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard 
-print-multi-directory
v7-a/fpv3/hard
% arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv4 -mfloat-abi=hard 
-print-multi-directory
[before] v7-a/fpv3/hard
[ after] v7-a/fpv3/hard

# armv7ve fp-armv8 softfp -> armv7ve vfpv4-d16 softfp
% arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp 
-print-multi-directory
v7ve/fpv4/softfp
% arm-none-eabi-gcc -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=softfp 
-print-multi-directory
[before] v7ve/fpv4/softfp
[ after] v7ve/fpv4/softfp

# armv7ve fp-armv8 hard -> armv7ve vfpv4-d16 hard
% arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard 
-print-multi-directory
v7ve/fpv4/hard
% arm-none-eabi-gcc -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=hard 
-print-multi-directory
[before] v7ve/fpv4/hard
[ after] v7ve/fpv4/hard

# armv8-a vfpv4 softfp -> armv7ve vfpv4-d16 softfp
% arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp 
-print-multi-directory
v7ve/fpv4/softfp
% arm-none-eabi-gcc -march=armv8-a -mfpu=vfpv4 -mfloat-abi=softfp 
-print-multi-directory
[before] v7ve/fpv4/softfp
[ after] v7ve/fpv4/softfp

# armv8-a vfpv4 hard -> armv7ve vfpv4-d16 hard
% arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard 
-print-multi-directory
v7ve/fpv4/hard
% arm-none-eabi-gcc -march=armv8-a -mfpu=vfpv4 -mfloat-abi=hard 
-print-multi-directory
[before] v7ve/fpv4/hard
[ after] v7ve/fpv4/hard

# armv7-a fp-armv8 softfp -> armv7-a vfpv3-d16 softfp
% arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp 
-print-multi-directory
v7-a/fpv3/softfp
% arm-none-eabi-gcc -march=armv7-a -mfpu=fp-armv8 -mfloat-abi=softfp 
-print-multi-directory
[before] v7-a/fpv3/softfp
[ after] v7-a/fpv3/softfp

# armv7-a fp-armv8 hard -> armv7-a vfpv3-d16 hard
arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard 
-print-multi-directory
v7-a/fpv3/hard
% arm-none-eabi-gcc -march=armv7-a -mfpu=fp-armv8 -mfloat-abi=hard 
-print-multi-directory
[before] v7-a/fpv3/hard
[ after] v7-a/fpv3/hard

# mthumb armv7-a vfpv4 softfp -> mthumb armv7-a vfpv3-d16 softfp
% arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv3-d16 
-mfloat-abi=softfp -print-multi-directory
thumb/v7-a/fpv3/softfp
% arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv4 
-mfloat-abi=softfp -print-multi-directory
[before] thumb/v7-a/fpv3/softfp
[ after] thumb/v7-a/fpv3/softfp

# mthumb armv7-a vfpv4 hard -> mthumb armv7-a vfpv3-d16 hard
% arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv3-d16 
-mfloat-abi=hard -print-multi-directory
thumb/v7-a/fpv3/hard
% arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv4 -mfloat-abi=hard 
-print-multi-directory
[before] thumb/v7-a/fpv3/hard
[ after] thumb/v7-a/fpv3/hard

# mthumb armv7ve fp-armv8 softfp -> mthumb armv7ve vfpv4-d16 softfp
% arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 
-mfloat-abi=softfp -print-multi-directory
thumb/v7ve/fpv4/softfp
% arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=fp-armv8 
-mfloat-abi=softfp -print-multi-directory
[before] thumb/v7ve/fpv4/softfp
[ after] thumb/v7ve/fpv4/softfp

# mthumb armv7ve fp-armv8 hard -> mthumb armv7ve vfpv4-d16 hard
% arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 
-mfloat-abi=hard -print-multi-directory
thumb/v7ve/fpv4/hard
% arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=fp-armv8 
-mfloat-abi=hard -print-multi-directory
[before] thumb/v7ve/fpv4/hard
[ after] thumb/v7ve/fpv4/hard

# mthumb armv8-a vfpv4 softfp -> mthumb armv7ve vfpv4-d16 softfp
% arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 
-mfloat-abi=softfp -print-multi-directory
thumb/v7ve/fpv4/softfp
% arm-none-eabi-gcc -mthumb -march=armv8-a -mfpu=vfpv4 
-mfloat-abi=softfp -print-multi-directory
[before] thumb/v7ve/fpv4/softfp
[ after] thumb/v7ve/fpv4/softfp

# mthumb armv8-a vfpv4 hard -> mthumb armv7ve vfpv4-d16 hard
% arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 
-mfloat-abi=hard -print-multi-directory
thumb/v7ve/fpv4/hard
% arm-none-eabi-gcc -mthumb -march=armv8-a -mfpu=vfpv4 -mfloat-abi=hard 
-print-multi-directory
[before] thumb/v7ve/fpv4/hard
[ after] thumb/v7ve/fpv4/hard

[-- Attachment #2: fix_ARM_aprofile_multilib_mapping.patch --]
[-- Type: text/x-patch, Size: 5416 bytes --]

diff --git a/gcc/config/arm/t-aprofile b/gcc/config/arm/t-aprofile
index 1b34b5444aaddf4234b3aa9041cb758b4328e02a..0d91006d4ef51a765e849079fd43679175466a71 100644
--- a/gcc/config/arm/t-aprofile
+++ b/gcc/config/arm/t-aprofile
@@ -81,6 +81,7 @@ MULTILIB_EXCEPTIONS    += *march=armv7ve/*mfpu=neon-fp-armv8*
 MULTILIB_MATCHES       += march?armv7-a=mcpu?cortex-a8
 MULTILIB_MATCHES       += march?armv7-a=mcpu?cortex-a9
 MULTILIB_MATCHES       += march?armv7-a=mcpu?cortex-a5
+MULTILIB_MATCHES       += march?armv7ve=mcpu?cortex-a7
 MULTILIB_MATCHES       += march?armv7ve=mcpu?cortex-a15
 MULTILIB_MATCHES       += march?armv7ve=mcpu?cortex-a12
 MULTILIB_MATCHES       += march?armv7ve=mcpu?cortex-a17
@@ -108,8 +109,11 @@ MULTILIB_MATCHES       += march?armv8-a=march?armv8.1-a+crc
 # FPU matches
 MULTILIB_MATCHES       += mfpu?vfpv3-d16=mfpu?vfpv3
 MULTILIB_MATCHES       += mfpu?vfpv3-d16=mfpu?vfpv3-fp16
-MULTILIB_MATCHES       += mfpu?vfpv3-d16=mfpu?vfpv3-fp16-d16
+MULTILIB_MATCHES       += mfpu?vfpv3-d16=mfpu?vfpv3-d16-fp16
+MULTILIB_MATCHES       += mfpu?neon=mfpu?neon-fp16
 MULTILIB_MATCHES       += mfpu?vfpv4-d16=mfpu?vfpv4
+MULTILIB_MATCHES       += mfpu?vfpv4-d16=mfpu?fpv5-d16
+MULTILIB_MATCHES       += mfpu?vfpv4-d16=mfpu?fp-armv8
 MULTILIB_MATCHES       += mfpu?neon-fp-armv8=mfpu?crypto-neon-fp-armv8
 
 
@@ -127,10 +131,6 @@ MULTILIB_REUSE	      += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv8
 MULTILIB_REUSE	      += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv8-a/mfpu.vfpv3-d16/mfloat-abi.softfp
 MULTILIB_REUSE	      += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7-a/mfpu.vfpv4-d16/mfloat-abi.hard
 MULTILIB_REUSE	      += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7-a/mfpu.vfpv4-d16/mfloat-abi.softfp
-MULTILIB_REUSE	      += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7-a/mfpu.fp-armv8/mfloat-abi.hard
-MULTILIB_REUSE	      += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7-a/mfpu.fp-armv8/mfloat-abi.softfp
-MULTILIB_REUSE	      += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=march.armv7-a/mfpu.vfpv4/mfloat-abi.hard
-MULTILIB_REUSE	      += march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=march.armv7-a/mfpu.vfpv4/mfloat-abi.softfp
 
 
 MULTILIB_REUSE	      += march.armv7-a/mfpu.neon/mfloat-abi.hard=march.armv7ve/mfpu.neon/mfloat-abi.hard
@@ -143,10 +143,6 @@ MULTILIB_REUSE	      += march.armv7-a/mfpu.neon/mfloat-abi.hard=march.armv7-a/mf
 MULTILIB_REUSE	      += march.armv7-a/mfpu.neon/mfloat-abi.softfp=march.armv7-a/mfpu.neon-fp-armv8/mfloat-abi.softfp
 
 
-MULTILIB_REUSE	      += march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.hard=march.armv7ve/mfpu.fp-armv8/mfloat-abi.hard
-MULTILIB_REUSE	      += march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.softfp=march.armv7ve/mfpu.fp-armv8/mfloat-abi.softfp
-MULTILIB_REUSE	      += march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.hard=march.armv8-a/mfpu.vfpv4/mfloat-abi.hard
-MULTILIB_REUSE	      += march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.softfp=march.armv8-a/mfpu.vfpv4/mfloat-abi.softfp
 MULTILIB_REUSE	      += march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.hard=march.armv8-a/mfpu.vfpv4-d16/mfloat-abi.hard
 MULTILIB_REUSE	      += march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.softfp=march.armv8-a/mfpu.vfpv4-d16/mfloat-abi.softfp
 
@@ -166,10 +162,6 @@ MULTILIB_REUSE	      += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthu
 MULTILIB_REUSE	      += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv8-a/mfpu.vfpv3-d16/mfloat-abi.softfp
 MULTILIB_REUSE	      += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/march.armv7-a/mfpu.vfpv4-d16/mfloat-abi.hard
 MULTILIB_REUSE	      += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.vfpv4-d16/mfloat-abi.softfp
-MULTILIB_REUSE	      += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/march.armv7-a/mfpu.fp-armv8/mfloat-abi.hard
-MULTILIB_REUSE	      += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.fp-armv8/mfloat-abi.softfp
-MULTILIB_REUSE	      += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.hard=mthumb/march.armv7-a/mfpu.vfpv4/mfloat-abi.hard
-MULTILIB_REUSE	      += mthumb/march.armv7-a/mfpu.vfpv3-d16/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.vfpv4/mfloat-abi.softfp
 
 
 MULTILIB_REUSE	      += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.hard=mthumb/march.armv7ve/mfpu.neon/mfloat-abi.hard
@@ -182,10 +174,6 @@ MULTILIB_REUSE	      += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.hard=mthumb/ma
 MULTILIB_REUSE	      += mthumb/march.armv7-a/mfpu.neon/mfloat-abi.softfp=mthumb/march.armv7-a/mfpu.neon-fp-armv8/mfloat-abi.softfp
 
 
-MULTILIB_REUSE	      += mthumb/march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.hard=mthumb/march.armv7ve/mfpu.fp-armv8/mfloat-abi.hard
-MULTILIB_REUSE	      += mthumb/march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.softfp=mthumb/march.armv7ve/mfpu.fp-armv8/mfloat-abi.softfp
-MULTILIB_REUSE	      += mthumb/march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.hard=mthumb/march.armv8-a/mfpu.vfpv4/mfloat-abi.hard
-MULTILIB_REUSE	      += mthumb/march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.softfp=mthumb/march.armv8-a/mfpu.vfpv4/mfloat-abi.softfp
 MULTILIB_REUSE	      += mthumb/march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.hard=mthumb/march.armv8-a/mfpu.vfpv4-d16/mfloat-abi.hard
 MULTILIB_REUSE	      += mthumb/march.armv7ve/mfpu.vfpv4-d16/mfloat-abi.softfp=mthumb/march.armv8-a/mfpu.vfpv4-d16/mfloat-abi.softfp
 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH, ARM, ping] Fix aprofile multilib mappings
  2016-08-10 13:29 [PATCH, ARM] Fix aprofile multilib mappings Thomas Preudhomme
@ 2016-08-17  9:55 ` Thomas Preudhomme
  2016-08-23 15:08   ` [PATCH, ARM, ping2] " Thomas Preudhomme
  2016-08-24  8:13 ` [PATCH, ARM] " Ramana Radhakrishnan
  1 sibling, 1 reply; 5+ messages in thread
From: Thomas Preudhomme @ 2016-08-17  9:55 UTC (permalink / raw)
  To: gcc-patches, kyrylo.tkachov, ramana.radhakrishnan, richard.earnshaw

Ping?

Best regards,

Thomas

On 10/08/16 14:28, Thomas Preudhomme wrote:
> Hi,
>
> Mappings (MULTILIB_MATCHES and MULTILIB_REUSE) in ARM aprofile multilib suffer
> from a number of issues:
>
> * missing mapping of -mcpu=cortex-a7 to -march=armv7-a
> * typo on vfpv3-d16-fp16 (MULTILIB_MATCHES uses vfpv3-fp16-d16 instead)
> * missing mapping for neon-fp16, fpv5-d16 and fp-armv8 to neon, vfpv4 and vfpv4
> respectively
> * reuse directive with option not in MULTILIB_OPTION (-mfpu=vfpv4 and
> -mfpu=fp-armv8)
>
> The latter leads to unexpected results currently: GCC creates a reuse mapping
> that match for any -mfpu not in MULTILIB_OPTIONS. This means for instance that
> -march=armv7-a -mfpu=vfp -mfloat-abi=hard is mapped to -march=armv7-a
> -mfpu=vfpv3-d16 -mfloat-abi=hard. With this patch, it is now mapped to the
> default multilib (ie. -print-multi-directory gives .) which is a softfloat
> multilib. Arguably an option not in MULTILIB_OPTIONS should give an error when
> appearing in MULTILIB_REUSE rather the current behavior. This should be the
> object of a future patch.
>
> The patch in attachment fixes all the issues mentioned above.
>
> ChangeLog entry is as follows:
>
>
> *** gcc/ChangeLog ***
>
> 2016-08-01  Thomas Preud'homme  <thomas.preudhomme@arm.com>
>
>         * config/arm/t-aprofile (MULTILIB_MATCHES): Add mapping for
>         -mcpu=cortex-a7, -mfpu=neon-fp16, -mfpu=fpv5-d16 and -mfpu=fp-armv8.
>         Fix typo in -mfpu=vfpv3-d16-fp16 mapping.
>         (MULTILIB_REUSE): Remove reuse rules for option set including
>         -mfpu=fp-armv8 and -mfpu=vfpv4
>
>
> The mappings added have been tested to work as expected and the option
> combinations that the intended behavior of removed MULTILIB_REUSE directives
> were checked as well. For details, see [1]. Regression testsuite for
> arm-none-eabi with aprofile multilib shows no regression.
>
> Is this ok for trunk?
>
> Best regards,
>
> Thomas
>
>
> [1] Format of the tests is as follows:
>
> # expected mapping
> % command line for getting multilib we should be mapping to
> expected result
> % command line for the multilib that should be mapped to the one above
> [before] result without patch
> [ after] result with patch
>
> Provided that the second set of options should indeed be mapped to the first
> set, the result [ after] should be the same as the expected result.
>
>
> # cortex-a7 -> armv7-a
> % arm-none-eabi-gcc -march=armv7ve -print-multi-directory
> v7ve
> % arm-none-eabi-gcc -mcpu=cortex-a7 -print-multi-directory
> [before] .
> [ after] v7ve
>
> # vfpv3-d16-fp16 -> vfpv3-d16
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv3-d16 -mfloat-abi=hard
> -print-multi-directory
> v7-a/fpv3/hard
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv3-d16-fp16 -mfloat-abi=hard
> -print-multi-directory
> [before] v7ve/fpv4/hard
> [ after] v7-a/fpv3/hard
>
> # neon-fp16 -> neon
> arm-none-eabi-gcc -march=armv7-a -mfpu=neon -mfloat-abi=hard -print-multi-directory
> v7-a/simdv1/hard
> % arm-none-eabi-gcc -march=armv7-a -mfpu=neon-fp16 -mfloat-abi=hard
> -print-multi-directory
> [before] v7-a/fpv3/hard
> [ after] v7-a/simdv1/hard
>
> # fpv5-d16 -> vfpv4-d16
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard
> -print-multi-directory
> v7ve/fpv4/hard
> % arm-none-eabi-gcc -march=armv7ve -mfpu=fpv5-d16 -mfloat-abi=hard
> -print-multi-directory
> [before] v7ve/fpv4/hard
> [ after] v7ve/fpv4/hard
>
> # fp-armv8 -> vfpv4-d16
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard
> -print-multi-directory
> v7ve/fpv4/hard
> % arm-none-eabi-gcc -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=hard
> -print-multi-directory
> [before] v7ve/fpv4/hard
> [ after] v7ve/fpv4/hard
>
> # armv7-a vfpv4 softfp -> armv7-a vfpv3-d16 softfp
> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv4-d16 -mfloat-abi=softfp
> -print-multi-directory
> v7-a/fpv3/softfp
> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv4 -mfloat-abi=softfp
> -print-multi-directory
> [before] v7-a/fpv3/softfp
> [ after] v7-a/fpv3/softfp
>
> # armv7-a vfpv4 hard -> armv7-a vfpv3-d16 hard
> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard
> -print-multi-directory
> v7-a/fpv3/hard
> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv4 -mfloat-abi=hard
> -print-multi-directory
> [before] v7-a/fpv3/hard
> [ after] v7-a/fpv3/hard
>
> # armv7ve fp-armv8 softfp -> armv7ve vfpv4-d16 softfp
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp
> -print-multi-directory
> v7ve/fpv4/softfp
> % arm-none-eabi-gcc -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=softfp
> -print-multi-directory
> [before] v7ve/fpv4/softfp
> [ after] v7ve/fpv4/softfp
>
> # armv7ve fp-armv8 hard -> armv7ve vfpv4-d16 hard
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard
> -print-multi-directory
> v7ve/fpv4/hard
> % arm-none-eabi-gcc -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=hard
> -print-multi-directory
> [before] v7ve/fpv4/hard
> [ after] v7ve/fpv4/hard
>
> # armv8-a vfpv4 softfp -> armv7ve vfpv4-d16 softfp
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp
> -print-multi-directory
> v7ve/fpv4/softfp
> % arm-none-eabi-gcc -march=armv8-a -mfpu=vfpv4 -mfloat-abi=softfp
> -print-multi-directory
> [before] v7ve/fpv4/softfp
> [ after] v7ve/fpv4/softfp
>
> # armv8-a vfpv4 hard -> armv7ve vfpv4-d16 hard
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard
> -print-multi-directory
> v7ve/fpv4/hard
> % arm-none-eabi-gcc -march=armv8-a -mfpu=vfpv4 -mfloat-abi=hard
> -print-multi-directory
> [before] v7ve/fpv4/hard
> [ after] v7ve/fpv4/hard
>
> # armv7-a fp-armv8 softfp -> armv7-a vfpv3-d16 softfp
> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp
> -print-multi-directory
> v7-a/fpv3/softfp
> % arm-none-eabi-gcc -march=armv7-a -mfpu=fp-armv8 -mfloat-abi=softfp
> -print-multi-directory
> [before] v7-a/fpv3/softfp
> [ after] v7-a/fpv3/softfp
>
> # armv7-a fp-armv8 hard -> armv7-a vfpv3-d16 hard
> arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard
> -print-multi-directory
> v7-a/fpv3/hard
> % arm-none-eabi-gcc -march=armv7-a -mfpu=fp-armv8 -mfloat-abi=hard
> -print-multi-directory
> [before] v7-a/fpv3/hard
> [ after] v7-a/fpv3/hard
>
> # mthumb armv7-a vfpv4 softfp -> mthumb armv7-a vfpv3-d16 softfp
> % arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp
> -print-multi-directory
> thumb/v7-a/fpv3/softfp
> % arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv4 -mfloat-abi=softfp
> -print-multi-directory
> [before] thumb/v7-a/fpv3/softfp
> [ after] thumb/v7-a/fpv3/softfp
>
> # mthumb armv7-a vfpv4 hard -> mthumb armv7-a vfpv3-d16 hard
> % arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard
> -print-multi-directory
> thumb/v7-a/fpv3/hard
> % arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv4 -mfloat-abi=hard
> -print-multi-directory
> [before] thumb/v7-a/fpv3/hard
> [ after] thumb/v7-a/fpv3/hard
>
> # mthumb armv7ve fp-armv8 softfp -> mthumb armv7ve vfpv4-d16 softfp
> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp
> -print-multi-directory
> thumb/v7ve/fpv4/softfp
> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=softfp
> -print-multi-directory
> [before] thumb/v7ve/fpv4/softfp
> [ after] thumb/v7ve/fpv4/softfp
>
> # mthumb armv7ve fp-armv8 hard -> mthumb armv7ve vfpv4-d16 hard
> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard
> -print-multi-directory
> thumb/v7ve/fpv4/hard
> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=hard
> -print-multi-directory
> [before] thumb/v7ve/fpv4/hard
> [ after] thumb/v7ve/fpv4/hard
>
> # mthumb armv8-a vfpv4 softfp -> mthumb armv7ve vfpv4-d16 softfp
> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp
> -print-multi-directory
> thumb/v7ve/fpv4/softfp
> % arm-none-eabi-gcc -mthumb -march=armv8-a -mfpu=vfpv4 -mfloat-abi=softfp
> -print-multi-directory
> [before] thumb/v7ve/fpv4/softfp
> [ after] thumb/v7ve/fpv4/softfp
>
> # mthumb armv8-a vfpv4 hard -> mthumb armv7ve vfpv4-d16 hard
> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard
> -print-multi-directory
> thumb/v7ve/fpv4/hard
> % arm-none-eabi-gcc -mthumb -march=armv8-a -mfpu=vfpv4 -mfloat-abi=hard
> -print-multi-directory
> [before] thumb/v7ve/fpv4/hard
> [ after] thumb/v7ve/fpv4/hard

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH, ARM, ping2] Fix aprofile multilib mappings
  2016-08-17  9:55 ` [PATCH, ARM, ping] " Thomas Preudhomme
@ 2016-08-23 15:08   ` Thomas Preudhomme
  0 siblings, 0 replies; 5+ messages in thread
From: Thomas Preudhomme @ 2016-08-23 15:08 UTC (permalink / raw)
  To: gcc-patches, kyrylo.tkachov, ramana.radhakrishnan, richard.earnshaw

Hi,

Ping?

Best regards,

Thomas

On 17/08/16 10:55, Thomas Preudhomme wrote:
> Ping?
>
> Best regards,
>
> Thomas
>
> On 10/08/16 14:28, Thomas Preudhomme wrote:
>> Hi,
>>
>> Mappings (MULTILIB_MATCHES and MULTILIB_REUSE) in ARM aprofile multilib suffer
>> from a number of issues:
>>
>> * missing mapping of -mcpu=cortex-a7 to -march=armv7-a
>> * typo on vfpv3-d16-fp16 (MULTILIB_MATCHES uses vfpv3-fp16-d16 instead)
>> * missing mapping for neon-fp16, fpv5-d16 and fp-armv8 to neon, vfpv4 and vfpv4
>> respectively
>> * reuse directive with option not in MULTILIB_OPTION (-mfpu=vfpv4 and
>> -mfpu=fp-armv8)
>>
>> The latter leads to unexpected results currently: GCC creates a reuse mapping
>> that match for any -mfpu not in MULTILIB_OPTIONS. This means for instance that
>> -march=armv7-a -mfpu=vfp -mfloat-abi=hard is mapped to -march=armv7-a
>> -mfpu=vfpv3-d16 -mfloat-abi=hard. With this patch, it is now mapped to the
>> default multilib (ie. -print-multi-directory gives .) which is a softfloat
>> multilib. Arguably an option not in MULTILIB_OPTIONS should give an error when
>> appearing in MULTILIB_REUSE rather the current behavior. This should be the
>> object of a future patch.
>>
>> The patch in attachment fixes all the issues mentioned above.
>>
>> ChangeLog entry is as follows:
>>
>>
>> *** gcc/ChangeLog ***
>>
>> 2016-08-01  Thomas Preud'homme  <thomas.preudhomme@arm.com>
>>
>>         * config/arm/t-aprofile (MULTILIB_MATCHES): Add mapping for
>>         -mcpu=cortex-a7, -mfpu=neon-fp16, -mfpu=fpv5-d16 and -mfpu=fp-armv8.
>>         Fix typo in -mfpu=vfpv3-d16-fp16 mapping.
>>         (MULTILIB_REUSE): Remove reuse rules for option set including
>>         -mfpu=fp-armv8 and -mfpu=vfpv4
>>
>>
>> The mappings added have been tested to work as expected and the option
>> combinations that the intended behavior of removed MULTILIB_REUSE directives
>> were checked as well. For details, see [1]. Regression testsuite for
>> arm-none-eabi with aprofile multilib shows no regression.
>>
>> Is this ok for trunk?
>>
>> Best regards,
>>
>> Thomas
>>
>>
>> [1] Format of the tests is as follows:
>>
>> # expected mapping
>> % command line for getting multilib we should be mapping to
>> expected result
>> % command line for the multilib that should be mapped to the one above
>> [before] result without patch
>> [ after] result with patch
>>
>> Provided that the second set of options should indeed be mapped to the first
>> set, the result [ after] should be the same as the expected result.
>>
>>
>> # cortex-a7 -> armv7-a
>> % arm-none-eabi-gcc -march=armv7ve -print-multi-directory
>> v7ve
>> % arm-none-eabi-gcc -mcpu=cortex-a7 -print-multi-directory
>> [before] .
>> [ after] v7ve
>>
>> # vfpv3-d16-fp16 -> vfpv3-d16
>> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv3-d16 -mfloat-abi=hard
>> -print-multi-directory
>> v7-a/fpv3/hard
>> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv3-d16-fp16 -mfloat-abi=hard
>> -print-multi-directory
>> [before] v7ve/fpv4/hard
>> [ after] v7-a/fpv3/hard
>>
>> # neon-fp16 -> neon
>> arm-none-eabi-gcc -march=armv7-a -mfpu=neon -mfloat-abi=hard
>> -print-multi-directory
>> v7-a/simdv1/hard
>> % arm-none-eabi-gcc -march=armv7-a -mfpu=neon-fp16 -mfloat-abi=hard
>> -print-multi-directory
>> [before] v7-a/fpv3/hard
>> [ after] v7-a/simdv1/hard
>>
>> # fpv5-d16 -> vfpv4-d16
>> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard
>> -print-multi-directory
>> v7ve/fpv4/hard
>> % arm-none-eabi-gcc -march=armv7ve -mfpu=fpv5-d16 -mfloat-abi=hard
>> -print-multi-directory
>> [before] v7ve/fpv4/hard
>> [ after] v7ve/fpv4/hard
>>
>> # fp-armv8 -> vfpv4-d16
>> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard
>> -print-multi-directory
>> v7ve/fpv4/hard
>> % arm-none-eabi-gcc -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=hard
>> -print-multi-directory
>> [before] v7ve/fpv4/hard
>> [ after] v7ve/fpv4/hard
>>
>> # armv7-a vfpv4 softfp -> armv7-a vfpv3-d16 softfp
>> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv4-d16 -mfloat-abi=softfp
>> -print-multi-directory
>> v7-a/fpv3/softfp
>> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv4 -mfloat-abi=softfp
>> -print-multi-directory
>> [before] v7-a/fpv3/softfp
>> [ after] v7-a/fpv3/softfp
>>
>> # armv7-a vfpv4 hard -> armv7-a vfpv3-d16 hard
>> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard
>> -print-multi-directory
>> v7-a/fpv3/hard
>> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv4 -mfloat-abi=hard
>> -print-multi-directory
>> [before] v7-a/fpv3/hard
>> [ after] v7-a/fpv3/hard
>>
>> # armv7ve fp-armv8 softfp -> armv7ve vfpv4-d16 softfp
>> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp
>> -print-multi-directory
>> v7ve/fpv4/softfp
>> % arm-none-eabi-gcc -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=softfp
>> -print-multi-directory
>> [before] v7ve/fpv4/softfp
>> [ after] v7ve/fpv4/softfp
>>
>> # armv7ve fp-armv8 hard -> armv7ve vfpv4-d16 hard
>> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard
>> -print-multi-directory
>> v7ve/fpv4/hard
>> % arm-none-eabi-gcc -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=hard
>> -print-multi-directory
>> [before] v7ve/fpv4/hard
>> [ after] v7ve/fpv4/hard
>>
>> # armv8-a vfpv4 softfp -> armv7ve vfpv4-d16 softfp
>> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp
>> -print-multi-directory
>> v7ve/fpv4/softfp
>> % arm-none-eabi-gcc -march=armv8-a -mfpu=vfpv4 -mfloat-abi=softfp
>> -print-multi-directory
>> [before] v7ve/fpv4/softfp
>> [ after] v7ve/fpv4/softfp
>>
>> # armv8-a vfpv4 hard -> armv7ve vfpv4-d16 hard
>> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard
>> -print-multi-directory
>> v7ve/fpv4/hard
>> % arm-none-eabi-gcc -march=armv8-a -mfpu=vfpv4 -mfloat-abi=hard
>> -print-multi-directory
>> [before] v7ve/fpv4/hard
>> [ after] v7ve/fpv4/hard
>>
>> # armv7-a fp-armv8 softfp -> armv7-a vfpv3-d16 softfp
>> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp
>> -print-multi-directory
>> v7-a/fpv3/softfp
>> % arm-none-eabi-gcc -march=armv7-a -mfpu=fp-armv8 -mfloat-abi=softfp
>> -print-multi-directory
>> [before] v7-a/fpv3/softfp
>> [ after] v7-a/fpv3/softfp
>>
>> # armv7-a fp-armv8 hard -> armv7-a vfpv3-d16 hard
>> arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard
>> -print-multi-directory
>> v7-a/fpv3/hard
>> % arm-none-eabi-gcc -march=armv7-a -mfpu=fp-armv8 -mfloat-abi=hard
>> -print-multi-directory
>> [before] v7-a/fpv3/hard
>> [ after] v7-a/fpv3/hard
>>
>> # mthumb armv7-a vfpv4 softfp -> mthumb armv7-a vfpv3-d16 softfp
>> % arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp
>> -print-multi-directory
>> thumb/v7-a/fpv3/softfp
>> % arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv4 -mfloat-abi=softfp
>> -print-multi-directory
>> [before] thumb/v7-a/fpv3/softfp
>> [ after] thumb/v7-a/fpv3/softfp
>>
>> # mthumb armv7-a vfpv4 hard -> mthumb armv7-a vfpv3-d16 hard
>> % arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard
>> -print-multi-directory
>> thumb/v7-a/fpv3/hard
>> % arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv4 -mfloat-abi=hard
>> -print-multi-directory
>> [before] thumb/v7-a/fpv3/hard
>> [ after] thumb/v7-a/fpv3/hard
>>
>> # mthumb armv7ve fp-armv8 softfp -> mthumb armv7ve vfpv4-d16 softfp
>> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp
>> -print-multi-directory
>> thumb/v7ve/fpv4/softfp
>> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=softfp
>> -print-multi-directory
>> [before] thumb/v7ve/fpv4/softfp
>> [ after] thumb/v7ve/fpv4/softfp
>>
>> # mthumb armv7ve fp-armv8 hard -> mthumb armv7ve vfpv4-d16 hard
>> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard
>> -print-multi-directory
>> thumb/v7ve/fpv4/hard
>> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=hard
>> -print-multi-directory
>> [before] thumb/v7ve/fpv4/hard
>> [ after] thumb/v7ve/fpv4/hard
>>
>> # mthumb armv8-a vfpv4 softfp -> mthumb armv7ve vfpv4-d16 softfp
>> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp
>> -print-multi-directory
>> thumb/v7ve/fpv4/softfp
>> % arm-none-eabi-gcc -mthumb -march=armv8-a -mfpu=vfpv4 -mfloat-abi=softfp
>> -print-multi-directory
>> [before] thumb/v7ve/fpv4/softfp
>> [ after] thumb/v7ve/fpv4/softfp
>>
>> # mthumb armv8-a vfpv4 hard -> mthumb armv7ve vfpv4-d16 hard
>> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard
>> -print-multi-directory
>> thumb/v7ve/fpv4/hard
>> % arm-none-eabi-gcc -mthumb -march=armv8-a -mfpu=vfpv4 -mfloat-abi=hard
>> -print-multi-directory
>> [before] thumb/v7ve/fpv4/hard
>> [ after] thumb/v7ve/fpv4/hard

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH, ARM] Fix aprofile multilib mappings
  2016-08-10 13:29 [PATCH, ARM] Fix aprofile multilib mappings Thomas Preudhomme
  2016-08-17  9:55 ` [PATCH, ARM, ping] " Thomas Preudhomme
@ 2016-08-24  8:13 ` Ramana Radhakrishnan
  2016-08-24  9:51   ` Thomas Preudhomme
  1 sibling, 1 reply; 5+ messages in thread
From: Ramana Radhakrishnan @ 2016-08-24  8:13 UTC (permalink / raw)
  To: Thomas Preudhomme, gcc-patches, kyrylo.tkachov,
	ramana.radhakrishnan, richard.earnshaw



On 10/08/16 14:28, Thomas Preudhomme wrote:
> Hi,
> 
> Mappings (MULTILIB_MATCHES and MULTILIB_REUSE) in ARM aprofile multilib suffer from a number of issues:
> 
> * missing mapping of -mcpu=cortex-a7 to -march=armv7-a

You mean -march=armv7ve...

> * typo on vfpv3-d16-fp16 (MULTILIB_MATCHES uses vfpv3-fp16-d16 instead)
> * missing mapping for neon-fp16, fpv5-d16 and fp-armv8 to neon, vfpv4 and vfpv4 respectively
> * reuse directive with option not in MULTILIB_OPTION (-mfpu=vfpv4 and -mfpu=fp-armv8)
> 
> The latter leads to unexpected results currently: GCC creates a reuse mapping that match for any -mfpu not in MULTILIB_OPTIONS. This means for instance that -march=armv7-a -mfpu=vfp -mfloat-abi=hard is mapped to -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard. With this patch, it is now mapped to the default multilib (ie. -print-multi-directory gives .) which is a softfloat multilib. Arguably an option not in MULTILIB_OPTIONS should give an error when appearing in MULTILIB_REUSE rather the current behavior. This should be the object of a future patch.
> 
> The patch in attachment fixes all the issues mentioned above.
> 
> ChangeLog entry is as follows:
> 
> 
> *** gcc/ChangeLog ***
> 
> 2016-08-01  Thomas Preud'homme  <thomas.preudhomme@arm.com>
> 
>         * config/arm/t-aprofile (MULTILIB_MATCHES): Add mapping for
>         -mcpu=cortex-a7, -mfpu=neon-fp16, -mfpu=fpv5-d16 and -mfpu=fp-armv8.
>         Fix typo in -mfpu=vfpv3-d16-fp16 mapping.
>         (MULTILIB_REUSE): Remove reuse rules for option set including
>         -mfpu=fp-armv8 and -mfpu=vfpv4
> 


OK.

Ramana
> 
> The mappings added have been tested to work as expected and the option combinations that the intended behavior of removed MULTILIB_REUSE directives were checked as well. For details, see [1]. Regression testsuite for arm-none-eabi with aprofile multilib shows no regression.
> 
> Is this ok for trunk?
> 
> Best regards,
> 
> Thomas
> 
> 
> [1] Format of the tests is as follows:
> 
> # expected mapping
> % command line for getting multilib we should be mapping to
> expected result
> % command line for the multilib that should be mapped to the one above
> [before] result without patch
> [ after] result with patch
> 
> Provided that the second set of options should indeed be mapped to the first set, the result [ after] should be the same as the expected result.
> 
> 
> # cortex-a7 -> armv7-a
> % arm-none-eabi-gcc -march=armv7ve -print-multi-directory
> v7ve
> % arm-none-eabi-gcc -mcpu=cortex-a7 -print-multi-directory
> [before] .
> [ after] v7ve
> 
> # vfpv3-d16-fp16 -> vfpv3-d16
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv3-d16 -mfloat-abi=hard -print-multi-directory
> v7-a/fpv3/hard
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv3-d16-fp16 -mfloat-abi=hard -print-multi-directory
> [before] v7ve/fpv4/hard
> [ after] v7-a/fpv3/hard
> 
> # neon-fp16 -> neon
> arm-none-eabi-gcc -march=armv7-a -mfpu=neon -mfloat-abi=hard -print-multi-directory
> v7-a/simdv1/hard
> % arm-none-eabi-gcc -march=armv7-a -mfpu=neon-fp16 -mfloat-abi=hard -print-multi-directory
> [before] v7-a/fpv3/hard
> [ after] v7-a/simdv1/hard
> 
> # fpv5-d16 -> vfpv4-d16
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard -print-multi-directory
> v7ve/fpv4/hard
> % arm-none-eabi-gcc -march=armv7ve -mfpu=fpv5-d16 -mfloat-abi=hard -print-multi-directory
> [before] v7ve/fpv4/hard
> [ after] v7ve/fpv4/hard
> 
> # fp-armv8 -> vfpv4-d16
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard -print-multi-directory
> v7ve/fpv4/hard
> % arm-none-eabi-gcc -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=hard -print-multi-directory
> [before] v7ve/fpv4/hard
> [ after] v7ve/fpv4/hard
> 
> # armv7-a vfpv4 softfp -> armv7-a vfpv3-d16 softfp
> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv4-d16 -mfloat-abi=softfp -print-multi-directory
> v7-a/fpv3/softfp
> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv4 -mfloat-abi=softfp -print-multi-directory
> [before] v7-a/fpv3/softfp
> [ after] v7-a/fpv3/softfp
> 
> # armv7-a vfpv4 hard -> armv7-a vfpv3-d16 hard
> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard -print-multi-directory
> v7-a/fpv3/hard
> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv4 -mfloat-abi=hard -print-multi-directory
> [before] v7-a/fpv3/hard
> [ after] v7-a/fpv3/hard
> 
> # armv7ve fp-armv8 softfp -> armv7ve vfpv4-d16 softfp
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp -print-multi-directory
> v7ve/fpv4/softfp
> % arm-none-eabi-gcc -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=softfp -print-multi-directory
> [before] v7ve/fpv4/softfp
> [ after] v7ve/fpv4/softfp
> 
> # armv7ve fp-armv8 hard -> armv7ve vfpv4-d16 hard
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard -print-multi-directory
> v7ve/fpv4/hard
> % arm-none-eabi-gcc -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=hard -print-multi-directory
> [before] v7ve/fpv4/hard
> [ after] v7ve/fpv4/hard
> 
> # armv8-a vfpv4 softfp -> armv7ve vfpv4-d16 softfp
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp -print-multi-directory
> v7ve/fpv4/softfp
> % arm-none-eabi-gcc -march=armv8-a -mfpu=vfpv4 -mfloat-abi=softfp -print-multi-directory
> [before] v7ve/fpv4/softfp
> [ after] v7ve/fpv4/softfp
> 
> # armv8-a vfpv4 hard -> armv7ve vfpv4-d16 hard
> % arm-none-eabi-gcc -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard -print-multi-directory
> v7ve/fpv4/hard
> % arm-none-eabi-gcc -march=armv8-a -mfpu=vfpv4 -mfloat-abi=hard -print-multi-directory
> [before] v7ve/fpv4/hard
> [ after] v7ve/fpv4/hard
> 
> # armv7-a fp-armv8 softfp -> armv7-a vfpv3-d16 softfp
> % arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -print-multi-directory
> v7-a/fpv3/softfp
> % arm-none-eabi-gcc -march=armv7-a -mfpu=fp-armv8 -mfloat-abi=softfp -print-multi-directory
> [before] v7-a/fpv3/softfp
> [ after] v7-a/fpv3/softfp
> 
> # armv7-a fp-armv8 hard -> armv7-a vfpv3-d16 hard
> arm-none-eabi-gcc -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard -print-multi-directory
> v7-a/fpv3/hard
> % arm-none-eabi-gcc -march=armv7-a -mfpu=fp-armv8 -mfloat-abi=hard -print-multi-directory
> [before] v7-a/fpv3/hard
> [ after] v7-a/fpv3/hard
> 
> # mthumb armv7-a vfpv4 softfp -> mthumb armv7-a vfpv3-d16 softfp
> % arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -print-multi-directory
> thumb/v7-a/fpv3/softfp
> % arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv4 -mfloat-abi=softfp -print-multi-directory
> [before] thumb/v7-a/fpv3/softfp
> [ after] thumb/v7-a/fpv3/softfp
> 
> # mthumb armv7-a vfpv4 hard -> mthumb armv7-a vfpv3-d16 hard
> % arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard -print-multi-directory
> thumb/v7-a/fpv3/hard
> % arm-none-eabi-gcc -mthumb -march=armv7-a -mfpu=vfpv4 -mfloat-abi=hard -print-multi-directory
> [before] thumb/v7-a/fpv3/hard
> [ after] thumb/v7-a/fpv3/hard
> 
> # mthumb armv7ve fp-armv8 softfp -> mthumb armv7ve vfpv4-d16 softfp
> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp -print-multi-directory
> thumb/v7ve/fpv4/softfp
> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=softfp -print-multi-directory
> [before] thumb/v7ve/fpv4/softfp
> [ after] thumb/v7ve/fpv4/softfp
> 
> # mthumb armv7ve fp-armv8 hard -> mthumb armv7ve vfpv4-d16 hard
> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard -print-multi-directory
> thumb/v7ve/fpv4/hard
> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=fp-armv8 -mfloat-abi=hard -print-multi-directory
> [before] thumb/v7ve/fpv4/hard
> [ after] thumb/v7ve/fpv4/hard
> 
> # mthumb armv8-a vfpv4 softfp -> mthumb armv7ve vfpv4-d16 softfp
> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=softfp -print-multi-directory
> thumb/v7ve/fpv4/softfp
> % arm-none-eabi-gcc -mthumb -march=armv8-a -mfpu=vfpv4 -mfloat-abi=softfp -print-multi-directory
> [before] thumb/v7ve/fpv4/softfp
> [ after] thumb/v7ve/fpv4/softfp
> 
> # mthumb armv8-a vfpv4 hard -> mthumb armv7ve vfpv4-d16 hard
> % arm-none-eabi-gcc -mthumb -march=armv7ve -mfpu=vfpv4-d16 -mfloat-abi=hard -print-multi-directory
> thumb/v7ve/fpv4/hard
> % arm-none-eabi-gcc -mthumb -march=armv8-a -mfpu=vfpv4 -mfloat-abi=hard -print-multi-directory
> [before] thumb/v7ve/fpv4/hard
> [ after] thumb/v7ve/fpv4/hard

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH, ARM] Fix aprofile multilib mappings
  2016-08-24  8:13 ` [PATCH, ARM] " Ramana Radhakrishnan
@ 2016-08-24  9:51   ` Thomas Preudhomme
  0 siblings, 0 replies; 5+ messages in thread
From: Thomas Preudhomme @ 2016-08-24  9:51 UTC (permalink / raw)
  To: Ramana Radhakrishnan, gcc-patches, kyrylo.tkachov,
	ramana.radhakrishnan, richard.earnshaw

On 24/08/16 09:13, Ramana Radhakrishnan wrote:
>
>
> On 10/08/16 14:28, Thomas Preudhomme wrote:
>> Hi,
>>
>> Mappings (MULTILIB_MATCHES and MULTILIB_REUSE) in ARM aprofile multilib suffer from a number of issues:
>>
>> * missing mapping of -mcpu=cortex-a7 to -march=armv7-a
>
> You mean -march=armv7ve...

Yes indeed, as reflected by the new directory used for -mcpu=cortex-a7 after the 
patch (v7ve).

>
>> * typo on vfpv3-d16-fp16 (MULTILIB_MATCHES uses vfpv3-fp16-d16 instead)
>> * missing mapping for neon-fp16, fpv5-d16 and fp-armv8 to neon, vfpv4 and vfpv4 respectively
>> * reuse directive with option not in MULTILIB_OPTION (-mfpu=vfpv4 and -mfpu=fp-armv8)
>>
>> The latter leads to unexpected results currently: GCC creates a reuse mapping that match for any -mfpu not in MULTILIB_OPTIONS. This means for instance that -march=armv7-a -mfpu=vfp -mfloat-abi=hard is mapped to -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard. With this patch, it is now mapped to the default multilib (ie. -print-multi-directory gives .) which is a softfloat multilib. Arguably an option not in MULTILIB_OPTIONS should give an error when appearing in MULTILIB_REUSE rather the current behavior. This should be the object of a future patch.
>>
>> The patch in attachment fixes all the issues mentioned above.
>>
>> ChangeLog entry is as follows:
>>
>>
>> *** gcc/ChangeLog ***
>>
>> 2016-08-01  Thomas Preud'homme  <thomas.preudhomme@arm.com>
>>
>>         * config/arm/t-aprofile (MULTILIB_MATCHES): Add mapping for
>>         -mcpu=cortex-a7, -mfpu=neon-fp16, -mfpu=fpv5-d16 and -mfpu=fp-armv8.
>>         Fix typo in -mfpu=vfpv3-d16-fp16 mapping.
>>         (MULTILIB_REUSE): Remove reuse rules for option set including
>>         -mfpu=fp-armv8 and -mfpu=vfpv4
>>
>
>
> OK.

Thanks, committed.

Best regards,

Thomas

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-08-24  9:51 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-10 13:29 [PATCH, ARM] Fix aprofile multilib mappings Thomas Preudhomme
2016-08-17  9:55 ` [PATCH, ARM, ping] " Thomas Preudhomme
2016-08-23 15:08   ` [PATCH, ARM, ping2] " Thomas Preudhomme
2016-08-24  8:13 ` [PATCH, ARM] " Ramana Radhakrishnan
2016-08-24  9:51   ` Thomas Preudhomme

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).