[dpdk-dev] [EXT] Re: [PATCH] config/arm: add ability to express arch extensions

Honnappa Nagarahalli Honnappa.Nagarahalli at arm.com
Mon May 10 19:20:54 CEST 2021


<snip>
> 
> >05/05/2021 14:14, pbhagavatula at marvell.com:
> >> From: Pavan Nikhilesh <pbhagavatula at marvell.com>
> >>
> >> The ARM architecture allows SoCs to have extensions in addition to
> >> base profiles such as Large System Extension (LSE), CRC etc.
> >>
> >> Add ability to declare SoC specific extensions.
> >>
> >> Signed-off-by: Pavan Nikhilesh <pbhagavatula at marvell.com>
> >
> >I don't know what it is fixing. It is an optimization?
> >Is it candidate for next release?
> 
> Its more of an enhancement, the default n2 march flag doesn't describe
> anything about the extensions that a specific SoC has.
> In case of OCTEON 10 SoC it has support for LSE and CRC in additional to the
> basic n2 profile.
> This patch allows SoC to add extensions to the -march flag.
> Default n2 march :    -march=armv8.5-a+crypto+sve2
> OCTEON 10 march :  -march=armv8.5-a+crypto+sve2+lse+crc
> 
> Including extensions in march helps compiler generate better code.
> Example adding '+lse' tells the compiler to inline C11 atomics rather than
> having a run time jump
> 
> https://gcc.godbolt.org/z/8hPv87dbr
Can you compile the code with armv8.5-a instead of armv8-a? I see that LSE instructions are used.
https://gcc.godbolt.org/z/18MYhY7xv

> 
> I don't think this is limited to OCTEON 10 other SoC should also add their
> extensions to march.
> 
> >
> >> ---
> >>
> >>  More details about ARM extensions
> >>  https://urldefense.proofpoint.com/v2/url?u=https-
> >3A__developer.arm.com_documentation_102378_0200&d=DwICAg&c
> >=nKjWec2b6R0mOyPaz7xtfQ&r=1cjuAHrGh745jHNmj2fD85sUMIJ2IPIDs
> >IJzo6FN6Z0&m=yCt4te5_7VJvaJT5OXrOpFXH3UBOUqRDlHZuSVEUZHM
> >&s=DquFBMwxMpjxWcM2Qw1c2t_ak-j6DN4rz8ce_I43RJk&e=
> >>
> >>  config/arm/meson.build | 8 ++++++++
> >>  1 file changed, 8 insertions(+)
> >>
> >> diff --git a/config/arm/meson.build b/config/arm/meson.build index
> >> 22cd81319..8aa961e5b 100644
> >> --- a/config/arm/meson.build
> >> +++ b/config/arm/meson.build
> >> @@ -230,6 +230,7 @@ soc_cn10k = {
> >>          ['RTE_MAX_LCORE', 24],
> >>          ['RTE_MAX_NUMA_NODES', 1]
> >>      ],
> >> +    'extensions' : ['lse', 'crc'],
> >>      'part_number': '0xd49',
> >>      'numa': false
> >>  }
> >> @@ -387,6 +388,7 @@ else
> >>      endif
> >>
> >>      soc_flags = []
> >> +    soc_extensions = []
> >>      if soc_config.has_key('not_supported')
> >>          error('SoC @0@ not supported.'.format(soc))
> >>      elif soc_config != {}
> >> @@ -394,6 +396,7 @@ else
> >>          implementer_config = implementers[implementer_id]
> >>          part_number = soc_config['part_number']
> >>          soc_flags = soc_config.get('flags', [])
> >> +        soc_extensions = soc_config.get('extensions', [])
> >>          if not soc_config.get('numa', true)
> >>              has_libnuma = 0
> >>          endif
> >> @@ -431,6 +434,11 @@ else
> >>      # apply supported machine args
> >>      machine_args = [] # Clear previous machine args
> >>      foreach flag: part_number_config['machine_args']
> >> +        if flag.startswith('-march') and soc_extensions.length() !=
> >> + 0
> >
> >Why condition on start with -march?
> 
> There are some implementer flags which don't have -march to add extensions
> to.
> 
> >
> >> +            foreach ex: soc_extensions
> >> +                flag += '+' + ex
> >> +            endforeach
> >> +        endif
> >
> >



More information about the dev mailing list