[2/2] config/arm: add support for fallback march
Checks
Commit Message
From: Pavan Nikhilesh <pbhagavatula@marvell.com>
Some ARM CPUs have specific march requirements and
are not compatible with the supported march list.
Add fallback march in case the mcpu and the march
advertised in the part_number_config are not supported
by the compiler.
Example
mcpu = neoverse-n2
march = armv9-a
fallback_march = armv8.5-a
mcpu, march not supported
machine_args = ['-march=armv8.5-a']
mcpu, march, fallback_march not supported
least march supported = armv8-a
machine_args = ['-march=armv8-a']
Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
config/arm/meson.build | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
--
2.25.1
Comments
+Cc
On 2024/1/21 5:36 PM, pbhagavatula@marvell.com wrote:
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> Some ARM CPUs have specific march requirements and
> are not compatible with the supported march list.
> Add fallback march in case the mcpu and the march
> advertised in the part_number_config are not supported
> by the compiler.
>
> Example
> mcpu = neoverse-n2
> march = armv9-a
> fallback_march = armv8.5-a
>
> mcpu, march not supported
> machine_args = ['-march=armv8.5-a']
>
> mcpu, march, fallback_march not supported
> least march supported = armv8-a
>
> machine_args = ['-march=armv8-a']
>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
> config/arm/meson.build | 15 +++++++++++++--
> 1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/config/arm/meson.build b/config/arm/meson.build
> index 8c8cfccca0..2aaf78a81a 100644
> --- a/config/arm/meson.build
> +++ b/config/arm/meson.build
> @@ -94,6 +94,7 @@ part_number_config_arm = {
> '0xd49': {
> 'march': 'armv9-a',
> 'march_features': ['sve2'],
> + 'fallback_march': 'armv8.5-a',
> 'mcpu': 'neoverse-n2',
> 'flags': [
> ['RTE_MACHINE', '"neoverse-n2"'],
> @@ -709,14 +710,14 @@ if update_flags
>
> # probe supported archs and their features
> candidate_march = ''
> + supported_marchs = ['armv9-a', 'armv8.6-a', 'armv8.5-a', 'armv8.4-a',
> + 'armv8.3-a', 'armv8.2-a', 'armv8.1-a', 'armv8-a']
> if part_number_config.has_key('march')
> if part_number_config.get('force_march', false) or support_mcpu
> if cc.has_argument('-march=' + part_number_config['march'])
> candidate_march = part_number_config['march']
> endif
> else
> - supported_marchs = ['armv8.6-a', 'armv8.5-a', 'armv8.4-a', 'armv8.3-a',
> - 'armv8.2-a', 'armv8.1-a', 'armv8-a']
> check_compiler_support = false
> foreach supported_march: supported_marchs
> if supported_march == part_number_config['march']
> @@ -733,6 +734,16 @@ if update_flags
> endif
>
> if candidate_march != part_number_config['march']
> + if part_number_config.has_key('fallback_march') and not support_mcpu
> + fallback_march = part_number_config['fallback_march']
> + foreach supported_march: supported_marchs
> + if (supported_march == fallback_march
> + and cc.has_argument('-march=' + supported_march))
> + candidate_march = supported_march
> + break
> + endif
> + endforeach
> + endif
> warning('Configuration march version is @0@, not supported.'
> .format(part_number_config['march']))
> if candidate_march != ''
> --
> 2.25.1
>
On Sun, Jan 21, 2024 at 10:37 AM <pbhagavatula@marvell.com> wrote:
>
> From: Pavan Nikhilesh <pbhagavatula@marvell.com>
>
> Some ARM CPUs have specific march requirements and
> are not compatible with the supported march list.
> Add fallback march in case the mcpu and the march
> advertised in the part_number_config are not supported
> by the compiler.
>
It's not clear to me what this patch adds. We already have a fallback
mechanism and this basically does the same thing, but there's some
extra logic that's not clear to me. Looks like there are some extra
conditions around mcpu. In that case, all of the mcpu/march processing
should be done first and then we should do a common fallback.
> Example
> mcpu = neoverse-n2
> march = armv9-a
> fallback_march = armv8.5-a
>
> mcpu, march not supported
> machine_args = ['-march=armv8.5-a']
>
> mcpu, march, fallback_march not supported
> least march supported = armv8-a
>
> machine_args = ['-march=armv8-a']
>
> Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> ---
> config/arm/meson.build | 15 +++++++++++++--
> 1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/config/arm/meson.build b/config/arm/meson.build
> index 8c8cfccca0..2aaf78a81a 100644
> --- a/config/arm/meson.build
> +++ b/config/arm/meson.build
> @@ -94,6 +94,7 @@ part_number_config_arm = {
> '0xd49': {
> 'march': 'armv9-a',
> 'march_features': ['sve2'],
> + 'fallback_march': 'armv8.5-a',
> 'mcpu': 'neoverse-n2',
> 'flags': [
> ['RTE_MACHINE', '"neoverse-n2"'],
> @@ -709,14 +710,14 @@ if update_flags
>
> # probe supported archs and their features
> candidate_march = ''
> + supported_marchs = ['armv9-a', 'armv8.6-a', 'armv8.5-a', 'armv8.4-a',
> + 'armv8.3-a', 'armv8.2-a', 'armv8.1-a', 'armv8-a']
> if part_number_config.has_key('march')
> if part_number_config.get('force_march', false) or support_mcpu
> if cc.has_argument('-march=' + part_number_config['march'])
> candidate_march = part_number_config['march']
> endif
> else
> - supported_marchs = ['armv8.6-a', 'armv8.5-a', 'armv8.4-a', 'armv8.3-a',
> - 'armv8.2-a', 'armv8.1-a', 'armv8-a']
> check_compiler_support = false
> foreach supported_march: supported_marchs
> if supported_march == part_number_config['march']
> @@ -733,6 +734,16 @@ if update_flags
> endif
>
> if candidate_march != part_number_config['march']
> + if part_number_config.has_key('fallback_march') and not support_mcpu
> + fallback_march = part_number_config['fallback_march']
> + foreach supported_march: supported_marchs
> + if (supported_march == fallback_march
> + and cc.has_argument('-march=' + supported_march))
> + candidate_march = supported_march
> + break
> + endif
> + endforeach
> + endif
> warning('Configuration march version is @0@, not supported.'
> .format(part_number_config['march']))
> if candidate_march != ''
> --
> 2.25.1
>
> On Sun, Jan 21, 2024 at 10:37 AM <pbhagavatula@marvell.com> wrote:
> >
> > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> >
> > Some ARM CPUs have specific march requirements and
> > are not compatible with the supported march list.
> > Add fallback march in case the mcpu and the march
> > advertised in the part_number_config are not supported
> > by the compiler.
> >
>
> It's not clear to me what this patch adds. We already have a fallback
> mechanism and this basically does the same thing, but there's some
> extra logic that's not clear to me. Looks like there are some extra
> conditions around mcpu. In that case, all of the mcpu/march processing
> should be done first and then we should do a common fallback.
>
The current fallback does a simple reverse compatibility check with the compiler
when force march is not enabled.
But this is not true for neoverse-n2 case, as it is based on armv9-a which is a super set of
armv8.5-a and other features[1]
In the current fallback path if both march neoverse-n2 and mcpu armv9-a are not supported
then it would fallback to armv8.6-a but this not correct as neoverse-n2 is not based on armv8.5-a
The fallback march armv8.5-a kicks in (if supported) when neoverse-n2 and armv9-a are not supported.
[1] https://github.com/gcc-mirror/gcc/blob/615e25c82de97acc17ab438f88d6788cf7ffe1d6/gcc/config/arm/arm-cpus.in#L306
> > Example
> > mcpu = neoverse-n2
> > march = armv9-a
> > fallback_march = armv8.5-a
> >
> > mcpu, march not supported
> > machine_args = ['-march=armv8.5-a']
> >
> > mcpu, march, fallback_march not supported
> > least march supported = armv8-a
> >
> > machine_args = ['-march=armv8-a']
> >
> > Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > ---
> > config/arm/meson.build | 15 +++++++++++++--
> > 1 file changed, 13 insertions(+), 2 deletions(-)
> >
> > diff --git a/config/arm/meson.build b/config/arm/meson.build
> > index 8c8cfccca0..2aaf78a81a 100644
> > --- a/config/arm/meson.build
> > +++ b/config/arm/meson.build
> > @@ -94,6 +94,7 @@ part_number_config_arm = {
> > '0xd49': {
> > 'march': 'armv9-a',
> > 'march_features': ['sve2'],
> > + 'fallback_march': 'armv8.5-a',
> > 'mcpu': 'neoverse-n2',
> > 'flags': [
> > ['RTE_MACHINE', '"neoverse-n2"'],
> > @@ -709,14 +710,14 @@ if update_flags
> >
> > # probe supported archs and their features
> > candidate_march = ''
> > + supported_marchs = ['armv9-a', 'armv8.6-a', 'armv8.5-a', 'armv8.4-a',
> > + 'armv8.3-a', 'armv8.2-a', 'armv8.1-a', 'armv8-a']
> > if part_number_config.has_key('march')
> > if part_number_config.get('force_march', false) or support_mcpu
> > if cc.has_argument('-march=' + part_number_config['march'])
> > candidate_march = part_number_config['march']
> > endif
> > else
> > - supported_marchs = ['armv8.6-a', 'armv8.5-a', 'armv8.4-a', 'armv8.3-
> a',
> > - 'armv8.2-a', 'armv8.1-a', 'armv8-a']
> > check_compiler_support = false
> > foreach supported_march: supported_marchs
> > if supported_march == part_number_config['march']
> > @@ -733,6 +734,16 @@ if update_flags
> > endif
> >
> > if candidate_march != part_number_config['march']
> > + if part_number_config.has_key('fallback_march') and not
> support_mcpu
> > + fallback_march = part_number_config['fallback_march']
> > + foreach supported_march: supported_marchs
> > + if (supported_march == fallback_march
> > + and cc.has_argument('-march=' + supported_march))
> > + candidate_march = supported_march
> > + break
> > + endif
> > + endforeach
> > + endif
> > warning('Configuration march version is @0@, not supported.'
> > .format(part_number_config['march']))
> > if candidate_march != ''
> > --
> > 2.25.1
> >
On Mon, Jan 22, 2024 at 1:16 PM Pavan Nikhilesh Bhagavatula
<pbhagavatula@marvell.com> wrote:
>
> > On Sun, Jan 21, 2024 at 10:37 AM <pbhagavatula@marvell.com> wrote:
> > >
> > > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > >
> > > Some ARM CPUs have specific march requirements and
> > > are not compatible with the supported march list.
> > > Add fallback march in case the mcpu and the march
> > > advertised in the part_number_config are not supported
> > > by the compiler.
> > >
> >
> > It's not clear to me what this patch adds. We already have a fallback
> > mechanism and this basically does the same thing, but there's some
> > extra logic that's not clear to me. Looks like there are some extra
> > conditions around mcpu. In that case, all of the mcpu/march processing
> > should be done first and then we should do a common fallback.
> >
>
> The current fallback does a simple reverse compatibility check with the compiler
> when force march is not enabled.
> But this is not true for neoverse-n2 case, as it is based on armv9-a which is a super set of
> armv8.5-a and other features[1]
> In the current fallback path if both march neoverse-n2 and mcpu armv9-a are not supported
> then it would fallback to armv8.6-a but this not correct as neoverse-n2 is not based on armv8.5-a
>
> The fallback march armv8.5-a kicks in (if supported) when neoverse-n2 and armv9-a are not supported.
>
Can the two fallback mechanisms be combined? They seem very similar.
>
> [1] https://github.com/gcc-mirror/gcc/blob/615e25c82de97acc17ab438f88d6788cf7ffe1d6/gcc/config/arm/arm-cpus.in#L306
>
>
> > > Example
> > > mcpu = neoverse-n2
> > > march = armv9-a
> > > fallback_march = armv8.5-a
> > >
> > > mcpu, march not supported
> > > machine_args = ['-march=armv8.5-a']
> > >
> > > mcpu, march, fallback_march not supported
> > > least march supported = armv8-a
> > >
> > > machine_args = ['-march=armv8-a']
> > >
> > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > > ---
> > > config/arm/meson.build | 15 +++++++++++++--
> > > 1 file changed, 13 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/config/arm/meson.build b/config/arm/meson.build
> > > index 8c8cfccca0..2aaf78a81a 100644
> > > --- a/config/arm/meson.build
> > > +++ b/config/arm/meson.build
> > > @@ -94,6 +94,7 @@ part_number_config_arm = {
> > > '0xd49': {
> > > 'march': 'armv9-a',
> > > 'march_features': ['sve2'],
> > > + 'fallback_march': 'armv8.5-a',
> > > 'mcpu': 'neoverse-n2',
> > > 'flags': [
> > > ['RTE_MACHINE', '"neoverse-n2"'],
> > > @@ -709,14 +710,14 @@ if update_flags
> > >
> > > # probe supported archs and their features
> > > candidate_march = ''
> > > + supported_marchs = ['armv9-a', 'armv8.6-a', 'armv8.5-a', 'armv8.4-a',
> > > + 'armv8.3-a', 'armv8.2-a', 'armv8.1-a', 'armv8-a']
> > > if part_number_config.has_key('march')
> > > if part_number_config.get('force_march', false) or support_mcpu
> > > if cc.has_argument('-march=' + part_number_config['march'])
> > > candidate_march = part_number_config['march']
> > > endif
> > > else
> > > - supported_marchs = ['armv8.6-a', 'armv8.5-a', 'armv8.4-a', 'armv8.3-
> > a',
> > > - 'armv8.2-a', 'armv8.1-a', 'armv8-a']
> > > check_compiler_support = false
> > > foreach supported_march: supported_marchs
> > > if supported_march == part_number_config['march']
> > > @@ -733,6 +734,16 @@ if update_flags
> > > endif
> > >
> > > if candidate_march != part_number_config['march']
> > > + if part_number_config.has_key('fallback_march') and not
> > support_mcpu
> > > + fallback_march = part_number_config['fallback_march']
> > > + foreach supported_march: supported_marchs
> > > + if (supported_march == fallback_march
> > > + and cc.has_argument('-march=' + supported_march))
> > > + candidate_march = supported_march
> > > + break
> > > + endif
> > > + endforeach
> > > + endif
> > > warning('Configuration march version is @0@, not supported.'
> > > .format(part_number_config['march']))
> > > if candidate_march != ''
> > > --
> > > 2.25.1
> > >
> -----Original Message-----
> From: Juraj Linkeš <juraj.linkes@pantheon.tech>
> Sent: Monday, January 22, 2024 9:59 PM
> To: Pavan Nikhilesh Bhagavatula <pbhagavatula@marvell.com>
> Cc: Jerin Jacob <jerinj@marvell.com>; Ruifeng.Wang@arm.com;
> nd@arm.com; Bruce Richardson <bruce.richardson@intel.com>;
> dev@dpdk.org
> Subject: Re: [EXT] Re: [PATCH 2/2] config/arm: add support for fallback march
>
> On Mon, Jan 22, 2024 at 1:16 PM Pavan Nikhilesh Bhagavatula
> <pbhagavatula@marvell.com> wrote:
> >
> > > On Sun, Jan 21, 2024 at 10:37 AM <pbhagavatula@marvell.com> wrote:
> > > >
> > > > From: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > > >
> > > > Some ARM CPUs have specific march requirements and
> > > > are not compatible with the supported march list.
> > > > Add fallback march in case the mcpu and the march
> > > > advertised in the part_number_config are not supported
> > > > by the compiler.
> > > >
> > >
> > > It's not clear to me what this patch adds. We already have a fallback
> > > mechanism and this basically does the same thing, but there's some
> > > extra logic that's not clear to me. Looks like there are some extra
> > > conditions around mcpu. In that case, all of the mcpu/march processing
> > > should be done first and then we should do a common fallback.
> > >
> >
> > The current fallback does a simple reverse compatibility check with the
> compiler
> > when force march is not enabled.
> > But this is not true for neoverse-n2 case, as it is based on armv9-a which is a
> super set of
> > armv8.5-a and other features[1]
> > In the current fallback path if both march neoverse-n2 and mcpu armv9-a
> are not supported
> > then it would fallback to armv8.6-a but this not correct as neoverse-n2 is
> not based on armv8.5-a
> >
> > The fallback march armv8.5-a kicks in (if supported) when neoverse-n2 and
> armv9-a are not supported.
> >
>
> Can the two fallback mechanisms be combined? They seem very similar.
I will try to combine them in the next version.
Thanks,
Pavan.
>
> >
> > [1] https://urldefense.proofpoint.com/v2/url?u=https-
> 3A__github.com_gcc-
> 2Dmirror_gcc_blob_615e25c82de97acc17ab438f88d6788cf7ffe1d6_gcc_confi
> g_arm_arm-2Dcpus.in-
> 23L306&d=DwIFaQ&c=nKjWec2b6R0mOyPaz7xtfQ&r=E3SgYMjtKCMVsB-
> fmvgGV3o-g_fjLhk5Pupi9ijohpc&m=-
> Xknjo5NapybFKTREn10YXl4HKVFwvwF7ZNL_2ks7_DxKC9Xynna3Ms2DLynVO
> Fh&s=o_Pt0fUjpeoar7QSgqshIXDxOZVUSNQYcCtRJWhNS8I&e=
> >
> >
> > > > Example
> > > > mcpu = neoverse-n2
> > > > march = armv9-a
> > > > fallback_march = armv8.5-a
> > > >
> > > > mcpu, march not supported
> > > > machine_args = ['-march=armv8.5-a']
> > > >
> > > > mcpu, march, fallback_march not supported
> > > > least march supported = armv8-a
> > > >
> > > > machine_args = ['-march=armv8-a']
> > > >
> > > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
> > > > ---
> > > > config/arm/meson.build | 15 +++++++++++++--
> > > > 1 file changed, 13 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/config/arm/meson.build b/config/arm/meson.build
> > > > index 8c8cfccca0..2aaf78a81a 100644
> > > > --- a/config/arm/meson.build
> > > > +++ b/config/arm/meson.build
> > > > @@ -94,6 +94,7 @@ part_number_config_arm = {
> > > > '0xd49': {
> > > > 'march': 'armv9-a',
> > > > 'march_features': ['sve2'],
> > > > + 'fallback_march': 'armv8.5-a',
> > > > 'mcpu': 'neoverse-n2',
> > > > 'flags': [
> > > > ['RTE_MACHINE', '"neoverse-n2"'],
> > > > @@ -709,14 +710,14 @@ if update_flags
> > > >
> > > > # probe supported archs and their features
> > > > candidate_march = ''
> > > > + supported_marchs = ['armv9-a', 'armv8.6-a', 'armv8.5-a', 'armv8.4-a',
> > > > + 'armv8.3-a', 'armv8.2-a', 'armv8.1-a', 'armv8-a']
> > > > if part_number_config.has_key('march')
> > > > if part_number_config.get('force_march', false) or support_mcpu
> > > > if cc.has_argument('-march=' + part_number_config['march'])
> > > > candidate_march = part_number_config['march']
> > > > endif
> > > > else
> > > > - supported_marchs = ['armv8.6-a', 'armv8.5-a', 'armv8.4-a',
> 'armv8.3-
> > > a',
> > > > - 'armv8.2-a', 'armv8.1-a', 'armv8-a']
> > > > check_compiler_support = false
> > > > foreach supported_march: supported_marchs
> > > > if supported_march == part_number_config['march']
> > > > @@ -733,6 +734,16 @@ if update_flags
> > > > endif
> > > >
> > > > if candidate_march != part_number_config['march']
> > > > + if part_number_config.has_key('fallback_march') and not
> > > support_mcpu
> > > > + fallback_march = part_number_config['fallback_march']
> > > > + foreach supported_march: supported_marchs
> > > > + if (supported_march == fallback_march
> > > > + and cc.has_argument('-march=' + supported_march))
> > > > + candidate_march = supported_march
> > > > + break
> > > > + endif
> > > > + endforeach
> > > > + endif
> > > > warning('Configuration march version is @0@, not supported.'
> > > > .format(part_number_config['march']))
> > > > if candidate_march != ''
> > > > --
> > > > 2.25.1
> > > >
@@ -94,6 +94,7 @@ part_number_config_arm = {
'0xd49': {
'march': 'armv9-a',
'march_features': ['sve2'],
+ 'fallback_march': 'armv8.5-a',
'mcpu': 'neoverse-n2',
'flags': [
['RTE_MACHINE', '"neoverse-n2"'],
@@ -709,14 +710,14 @@ if update_flags
# probe supported archs and their features
candidate_march = ''
+ supported_marchs = ['armv9-a', 'armv8.6-a', 'armv8.5-a', 'armv8.4-a',
+ 'armv8.3-a', 'armv8.2-a', 'armv8.1-a', 'armv8-a']
if part_number_config.has_key('march')
if part_number_config.get('force_march', false) or support_mcpu
if cc.has_argument('-march=' + part_number_config['march'])
candidate_march = part_number_config['march']
endif
else
- supported_marchs = ['armv8.6-a', 'armv8.5-a', 'armv8.4-a', 'armv8.3-a',
- 'armv8.2-a', 'armv8.1-a', 'armv8-a']
check_compiler_support = false
foreach supported_march: supported_marchs
if supported_march == part_number_config['march']
@@ -733,6 +734,16 @@ if update_flags
endif
if candidate_march != part_number_config['march']
+ if part_number_config.has_key('fallback_march') and not support_mcpu
+ fallback_march = part_number_config['fallback_march']
+ foreach supported_march: supported_marchs
+ if (supported_march == fallback_march
+ and cc.has_argument('-march=' + supported_march))
+ candidate_march = supported_march
+ break
+ endif
+ endforeach
+ endif
warning('Configuration march version is @0@, not supported.'
.format(part_number_config['march']))
if candidate_march != ''