<snip> > > >05/05/2021 14:14, pbhagavat...@marvell.com: > >> From: Pavan Nikhilesh <pbhagavat...@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 <pbhagavat...@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 > > > >