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.preudho...@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

Reply via email to