* Re: [PATCH][GCC][arm] Add CLI and multilib support for Armv8.1-M Mainline MVE extensions
[not found] <4751ac8f-c9d4-454f-b036-e31e5e456042@DB5EUR03FT064.eop-EUR03.prod.protection.outlook.com>
@ 2019-12-18 14:16 ` Kyrill Tkachov
2019-12-18 17:03 ` Mihail Ionescu
0 siblings, 1 reply; 8+ messages in thread
From: Kyrill Tkachov @ 2019-12-18 14:16 UTC (permalink / raw)
To: Mihail Ionescu, gcc-patches; +Cc: Richard Earnshaw
Hi Mihail,
On 11/8/19 4:52 PM, Mihail Ionescu wrote:
> Hi,
>
> This patch adds CLI and multilib support for Armv8.1-M MVE to the Arm
> backend.
> Two new option added for v8.1-m.main: "+mve" for integer MVE
> instructions only
> and "+mve.fp" for both integer and single-precision/half-precision
> floating-point MVE.
> The patch also maps the Armv8.1-M multilib variants to the
> corresponding v8-M ones.
>
>
>
> gcc/ChangeLog:
>
> 2019-11-08 Mihail Ionescu <mihail.ionescu@arm.com>
> 2019-11-08Â Andre Vieira <andre.simoesdiasvieira@arm.com>
>
> Â Â Â Â Â Â Â * config/arm/arm-cpus.in (mve, mve_float): New features.
> Â Â Â Â Â Â Â (dsp, mve, mve.fp): New options.
> Â Â Â Â Â Â Â * config/arm/arm.h (TARGET_HAVE_MVE, TARGET_HAVE_MVE_FLOAT):
> Define.
> Â Â Â Â Â Â Â * config/arm/t-rmprofile: Map v8.1-M multilibs to v8-M.
>
>
> gcc/testsuite/ChangeLog:
>
> 2019-11-08 Mihail Ionescu <mihail.ionescu@arm.com>
> 2019-11-08Â Andre Vieira <andre.simoesdiasvieira@arm.com>
>
> Â Â Â Â Â Â Â * testsuite/gcc.target/arm/multilib.exp: Add v8.1-M entries.
>
>
> Is this ok for trunk?
This is ok, but please document the new options in invoke.texi.
Thanks,
Kyrill
>
> Best regards,
>
> Mihail
>
>
> ###############    Attachment also inlined for ease of reply  Â
> ###############
>
>
> diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
> index
> 59aad8f62ee5186cc87d3cefaf40ba2ce049012d..c2f016c75e2d8dd06890295321232bef61cbd234
> 100644
> --- a/gcc/config/arm/arm-cpus.in
> +++ b/gcc/config/arm/arm-cpus.in
> @@ -194,6 +194,10 @@ define feature sb
> Â # v8-A architectures, added by default from v8.5-A
> Â define feature predres
>
> +# M-profile Vector Extension feature bits
> +define feature mve
> +define feature mve_float
> +
>  # Feature groups. Conventionally all (or mostly) upper case.
> Â # ALL_FPU lists all the feature bits associated with the floating-point
> Â # unit; these will all be removed if the floating-point unit is disabled
> @@ -654,9 +658,12 @@ begin arch armv8.1-m.main
> Â base 8M_MAIN
> Â isa ARMv8_1m_main
> Â # fp => FPv5-sp-d16; fp.dp => FPv5-d16
> + option dsp add armv7em
> Â option fp add FPv5 fp16
> Â option fp.dp add FPv5 FP_DBL fp16
> Â option nofp remove ALL_FP
> + option mve add mve armv7em
> + option mve.fp add mve FPv5 fp16 mve_float armv7em
> Â end arch armv8.1-m.main
>
> Â begin arch iwmmxt
> diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
> index
> 64c292f2862514fb600a4faeaddfeacb2b69180b..9ec38c6af1b84fc92e20e30e8f07ce5360a966c1
> 100644
> --- a/gcc/config/arm/arm.h
> +++ b/gcc/config/arm/arm.h
> @@ -310,6 +310,12 @@ emission of floating point pcs attributes. */
>    instructions (most are floating-point related). */
> Â #define TARGET_HAVE_FPCXT_CMSEÂ (arm_arch8_1m_main)
>
> +#define TARGET_HAVE_MVE (bitmap_bit_p (arm_active_target.isa, \
> +Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â isa_bit_mve))
> +
> +#define TARGET_HAVE_MVE_FLOAT (bitmap_bit_p (arm_active_target.isa, \
> + isa_bit_mve_float))
> +
>  /* Nonzero if integer division instructions supported. */
> Â #define TARGET_IDIVÂ Â Â Â ((TARGET_ARM && arm_arch_arm_hwdiv)Â Â Â Â \
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â || (TARGET_THUMB && arm_arch_thumb_hwdiv))
> diff --git a/gcc/config/arm/t-rmprofile b/gcc/config/arm/t-rmprofile
> index
> 807e69eaf78625f422e2d7ef5936c5c80c5b9073..62e27fd284b21524896430176d64ff5b08c6e0ef
> 100644
> --- a/gcc/config/arm/t-rmprofile
> +++ b/gcc/config/arm/t-rmprofile
> @@ -54,7 +54,7 @@ MULTILIB_REQUIREDÂ Â Â Â +=
> mthumb/march=armv8-m.main+fp.dp/mfloat-abi=softfp
> Â # Arch Matches
> Â MULTILIB_MATCHESÂ Â Â Â Â Â Â += march?armv6s-m=march?armv6-m
>
> -# Map all v8-m.main+dsp FP variants down the the variant without DSP.
> +# Map all v8-m.main+dsp FP variants down to the variant without DSP.
> Â MULTILIB_MATCHESÂ Â Â Â Â Â Â += march?armv8-m.main=march?armv8-m.main+dsp \
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $(foreach FP, +fp +fp.dp, \
> march?armv8-m.main$(FP)=march?armv8-m.main+dsp$(FP))
> @@ -66,3 +66,18 @@ MULTILIB_MATCHESÂ Â Â Â +=
> march?armv7e-m+fp=march?armv7e-m+fpv5
> Â MULTILIB_REUSEÂ Â Â Â Â Â Â Â Â += $(foreach ARCH, armv6s-m armv7-m armv7e-m
> armv8-m\.base armv8-m\.main, \
> mthumb/march.$(ARCH)/mfloat-abi.soft=mthumb/march.$(ARCH)/mfloat-abi.softfp)
>
> +# Map v8.1-M to v8-M.
> +MULTILIB_MATCHESÂ Â Â Â Â Â += march?armv8-m.main=march?armv8.1-m.main
> +MULTILIB_MATCHESÂ Â Â Â Â Â += march?armv8-m.main=march?armv8.1-m.main+dsp
> +MULTILIB_MATCHESÂ Â Â Â Â Â += march?armv8-m.main=march?armv8.1-m.main+mve
> +
> +v8_1m_sp_variants = +fp +dsp+fp +mve.fp
> +v8_1m_dp_variants = +fp.dp +dsp+fp.dp +fp.dp+mve +fp.dp+mve.fp
> +
> +# Map all v8.1-m.main FP sp variants down to v8-m.
> +MULTILIB_MATCHES += $(foreach FP, $(v8_1m_sp_variants), \
> + march?armv8-m.main+fp=march?armv8.1-m.main$(FP))
> +
> +# Map all v8.1-m.main FP dp variants down to v8-m.
> +MULTILIB_MATCHES += $(foreach FP, $(v8_1m_dp_variants), \
> + march?armv8-m.main+fp.dp=march?armv8.1-m.main$(FP))
> diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp
> b/gcc/testsuite/gcc.target/arm/multilib.exp
> index
> dcea829965eb15e372401e6389df5a1403393ecb..63cca118da2578253740fcd95421eae9ddf219bd
> 100644
> --- a/gcc/testsuite/gcc.target/arm/multilib.exp
> +++ b/gcc/testsuite/gcc.target/arm/multilib.exp
> @@ -775,6 +775,27 @@ if {[multilib_config "rmprofile"] } {
> Â Â Â Â Â Â Â Â {-march=armv8-r+fp.sp -mfpu=auto -mfloat-abi=hard}
> "thumb/v7-r+fp.sp/hard"
> Â Â Â Â Â Â Â Â {-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=softfp}
> "thumb/v7-r+fp.sp/softfp"
> Â Â Â Â Â Â Â Â {-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=hard}
> "thumb/v7-r+fp.sp/hard"
> +Â Â Â Â Â Â {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=soft}
> "thumb/v8-m.main/nofp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=soft}
> "thumb/v8-m.main/nofp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=soft}
> "thumb/v8-m.main/nofp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=soft}
> "thumb/v8-m.main/nofp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=softfp}
> "thumb/v8-m.main/nofp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=softfp}
> "thumb/v8-m.main/nofp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=softfp}
> "thumb/v8-m.main+fp/softfp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto
> -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=hard}
> "thumb/v8-m.main+fp/hard"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=hard}
> "thumb/v8-m.main+dp/hard"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=soft}
> "thumb/v8-m.main/nofp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=soft}
> "thumb/v8-m.main/nofp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=softfp}
> "thumb/v8-m.main/nofp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=softfp}
> "thumb/v8-m.main+fp/softfp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=hard}
> "thumb/v8-m.main+fp/hard"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=soft}
> "thumb/v8-m.main/nofp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto
> -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto
> -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto
> -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=hard}
> "thumb/v8-m.main+dp/hard"
> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto
> -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> Â Â Â Â } {
> Â Â Â Â Â Â Â Â check_multi_dir $opts $dir
> Â Â Â Â }
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH][GCC][arm] Add CLI and multilib support for Armv8.1-M Mainline MVE extensions
2019-12-18 14:16 ` [PATCH][GCC][arm] Add CLI and multilib support for Armv8.1-M Mainline MVE extensions Kyrill Tkachov
@ 2019-12-18 17:03 ` Mihail Ionescu
2019-12-18 17:05 ` Kyrill Tkachov
2020-01-17 9:16 ` Jakub Jelinek
0 siblings, 2 replies; 8+ messages in thread
From: Mihail Ionescu @ 2019-12-18 17:03 UTC (permalink / raw)
To: Kyrill Tkachov, gcc-patches; +Cc: Richard Earnshaw
[-- Attachment #1: Type: text/plain, Size: 9018 bytes --]
Hi Kyrill,
On 12/18/2019 02:13 PM, Kyrill Tkachov wrote:
> Hi Mihail,
>
> On 11/8/19 4:52 PM, Mihail Ionescu wrote:
>> Hi,
>>
>> This patch adds CLI and multilib support for Armv8.1-M MVE to the Arm
>> backend.
>> Two new option added for v8.1-m.main: "+mve" for integer MVE
>> instructions only
>> and "+mve.fp" for both integer and single-precision/half-precision
>> floating-point MVE.
>> The patch also maps the Armv8.1-M multilib variants to the
>> corresponding v8-M ones.
>>
>>
>>
>> gcc/ChangeLog:
>>
>> 2019-11-08 Mihail Ionescu <mihail.ionescu@arm.com>
>> 2019-11-08Â Andre Vieira <andre.simoesdiasvieira@arm.com>
>>
>> Â Â Â Â Â Â Â * config/arm/arm-cpus.in (mve, mve_float): New features.
>> Â Â Â Â Â Â Â (dsp, mve, mve.fp): New options.
>> Â Â Â Â Â Â Â * config/arm/arm.h (TARGET_HAVE_MVE, TARGET_HAVE_MVE_FLOAT):
>> Define.
>> Â Â Â Â Â Â Â * config/arm/t-rmprofile: Map v8.1-M multilibs to v8-M.
>>
>>
>> gcc/testsuite/ChangeLog:
>>
>> 2019-11-08 Mihail Ionescu <mihail.ionescu@arm.com>
>> 2019-11-08Â Andre Vieira <andre.simoesdiasvieira@arm.com>
>>
>> Â Â Â Â Â Â Â * testsuite/gcc.target/arm/multilib.exp: Add v8.1-M entries.
>>
>>
>> Is this ok for trunk?
>
>
> This is ok, but please document the new options in invoke.texi.
>
Here it is with the updated invoke.texi and ChangeLog.
gcc/ChangeLog:
2019-12-18 Mihail Ionescu <mihail.ionescu@arm.com>
2019-12-18 Andre Vieira <andre.simoesdiasvieira@arm.com>
* config/arm/arm-cpus.in (mve, mve_float): New features.
(dsp, mve, mve.fp): New options.
* config/arm/arm.h (TARGET_HAVE_MVE, TARGET_HAVE_MVE_FLOAT): Define.
* config/arm/t-rmprofile: Map v8.1-M multilibs to v8-M.
* doc/invoke.texi: Document the armv8.1-m mve and dsp options.
gcc/testsuite/ChangeLog:
2019-12-18 Mihail Ionescu <mihail.ionescu@arm.com>
2019-12-18 Andre Vieira <andre.simoesdiasvieira@arm.com>
* testsuite/gcc.target/arm/multilib.exp: Add v8.1-M entries.
Thanks,
Mihail
> Thanks,
>
> Kyrill
>
>
>>
>> Best regards,
>>
>> Mihail
>>
>>
>> ###############Â Â Â Â Attachment also inlined for ease of reply
>> ###############
>>
>>
>> diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
>> index
>> 59aad8f62ee5186cc87d3cefaf40ba2ce049012d..c2f016c75e2d8dd06890295321232bef61cbd234
>> 100644
>> --- a/gcc/config/arm/arm-cpus.in
>> +++ b/gcc/config/arm/arm-cpus.in
>> @@ -194,6 +194,10 @@ define feature sb
>> Â # v8-A architectures, added by default from v8.5-A
>> Â define feature predres
>>
>> +# M-profile Vector Extension feature bits
>> +define feature mve
>> +define feature mve_float
>> +
>>  # Feature groups. Conventionally all (or mostly) upper case.
>> Â # ALL_FPU lists all the feature bits associated with the floating-point
>> Â # unit; these will all be removed if the floating-point unit is disabled
>> @@ -654,9 +658,12 @@ begin arch armv8.1-m.main
>> Â base 8M_MAIN
>> Â isa ARMv8_1m_main
>> Â # fp => FPv5-sp-d16; fp.dp => FPv5-d16
>> + option dsp add armv7em
>> Â option fp add FPv5 fp16
>> Â option fp.dp add FPv5 FP_DBL fp16
>> Â option nofp remove ALL_FP
>> + option mve add mve armv7em
>> + option mve.fp add mve FPv5 fp16 mve_float armv7em
>> Â end arch armv8.1-m.main
>>
>> Â begin arch iwmmxt
>> diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
>> index
>> 64c292f2862514fb600a4faeaddfeacb2b69180b..9ec38c6af1b84fc92e20e30e8f07ce5360a966c1
>> 100644
>> --- a/gcc/config/arm/arm.h
>> +++ b/gcc/config/arm/arm.h
>> @@ -310,6 +310,12 @@ emission of floating point pcs attributes. */
>>    instructions (most are floating-point related). */
>> Â #define TARGET_HAVE_FPCXT_CMSEÂ (arm_arch8_1m_main)
>>
>> +#define TARGET_HAVE_MVE (bitmap_bit_p (arm_active_target.isa, \
>> +Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â isa_bit_mve))
>> +
>> +#define TARGET_HAVE_MVE_FLOAT (bitmap_bit_p (arm_active_target.isa, \
>> + isa_bit_mve_float))
>> +
>>  /* Nonzero if integer division instructions supported. */
>> Â #define TARGET_IDIVÂ Â Â Â ((TARGET_ARM && arm_arch_arm_hwdiv)Â Â Â Â \
>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â || (TARGET_THUMB && arm_arch_thumb_hwdiv))
>> diff --git a/gcc/config/arm/t-rmprofile b/gcc/config/arm/t-rmprofile
>> index
>> 807e69eaf78625f422e2d7ef5936c5c80c5b9073..62e27fd284b21524896430176d64ff5b08c6e0ef
>> 100644
>> --- a/gcc/config/arm/t-rmprofile
>> +++ b/gcc/config/arm/t-rmprofile
>> @@ -54,7 +54,7 @@ MULTILIB_REQUIREDÂ Â Â Â +=
>> mthumb/march=armv8-m.main+fp.dp/mfloat-abi=softfp
>> Â # Arch Matches
>> Â MULTILIB_MATCHESÂ Â Â Â Â Â Â += march?armv6s-m=march?armv6-m
>>
>> -# Map all v8-m.main+dsp FP variants down the the variant without DSP.
>> +# Map all v8-m.main+dsp FP variants down to the variant without DSP.
>> Â MULTILIB_MATCHESÂ Â Â Â Â Â Â += march?armv8-m.main=march?armv8-m.main+dsp \
>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $(foreach FP, +fp +fp.dp, \
>> march?armv8-m.main$(FP)=march?armv8-m.main+dsp$(FP))
>> @@ -66,3 +66,18 @@ MULTILIB_MATCHESÂ Â Â Â +=
>> march?armv7e-m+fp=march?armv7e-m+fpv5
>> Â MULTILIB_REUSEÂ Â Â Â Â Â Â Â Â += $(foreach ARCH, armv6s-m armv7-m armv7e-m
>> armv8-m\.base armv8-m\.main, \
>> mthumb/march.$(ARCH)/mfloat-abi.soft=mthumb/march.$(ARCH)/mfloat-abi.softfp)
>>
>>
>> +# Map v8.1-M to v8-M.
>> +MULTILIB_MATCHESÂ Â Â Â Â Â += march?armv8-m.main=march?armv8.1-m.main
>> +MULTILIB_MATCHESÂ Â Â Â Â Â += march?armv8-m.main=march?armv8.1-m.main+dsp
>> +MULTILIB_MATCHESÂ Â Â Â Â Â += march?armv8-m.main=march?armv8.1-m.main+mve
>> +
>> +v8_1m_sp_variants = +fp +dsp+fp +mve.fp
>> +v8_1m_dp_variants = +fp.dp +dsp+fp.dp +fp.dp+mve +fp.dp+mve.fp
>> +
>> +# Map all v8.1-m.main FP sp variants down to v8-m.
>> +MULTILIB_MATCHES += $(foreach FP, $(v8_1m_sp_variants), \
>> + march?armv8-m.main+fp=march?armv8.1-m.main$(FP))
>> +
>> +# Map all v8.1-m.main FP dp variants down to v8-m.
>> +MULTILIB_MATCHES += $(foreach FP, $(v8_1m_dp_variants), \
>> + march?armv8-m.main+fp.dp=march?armv8.1-m.main$(FP))
>> diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp
>> b/gcc/testsuite/gcc.target/arm/multilib.exp
>> index
>> dcea829965eb15e372401e6389df5a1403393ecb..63cca118da2578253740fcd95421eae9ddf219bd
>> 100644
>> --- a/gcc/testsuite/gcc.target/arm/multilib.exp
>> +++ b/gcc/testsuite/gcc.target/arm/multilib.exp
>> @@ -775,6 +775,27 @@ if {[multilib_config "rmprofile"] } {
>> Â Â Â Â Â Â Â Â {-march=armv8-r+fp.sp -mfpu=auto -mfloat-abi=hard}
>> "thumb/v7-r+fp.sp/hard"
>> Â Â Â Â Â Â Â Â {-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=softfp}
>> "thumb/v7-r+fp.sp/softfp"
>> Â Â Â Â Â Â Â Â {-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=hard}
>> "thumb/v7-r+fp.sp/hard"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=soft}
>> "thumb/v8-m.main/nofp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=soft}
>> "thumb/v8-m.main/nofp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=soft}
>> "thumb/v8-m.main/nofp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=soft}
>> "thumb/v8-m.main/nofp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=softfp}
>> "thumb/v8-m.main/nofp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=softfp}
>> "thumb/v8-m.main/nofp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=softfp}
>> "thumb/v8-m.main+fp/softfp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto
>> -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=hard}
>> "thumb/v8-m.main+fp/hard"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=hard}
>> "thumb/v8-m.main+dp/hard"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=soft}
>> "thumb/v8-m.main/nofp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=soft}
>> "thumb/v8-m.main/nofp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=softfp}
>> "thumb/v8-m.main/nofp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=softfp}
>> "thumb/v8-m.main+fp/softfp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=hard}
>> "thumb/v8-m.main+fp/hard"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=soft}
>> "thumb/v8-m.main/nofp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto
>> -mfloat-abi=soft} "thumb/v8-m.main/nofp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto
>> -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto
>> -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=hard}
>> "thumb/v8-m.main+dp/hard"
>> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto
>> -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
>> Â Â Â Â } {
>> Â Â Â Â Â Â Â Â check_multi_dir $opts $dir
>> Â Â Â Â }
>>
[-- Attachment #2: diff.patch --]
[-- Type: text/x-patch, Size: 6442 bytes --]
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index 59aad8f62ee5186cc87d3cefaf40ba2ce049012d..c2f016c75e2d8dd06890295321232bef61cbd234 100644
--- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in
@@ -194,6 +194,10 @@ define feature sb
# v8-A architectures, added by default from v8.5-A
define feature predres
+# M-profile Vector Extension feature bits
+define feature mve
+define feature mve_float
+
# Feature groups. Conventionally all (or mostly) upper case.
# ALL_FPU lists all the feature bits associated with the floating-point
# unit; these will all be removed if the floating-point unit is disabled
@@ -654,9 +658,12 @@ begin arch armv8.1-m.main
base 8M_MAIN
isa ARMv8_1m_main
# fp => FPv5-sp-d16; fp.dp => FPv5-d16
+ option dsp add armv7em
option fp add FPv5 fp16
option fp.dp add FPv5 FP_DBL fp16
option nofp remove ALL_FP
+ option mve add mve armv7em
+ option mve.fp add mve FPv5 fp16 mve_float armv7em
end arch armv8.1-m.main
begin arch iwmmxt
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 64c292f2862514fb600a4faeaddfeacb2b69180b..9ec38c6af1b84fc92e20e30e8f07ce5360a966c1 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -310,6 +310,12 @@ emission of floating point pcs attributes. */
instructions (most are floating-point related). */
#define TARGET_HAVE_FPCXT_CMSE (arm_arch8_1m_main)
+#define TARGET_HAVE_MVE (bitmap_bit_p (arm_active_target.isa, \
+ isa_bit_mve))
+
+#define TARGET_HAVE_MVE_FLOAT (bitmap_bit_p (arm_active_target.isa, \
+ isa_bit_mve_float))
+
/* Nonzero if integer division instructions supported. */
#define TARGET_IDIV ((TARGET_ARM && arm_arch_arm_hwdiv) \
|| (TARGET_THUMB && arm_arch_thumb_hwdiv))
diff --git a/gcc/config/arm/t-rmprofile b/gcc/config/arm/t-rmprofile
index 807e69eaf78625f422e2d7ef5936c5c80c5b9073..62e27fd284b21524896430176d64ff5b08c6e0ef 100644
--- a/gcc/config/arm/t-rmprofile
+++ b/gcc/config/arm/t-rmprofile
@@ -54,7 +54,7 @@ MULTILIB_REQUIRED += mthumb/march=armv8-m.main+fp.dp/mfloat-abi=softfp
# Arch Matches
MULTILIB_MATCHES += march?armv6s-m=march?armv6-m
-# Map all v8-m.main+dsp FP variants down the the variant without DSP.
+# Map all v8-m.main+dsp FP variants down to the variant without DSP.
MULTILIB_MATCHES += march?armv8-m.main=march?armv8-m.main+dsp \
$(foreach FP, +fp +fp.dp, \
march?armv8-m.main$(FP)=march?armv8-m.main+dsp$(FP))
@@ -66,3 +66,18 @@ MULTILIB_MATCHES += march?armv7e-m+fp=march?armv7e-m+fpv5
MULTILIB_REUSE += $(foreach ARCH, armv6s-m armv7-m armv7e-m armv8-m\.base armv8-m\.main, \
mthumb/march.$(ARCH)/mfloat-abi.soft=mthumb/march.$(ARCH)/mfloat-abi.softfp)
+# Map v8.1-M to v8-M.
+MULTILIB_MATCHES += march?armv8-m.main=march?armv8.1-m.main
+MULTILIB_MATCHES += march?armv8-m.main=march?armv8.1-m.main+dsp
+MULTILIB_MATCHES += march?armv8-m.main=march?armv8.1-m.main+mve
+
+v8_1m_sp_variants = +fp +dsp+fp +mve.fp
+v8_1m_dp_variants = +fp.dp +dsp+fp.dp +fp.dp+mve +fp.dp+mve.fp
+
+# Map all v8.1-m.main FP sp variants down to v8-m.
+MULTILIB_MATCHES += $(foreach FP, $(v8_1m_sp_variants), \
+ march?armv8-m.main+fp=march?armv8.1-m.main$(FP))
+
+# Map all v8.1-m.main FP dp variants down to v8-m.
+MULTILIB_MATCHES += $(foreach FP, $(v8_1m_dp_variants), \
+ march?armv8-m.main+fp.dp=march?armv8.1-m.main$(FP))
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index fb4e7d1a4be341587dea8afc3a3c0b356fe09022..41138d37863d2811354c956307f49dde7912949a 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -17723,6 +17723,17 @@ Disable the floating-point extensions.
@item armv8.1-m.main
@table @samp
+
+@item +dsp
+The DSP instructions.
+
+@item +mve
+The M-Profile Vector Extension (MVE) integer instructions.
+
+@item +mve.fp
+The M-Profile Vector Extension (MVE) integer and single precision
+floating-point instructions.
+
@item +fp
The single-precision floating-point instructions.
diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp b/gcc/testsuite/gcc.target/arm/multilib.exp
index dcea829965eb15e372401e6389df5a1403393ecb..63cca118da2578253740fcd95421eae9ddf219bd 100644
--- a/gcc/testsuite/gcc.target/arm/multilib.exp
+++ b/gcc/testsuite/gcc.target/arm/multilib.exp
@@ -775,6 +775,27 @@ if {[multilib_config "rmprofile"] } {
{-march=armv8-r+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard"
{-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp"
{-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard"
+ {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
+ {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
+ {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
+ {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
+ {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
+ {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
+ {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
+ {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
+ {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
+ {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
} {
check_multi_dir $opts $dir
}
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH][GCC][arm] Add CLI and multilib support for Armv8.1-M Mainline MVE extensions
2019-12-18 17:03 ` Mihail Ionescu
@ 2019-12-18 17:05 ` Kyrill Tkachov
2020-01-17 9:16 ` Jakub Jelinek
1 sibling, 0 replies; 8+ messages in thread
From: Kyrill Tkachov @ 2019-12-18 17:05 UTC (permalink / raw)
To: Mihail Ionescu, gcc-patches; +Cc: Richard Earnshaw
On 12/18/19 5:00 PM, Mihail Ionescu wrote:
> Hi Kyrill,
>
> On 12/18/2019 02:13 PM, Kyrill Tkachov wrote:
> > Hi Mihail,
> >
> > On 11/8/19 4:52 PM, Mihail Ionescu wrote:
> >> Hi,
> >>
> >> This patch adds CLI and multilib support for Armv8.1-M MVE to the Arm
> >> backend.
> >> Two new option added for v8.1-m.main: "+mve" for integer MVE
> >> instructions only
> >> and "+mve.fp" for both integer and single-precision/half-precision
> >> floating-point MVE.
> >> The patch also maps the Armv8.1-M multilib variants to the
> >> corresponding v8-M ones.
> >>
> >>
> >>
> >> gcc/ChangeLog:
> >>
> >> 2019-11-08Â Mihail Ionescu <mihail.ionescu@arm.com>
> >> 2019-11-08Â Andre Vieira <andre.simoesdiasvieira@arm.com>
> >>
> >> Â Â Â Â Â Â Â * config/arm/arm-cpus.in (mve, mve_float): New features.
> >> Â Â Â Â Â Â Â (dsp, mve, mve.fp): New options.
> >> Â Â Â Â Â Â Â * config/arm/arm.h (TARGET_HAVE_MVE, TARGET_HAVE_MVE_FLOAT):
> >> Define.
> >> Â Â Â Â Â Â Â * config/arm/t-rmprofile: Map v8.1-M multilibs to v8-M.
> >>
> >>
> >> gcc/testsuite/ChangeLog:
> >>
> >> 2019-11-08Â Mihail Ionescu <mihail.ionescu@arm.com>
> >> 2019-11-08Â Andre Vieira <andre.simoesdiasvieira@arm.com>
> >>
> >> Â Â Â Â Â Â Â * testsuite/gcc.target/arm/multilib.exp: Add v8.1-M entries.
> >>
> >>
> >> Is this ok for trunk?
> >
> >
> > This is ok, but please document the new options in invoke.texi.
> >
>
> Here it is with the updated invoke.texi and ChangeLog.
>
Thanks, looks great to me.
Kyrill
>
> gcc/ChangeLog:
>
> 2019-12-18 Mihail Ionescu <mihail.ionescu@arm.com>
> 2019-12-18Â Andre Vieira <andre.simoesdiasvieira@arm.com>
>
> Â Â Â Â Â Â Â * config/arm/arm-cpus.in (mve, mve_float): New features.
> Â Â Â Â Â Â Â (dsp, mve, mve.fp): New options.
> Â Â Â Â Â Â Â * config/arm/arm.h (TARGET_HAVE_MVE, TARGET_HAVE_MVE_FLOAT):
> Define.
> Â Â Â Â Â Â Â * config/arm/t-rmprofile: Map v8.1-M multilibs to v8-M.
> Â Â Â Â Â Â Â * doc/invoke.texi: Document the armv8.1-m mve and dsp options.
>
>
> gcc/testsuite/ChangeLog:
>
> 2019-12-18 Mihail Ionescu <mihail.ionescu@arm.com>
> 2019-12-18Â Andre Vieira <andre.simoesdiasvieira@arm.com>
>
> Â Â Â Â Â Â Â * testsuite/gcc.target/arm/multilib.exp: Add v8.1-M entries.
>
>
> Thanks,
> Mihail
>
> > Thanks,
> >
> > Kyrill
> >
> >
> >>
> >> Best regards,
> >>
> >> Mihail
> >>
> >>
> >> ###############Â Â Â Â Attachment also inlined for ease of reply
> >> ###############
> >>
> >>
> >> diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
> >> index
> >>
> 59aad8f62ee5186cc87d3cefaf40ba2ce049012d..c2f016c75e2d8dd06890295321232bef61cbd234
>
> >> 100644
> >> --- a/gcc/config/arm/arm-cpus.in
> >> +++ b/gcc/config/arm/arm-cpus.in
> >> @@ -194,6 +194,10 @@ define feature sb
> >> Â # v8-A architectures, added by default from v8.5-A
> >> Â define feature predres
> >>
> >> +# M-profile Vector Extension feature bits
> >> +define feature mve
> >> +define feature mve_float
> >> +
> >>  # Feature groups. Conventionally all (or mostly) upper case.
> >> Â # ALL_FPU lists all the feature bits associated with the
> floating-point
> >> Â # unit; these will all be removed if the floating-point unit is
> disabled
> >> @@ -654,9 +658,12 @@ begin arch armv8.1-m.main
> >> Â base 8M_MAIN
> >> Â isa ARMv8_1m_main
> >> Â # fp => FPv5-sp-d16; fp.dp => FPv5-d16
> >> + option dsp add armv7em
> >> Â option fp add FPv5 fp16
> >> Â option fp.dp add FPv5 FP_DBL fp16
> >> Â option nofp remove ALL_FP
> >> + option mve add mve armv7em
> >> + option mve.fp add mve FPv5 fp16 mve_float armv7em
> >> Â end arch armv8.1-m.main
> >>
> >> Â begin arch iwmmxt
> >> diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
> >> index
> >>
> 64c292f2862514fb600a4faeaddfeacb2b69180b..9ec38c6af1b84fc92e20e30e8f07ce5360a966c1
>
> >> 100644
> >> --- a/gcc/config/arm/arm.h
> >> +++ b/gcc/config/arm/arm.h
> >> @@ -310,6 +310,12 @@ emission of floating point pcs attributes. */
> >>    instructions (most are floating-point related). */
> >> Â #define TARGET_HAVE_FPCXT_CMSE (arm_arch8_1m_main)
> >>
> >> +#define TARGET_HAVE_MVE (bitmap_bit_p (arm_active_target.isa, \
> >> + isa_bit_mve))
> >> +
> >> +#define TARGET_HAVE_MVE_FLOAT (bitmap_bit_p (arm_active_target.isa, \
> >> + isa_bit_mve_float))
> >> +
> >>  /* Nonzero if integer division instructions supported. */
> >> Â #define TARGET_IDIVÂ Â Â Â ((TARGET_ARM && arm_arch_arm_hwdiv)Â Â Â Â \
> >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â || (TARGET_THUMB && arm_arch_thumb_hwdiv))
> >> diff --git a/gcc/config/arm/t-rmprofile b/gcc/config/arm/t-rmprofile
> >> index
> >>
> 807e69eaf78625f422e2d7ef5936c5c80c5b9073..62e27fd284b21524896430176d64ff5b08c6e0ef
>
> >> 100644
> >> --- a/gcc/config/arm/t-rmprofile
> >> +++ b/gcc/config/arm/t-rmprofile
> >> @@ -54,7 +54,7 @@ MULTILIB_REQUIREDÂ Â Â Â +=
> >> mthumb/march=armv8-m.main+fp.dp/mfloat-abi=softfp
> >> Â # Arch Matches
> >> Â MULTILIB_MATCHESÂ Â Â Â Â Â Â += march?armv6s-m=march?armv6-m
> >>
> >> -# Map all v8-m.main+dsp FP variants down the the variant without DSP.
> >> +# Map all v8-m.main+dsp FP variants down to the variant without DSP.
> >> Â MULTILIB_MATCHESÂ Â Â Â Â Â Â += march?armv8-m.main=march?armv8-m.main+dsp \
> >> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â $(foreach FP, +fp +fp.dp, \
> >> march?armv8-m.main$(FP)=march?armv8-m.main+dsp$(FP))
> >> @@ -66,3 +66,18 @@ MULTILIB_MATCHESÂ Â Â Â +=
> >> march?armv7e-m+fp=march?armv7e-m+fpv5
> >> Â MULTILIB_REUSEÂ Â Â Â Â Â Â Â Â += $(foreach ARCH, armv6s-m armv7-m armv7e-m
> >> armv8-m\.base armv8-m\.main, \
> >>
> mthumb/march.$(ARCH)/mfloat-abi.soft=mthumb/march.$(ARCH)/mfloat-abi.softfp)
>
> >>
> >>
> >> +# Map v8.1-M to v8-M.
> >> +MULTILIB_MATCHESÂ Â Â Â Â Â += march?armv8-m.main=march?armv8.1-m.main
> >> +MULTILIB_MATCHESÂ Â Â Â Â Â += march?armv8-m.main=march?armv8.1-m.main+dsp
> >> +MULTILIB_MATCHESÂ Â Â Â Â Â += march?armv8-m.main=march?armv8.1-m.main+mve
> >> +
> >> +v8_1m_sp_variants = +fp +dsp+fp +mve.fp
> >> +v8_1m_dp_variants = +fp.dp +dsp+fp.dp +fp.dp+mve +fp.dp+mve.fp
> >> +
> >> +# Map all v8.1-m.main FP sp variants down to v8-m.
> >> +MULTILIB_MATCHES += $(foreach FP, $(v8_1m_sp_variants), \
> >> + march?armv8-m.main+fp=march?armv8.1-m.main$(FP))
> >> +
> >> +# Map all v8.1-m.main FP dp variants down to v8-m.
> >> +MULTILIB_MATCHES += $(foreach FP, $(v8_1m_dp_variants), \
> >> + march?armv8-m.main+fp.dp=march?armv8.1-m.main$(FP))
> >> diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp
> >> b/gcc/testsuite/gcc.target/arm/multilib.exp
> >> index
> >>
> dcea829965eb15e372401e6389df5a1403393ecb..63cca118da2578253740fcd95421eae9ddf219bd
>
> >> 100644
> >> --- a/gcc/testsuite/gcc.target/arm/multilib.exp
> >> +++ b/gcc/testsuite/gcc.target/arm/multilib.exp
> >> @@ -775,6 +775,27 @@ if {[multilib_config "rmprofile"] } {
> >> Â Â Â Â Â Â Â Â {-march=armv8-r+fp.sp -mfpu=auto -mfloat-abi=hard}
> >> "thumb/v7-r+fp.sp/hard"
> >> Â Â Â Â Â Â Â Â {-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=softfp}
> >> "thumb/v7-r+fp.sp/softfp"
> >> Â Â Â Â Â Â Â Â {-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=hard}
> >> "thumb/v7-r+fp.sp/hard"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=soft}
> >> "thumb/v8-m.main/nofp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=soft}
> >> "thumb/v8-m.main/nofp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=soft}
> >> "thumb/v8-m.main/nofp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=soft}
> >> "thumb/v8-m.main/nofp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=softfp}
> >> "thumb/v8-m.main/nofp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=softfp}
> >> "thumb/v8-m.main/nofp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=softfp}
> >> "thumb/v8-m.main+fp/softfp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto
> >> -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=hard}
> >> "thumb/v8-m.main+fp/hard"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=hard}
> >> "thumb/v8-m.main+dp/hard"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=soft}
> >> "thumb/v8-m.main/nofp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=soft}
> >> "thumb/v8-m.main/nofp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=softfp}
> >> "thumb/v8-m.main/nofp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=softfp}
> >> "thumb/v8-m.main+fp/softfp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=hard}
> >> "thumb/v8-m.main+fp/hard"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=soft}
> >> "thumb/v8-m.main/nofp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto
> >> -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto
> >> -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto
> >> -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=hard}
> >> "thumb/v8-m.main+dp/hard"
> >> +Â Â Â Â Â Â {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto
> >> -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> >> Â Â Â Â } {
> >> Â Â Â Â Â Â Â Â check_multi_dir $opts $dir
> >> Â Â Â Â }
> >>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH][GCC][arm] Add CLI and multilib support for Armv8.1-M Mainline MVE extensions
2019-12-18 17:03 ` Mihail Ionescu
2019-12-18 17:05 ` Kyrill Tkachov
@ 2020-01-17 9:16 ` Jakub Jelinek
2020-01-17 11:25 ` Mihail Ionescu
1 sibling, 1 reply; 8+ messages in thread
From: Jakub Jelinek @ 2020-01-17 9:16 UTC (permalink / raw)
To: Mihail Ionescu; +Cc: Kyrill Tkachov, gcc-patches, Richard Earnshaw
On Wed, Dec 18, 2019 at 05:00:01PM +0000, Mihail Ionescu wrote:
> 2019-12-18 Mihail Ionescu <mihail.ionescu@arm.com>
> 2019-12-18 Andre Vieira <andre.simoesdiasvieira@arm.com>
>
> * config/arm/arm-cpus.in (mve, mve_float): New features.
> (dsp, mve, mve.fp): New options.
Note, the above is not the right ChangeLog formatting when you have more
than one author. The date should be there only for the first line, for the
other authors there should be just tab and 4 spaces, otherwise various tools
that parse ChangeLog entries will be quite confused. So like:
2019-12-18 Mihail Ionescu <mihail.ionescu@arm.com>
Andre Vieira <andre.simoesdiasvieira@arm.com>
I've fixed your commits in 2b3534a3122236d6317256f16daa332278391907
but please remember this next time.
Thanks.
Jakub
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH][GCC][arm] Add CLI and multilib support for Armv8.1-M Mainline MVE extensions
2020-01-17 9:16 ` Jakub Jelinek
@ 2020-01-17 11:25 ` Mihail Ionescu
2020-01-17 20:13 ` Jakub Jelinek
0 siblings, 1 reply; 8+ messages in thread
From: Mihail Ionescu @ 2020-01-17 11:25 UTC (permalink / raw)
To: gcc-patches
Hi Jakub,
On 01/17/2020 08:37 AM, Jakub Jelinek wrote:
> On Wed, Dec 18, 2019 at 05:00:01PM +0000, Mihail Ionescu wrote:
>> 2019-12-18 Mihail Ionescu <mihail.ionescu@arm.com>
>> 2019-12-18 Andre Vieira <andre.simoesdiasvieira@arm.com>
>>
>> * config/arm/arm-cpus.in (mve, mve_float): New features.
>> (dsp, mve, mve.fp): New options.
>
> Note, the above is not the right ChangeLog formatting when you have more
> than one author. The date should be there only for the first line, for the
> other authors there should be just tab and 4 spaces, otherwise various tools
> that parse ChangeLog entries will be quite confused. So like:
> 2019-12-18 Mihail Ionescu <mihail.ionescu@arm.com>
> Andre Vieira <andre.simoesdiasvieira@arm.com>
>
> I've fixed your commits in 2b3534a3122236d6317256f16daa332278391907
> but please remember this next time.
>
> Thanks.
>
> Jakub
>
Thank you, I did not realise that I wasn't using the correct formatting
style. I'll keep that in mind for next time.
Regards,
Mihail
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH][GCC][arm] Add CLI and multilib support for Armv8.1-M Mainline MVE extensions
2020-01-17 11:25 ` Mihail Ionescu
@ 2020-01-17 20:13 ` Jakub Jelinek
2020-01-18 11:12 ` Jakub Jelinek
0 siblings, 1 reply; 8+ messages in thread
From: Jakub Jelinek @ 2020-01-17 20:13 UTC (permalink / raw)
To: Mihail Ionescu; +Cc: gcc-patches
On Fri, Jan 17, 2020 at 11:12:08AM +0000, Mihail Ionescu wrote:
> On 01/17/2020 08:37 AM, Jakub Jelinek wrote:
> > On Wed, Dec 18, 2019 at 05:00:01PM +0000, Mihail Ionescu wrote:
> > > 2019-12-18 Mihail Ionescu <mihail.ionescu@arm.com>
> > > 2019-12-18 Andre Vieira <andre.simoesdiasvieira@arm.com>
> > >
> > > * config/arm/arm-cpus.in (mve, mve_float): New features.
> > > (dsp, mve, mve.fp): New options.
> >
> > Note, the above is not the right ChangeLog formatting when you have more
> > than one author. The date should be there only for the first line, for the
> > other authors there should be just tab and 4 spaces, otherwise various tools
> > that parse ChangeLog entries will be quite confused. So like:
> > 2019-12-18 Mihail Ionescu <mihail.ionescu@arm.com>
> > Andre Vieira <andre.simoesdiasvieira@arm.com>
> >
> > I've fixed your commits in 2b3534a3122236d6317256f16daa332278391907
> > but please remember this next time.
>
> Thank you, I did not realise that I wasn't using the correct formatting
> style. I'll keep that in mind for next time.
Two more things.
One is I wonder if it has been bootstrapped, because at least in a cross
from x86_64-linux to armv7hl-linux-gnueabi I'm seeing:
../../gcc/config/arm/arm.c: In function ‘void cmse_nonsecure_call_inline_register_clear()’:
../../gcc/config/arm/arm.c:18469:18: warning: unused variable ‘next’ [-Wunused-variable]
rtx_insn *next, *last, *pop_insn, *after = insn;
^~~~
warning, which I believe in bootstrap would result in
-Werror=unused-variable error.
The variable is really unused, so I've checked in as obvious following
patch.
The other thing is that https://gcc.gnu.org/codingconventions.html and
https://www.gnu.org/prep/standards/standards.html#Formatting say that
rtx tmp =
copy_to_suggested_reg (XEXP (operands[0], 0),
gen_rtx_REG (SImode, R4_REGNUM),
SImode);
etc. I've seen in your patch is not correctly formatted, the =
should not be at the end of line (similarly to |, &, ||, &&, +, -,
etc.), but should be at the start of the next line.
That would be then
rtx tmp
= copy_to_suggested_reg (XEXP (operands[0], 0),
gen_rtx_REG (SImode, R4_REGNUM),
SImode);
but the line is really short, so I don't see a point to break line there at
all, you can just use:
rtx tmp = copy_to_suggested_reg (XEXP (operands[0], 0),
gen_rtx_REG (SImode, R4_REGNUM),
SImode);
2020-01-17 Jakub Jelinek <jakub@redhat.com>
* config/arm/arm.c (cmse_nonsecure_call_inline_register_clear): Remove
unused variable.
--- gcc/config/arm/arm.c.jj 2020-01-17 09:31:28.594195284 +0100
+++ gcc/config/arm/arm.c 2020-01-17 19:30:47.747756756 +0100
@@ -18466,7 +18466,7 @@ cmse_nonsecure_call_inline_register_clea
if (TARGET_HAVE_FPCXT_CMSE)
{
- rtx_insn *next, *last, *pop_insn, *after = insn;
+ rtx_insn *last, *pop_insn, *after = insn;
start_sequence ();
Jakub
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH][GCC][arm] Add CLI and multilib support for Armv8.1-M Mainline MVE extensions
2020-01-17 20:13 ` Jakub Jelinek
@ 2020-01-18 11:12 ` Jakub Jelinek
0 siblings, 0 replies; 8+ messages in thread
From: Jakub Jelinek @ 2020-01-18 11:12 UTC (permalink / raw)
To: Mihail Ionescu; +Cc: gcc-patches
On Fri, Jan 17, 2020 at 07:58:46PM +0100, Jakub Jelinek wrote:
> One is I wonder if it has been bootstrapped, because at least in a cross
> from x86_64-linux to armv7hl-linux-gnueabi I'm seeing:
> ../../gcc/config/arm/arm.c: In function ‘void cmse_nonsecure_call_inline_register_clear()’:
> ../../gcc/config/arm/arm.c:18469:18: warning: unused variable ‘next’ [-Wunused-variable]
> rtx_insn *next, *last, *pop_insn, *after = insn;
> ^~~~
> warning, which I believe in bootstrap would result in
> -Werror=unused-variable error.
Bootstrap found yet another unused variable:
../../gcc/config/arm/vfp.md:1651:17: warning: unused variable 'regname' [-Wunused-variable]
Fixed thusly, committed as obvious to trunk.
2020-01-18 Jakub Jelinek <jakub@redhat.com>
* config/arm/vfp.md (*clear_vfp_multiple): Remove unused variable.
--- gcc/config/arm/vfp.md
+++ gcc/config/arm/vfp.md
@@ -1648,7 +1648,6 @@ (define_insn "*clear_vfp_multiple"
{
int num_regs = XVECLEN (operands[0], 0);
char pattern[30];
- const char *regname;
rtx reg;
strcpy (pattern, \"vscclrm%?\\t{%|\");
Jakub
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH][GCC][arm] Add CLI and multilib support for Armv8.1-M Mainline MVE extensions
@ 2019-11-08 17:07 Mihail Ionescu
0 siblings, 0 replies; 8+ messages in thread
From: Mihail Ionescu @ 2019-11-08 17:07 UTC (permalink / raw)
To: gcc-patches; +Cc: kyrylo.tkachov, Richard.Earnshaw
[-- Attachment #1: Type: text/plain, Size: 6866 bytes --]
Hi,
This patch adds CLI and multilib support for Armv8.1-M MVE to the Arm backend.
Two new option added for v8.1-m.main: "+mve" for integer MVE instructions only
and "+mve.fp" for both integer and single-precision/half-precision
floating-point MVE.
The patch also maps the Armv8.1-M multilib variants to the corresponding v8-M ones.
gcc/ChangeLog:
2019-11-08 Mihail Ionescu <mihail.ionescu@arm.com>
2019-11-08 Andre Vieira <andre.simoesdiasvieira@arm.com>
* config/arm/arm-cpus.in (mve, mve_float): New features.
(dsp, mve, mve.fp): New options.
* config/arm/arm.h (TARGET_HAVE_MVE, TARGET_HAVE_MVE_FLOAT): Define.
* config/arm/t-rmprofile: Map v8.1-M multilibs to v8-M.
gcc/testsuite/ChangeLog:
2019-11-08 Mihail Ionescu <mihail.ionescu@arm.com>
2019-11-08 Andre Vieira <andre.simoesdiasvieira@arm.com>
* testsuite/gcc.target/arm/multilib.exp: Add v8.1-M entries.
Is this ok for trunk?
Best regards,
Mihail
############### Attachment also inlined for ease of reply ###############
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index 59aad8f62ee5186cc87d3cefaf40ba2ce049012d..c2f016c75e2d8dd06890295321232bef61cbd234 100644
--- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in
@@ -194,6 +194,10 @@ define feature sb
# v8-A architectures, added by default from v8.5-A
define feature predres
+# M-profile Vector Extension feature bits
+define feature mve
+define feature mve_float
+
# Feature groups. Conventionally all (or mostly) upper case.
# ALL_FPU lists all the feature bits associated with the floating-point
# unit; these will all be removed if the floating-point unit is disabled
@@ -654,9 +658,12 @@ begin arch armv8.1-m.main
base 8M_MAIN
isa ARMv8_1m_main
# fp => FPv5-sp-d16; fp.dp => FPv5-d16
+ option dsp add armv7em
option fp add FPv5 fp16
option fp.dp add FPv5 FP_DBL fp16
option nofp remove ALL_FP
+ option mve add mve armv7em
+ option mve.fp add mve FPv5 fp16 mve_float armv7em
end arch armv8.1-m.main
begin arch iwmmxt
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 64c292f2862514fb600a4faeaddfeacb2b69180b..9ec38c6af1b84fc92e20e30e8f07ce5360a966c1 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -310,6 +310,12 @@ emission of floating point pcs attributes. */
instructions (most are floating-point related). */
#define TARGET_HAVE_FPCXT_CMSE (arm_arch8_1m_main)
+#define TARGET_HAVE_MVE (bitmap_bit_p (arm_active_target.isa, \
+ isa_bit_mve))
+
+#define TARGET_HAVE_MVE_FLOAT (bitmap_bit_p (arm_active_target.isa, \
+ isa_bit_mve_float))
+
/* Nonzero if integer division instructions supported. */
#define TARGET_IDIV ((TARGET_ARM && arm_arch_arm_hwdiv) \
|| (TARGET_THUMB && arm_arch_thumb_hwdiv))
diff --git a/gcc/config/arm/t-rmprofile b/gcc/config/arm/t-rmprofile
index 807e69eaf78625f422e2d7ef5936c5c80c5b9073..62e27fd284b21524896430176d64ff5b08c6e0ef 100644
--- a/gcc/config/arm/t-rmprofile
+++ b/gcc/config/arm/t-rmprofile
@@ -54,7 +54,7 @@ MULTILIB_REQUIRED += mthumb/march=armv8-m.main+fp.dp/mfloat-abi=softfp
# Arch Matches
MULTILIB_MATCHES += march?armv6s-m=march?armv6-m
-# Map all v8-m.main+dsp FP variants down the the variant without DSP.
+# Map all v8-m.main+dsp FP variants down to the variant without DSP.
MULTILIB_MATCHES += march?armv8-m.main=march?armv8-m.main+dsp \
$(foreach FP, +fp +fp.dp, \
march?armv8-m.main$(FP)=march?armv8-m.main+dsp$(FP))
@@ -66,3 +66,18 @@ MULTILIB_MATCHES += march?armv7e-m+fp=march?armv7e-m+fpv5
MULTILIB_REUSE += $(foreach ARCH, armv6s-m armv7-m armv7e-m armv8-m\.base armv8-m\.main, \
mthumb/march.$(ARCH)/mfloat-abi.soft=mthumb/march.$(ARCH)/mfloat-abi.softfp)
+# Map v8.1-M to v8-M.
+MULTILIB_MATCHES += march?armv8-m.main=march?armv8.1-m.main
+MULTILIB_MATCHES += march?armv8-m.main=march?armv8.1-m.main+dsp
+MULTILIB_MATCHES += march?armv8-m.main=march?armv8.1-m.main+mve
+
+v8_1m_sp_variants = +fp +dsp+fp +mve.fp
+v8_1m_dp_variants = +fp.dp +dsp+fp.dp +fp.dp+mve +fp.dp+mve.fp
+
+# Map all v8.1-m.main FP sp variants down to v8-m.
+MULTILIB_MATCHES += $(foreach FP, $(v8_1m_sp_variants), \
+ march?armv8-m.main+fp=march?armv8.1-m.main$(FP))
+
+# Map all v8.1-m.main FP dp variants down to v8-m.
+MULTILIB_MATCHES += $(foreach FP, $(v8_1m_dp_variants), \
+ march?armv8-m.main+fp.dp=march?armv8.1-m.main$(FP))
diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp b/gcc/testsuite/gcc.target/arm/multilib.exp
index dcea829965eb15e372401e6389df5a1403393ecb..63cca118da2578253740fcd95421eae9ddf219bd 100644
--- a/gcc/testsuite/gcc.target/arm/multilib.exp
+++ b/gcc/testsuite/gcc.target/arm/multilib.exp
@@ -775,6 +775,27 @@ if {[multilib_config "rmprofile"] } {
{-march=armv8-r+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard"
{-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp"
{-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard"
+ {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
+ {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
+ {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
+ {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
+ {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
+ {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
+ {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
+ {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
+ {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
+ {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
} {
check_multi_dir $opts $dir
}
[-- Attachment #2: diff.patch --]
[-- Type: text/plain, Size: 5846 bytes --]
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index 59aad8f62ee5186cc87d3cefaf40ba2ce049012d..c2f016c75e2d8dd06890295321232bef61cbd234 100644
--- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in
@@ -194,6 +194,10 @@ define feature sb
# v8-A architectures, added by default from v8.5-A
define feature predres
+# M-profile Vector Extension feature bits
+define feature mve
+define feature mve_float
+
# Feature groups. Conventionally all (or mostly) upper case.
# ALL_FPU lists all the feature bits associated with the floating-point
# unit; these will all be removed if the floating-point unit is disabled
@@ -654,9 +658,12 @@ begin arch armv8.1-m.main
base 8M_MAIN
isa ARMv8_1m_main
# fp => FPv5-sp-d16; fp.dp => FPv5-d16
+ option dsp add armv7em
option fp add FPv5 fp16
option fp.dp add FPv5 FP_DBL fp16
option nofp remove ALL_FP
+ option mve add mve armv7em
+ option mve.fp add mve FPv5 fp16 mve_float armv7em
end arch armv8.1-m.main
begin arch iwmmxt
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 64c292f2862514fb600a4faeaddfeacb2b69180b..9ec38c6af1b84fc92e20e30e8f07ce5360a966c1 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -310,6 +310,12 @@ emission of floating point pcs attributes. */
instructions (most are floating-point related). */
#define TARGET_HAVE_FPCXT_CMSE (arm_arch8_1m_main)
+#define TARGET_HAVE_MVE (bitmap_bit_p (arm_active_target.isa, \
+ isa_bit_mve))
+
+#define TARGET_HAVE_MVE_FLOAT (bitmap_bit_p (arm_active_target.isa, \
+ isa_bit_mve_float))
+
/* Nonzero if integer division instructions supported. */
#define TARGET_IDIV ((TARGET_ARM && arm_arch_arm_hwdiv) \
|| (TARGET_THUMB && arm_arch_thumb_hwdiv))
diff --git a/gcc/config/arm/t-rmprofile b/gcc/config/arm/t-rmprofile
index 807e69eaf78625f422e2d7ef5936c5c80c5b9073..62e27fd284b21524896430176d64ff5b08c6e0ef 100644
--- a/gcc/config/arm/t-rmprofile
+++ b/gcc/config/arm/t-rmprofile
@@ -54,7 +54,7 @@ MULTILIB_REQUIRED += mthumb/march=armv8-m.main+fp.dp/mfloat-abi=softfp
# Arch Matches
MULTILIB_MATCHES += march?armv6s-m=march?armv6-m
-# Map all v8-m.main+dsp FP variants down the the variant without DSP.
+# Map all v8-m.main+dsp FP variants down to the variant without DSP.
MULTILIB_MATCHES += march?armv8-m.main=march?armv8-m.main+dsp \
$(foreach FP, +fp +fp.dp, \
march?armv8-m.main$(FP)=march?armv8-m.main+dsp$(FP))
@@ -66,3 +66,18 @@ MULTILIB_MATCHES += march?armv7e-m+fp=march?armv7e-m+fpv5
MULTILIB_REUSE += $(foreach ARCH, armv6s-m armv7-m armv7e-m armv8-m\.base armv8-m\.main, \
mthumb/march.$(ARCH)/mfloat-abi.soft=mthumb/march.$(ARCH)/mfloat-abi.softfp)
+# Map v8.1-M to v8-M.
+MULTILIB_MATCHES += march?armv8-m.main=march?armv8.1-m.main
+MULTILIB_MATCHES += march?armv8-m.main=march?armv8.1-m.main+dsp
+MULTILIB_MATCHES += march?armv8-m.main=march?armv8.1-m.main+mve
+
+v8_1m_sp_variants = +fp +dsp+fp +mve.fp
+v8_1m_dp_variants = +fp.dp +dsp+fp.dp +fp.dp+mve +fp.dp+mve.fp
+
+# Map all v8.1-m.main FP sp variants down to v8-m.
+MULTILIB_MATCHES += $(foreach FP, $(v8_1m_sp_variants), \
+ march?armv8-m.main+fp=march?armv8.1-m.main$(FP))
+
+# Map all v8.1-m.main FP dp variants down to v8-m.
+MULTILIB_MATCHES += $(foreach FP, $(v8_1m_dp_variants), \
+ march?armv8-m.main+fp.dp=march?armv8.1-m.main$(FP))
diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp b/gcc/testsuite/gcc.target/arm/multilib.exp
index dcea829965eb15e372401e6389df5a1403393ecb..63cca118da2578253740fcd95421eae9ddf219bd 100644
--- a/gcc/testsuite/gcc.target/arm/multilib.exp
+++ b/gcc/testsuite/gcc.target/arm/multilib.exp
@@ -775,6 +775,27 @@ if {[multilib_config "rmprofile"] } {
{-march=armv8-r+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard"
{-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp"
{-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard"
+ {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
+ {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
+ {-march=armv8.1-m.main+dsp+fp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
+ {-march=armv8.1-m.main+dsp+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
+ {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
+ {-march=armv8.1-m.main+mve.fp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
+ {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
+ {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
+ {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
+ {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
+ {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
} {
check_multi_dir $opts $dir
}
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-01-18 8:54 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <4751ac8f-c9d4-454f-b036-e31e5e456042@DB5EUR03FT064.eop-EUR03.prod.protection.outlook.com>
2019-12-18 14:16 ` [PATCH][GCC][arm] Add CLI and multilib support for Armv8.1-M Mainline MVE extensions Kyrill Tkachov
2019-12-18 17:03 ` Mihail Ionescu
2019-12-18 17:05 ` Kyrill Tkachov
2020-01-17 9:16 ` Jakub Jelinek
2020-01-17 11:25 ` Mihail Ionescu
2020-01-17 20:13 ` Jakub Jelinek
2020-01-18 11:12 ` Jakub Jelinek
2019-11-08 17:07 Mihail Ionescu
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).