[PATCH -next v16 19/20] riscv: detect assembler support for .option arch
Nathan Chancellor
nathan at kernel.org
Fri Mar 24 07:59:34 PDT 2023
On Thu, Mar 23, 2023 at 03:26:14PM +0000, Conor Dooley wrote:
> On Thu, Mar 23, 2023 at 02:59:23PM +0000, Andy Chiu wrote:
> > Some extensions use .option arch directive to selectively enable certain
> > extensions in parts of its assembly code. For example, Zbb uses it to
> > inform assmebler to emit bit manipulation instructions. However,
> > supporting of this directive only exist on GNU assembler and has not
> > landed on clang at the moment, making TOOLCHAIN_HAS_ZBB depend on
> > AS_IS_GNU.
> >
> > While it is still under review at https://reviews.llvm.org/D123515, the
> > upcoming Vector patch also requires this feature in assembler. Thus,
> > provide Kconfig AS_HAS_OPTION_ARCH to detect such feature. Then
> > TOOLCHAIN_HAS_XXX will be turned on automatically when the feature land.
> >
> > Suggested-by: Nathan Chancellor <nathan at kernel.org>
> > Signed-off-by: Andy Chiu <andy.chiu at sifive.com>
> > ---
> > arch/riscv/Kconfig | 8 +++++++-
> > 1 file changed, 7 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> > index 36a5b6fed0d3..4f8fd4002f1d 100644
> > --- a/arch/riscv/Kconfig
> > +++ b/arch/riscv/Kconfig
> > @@ -244,6 +244,12 @@ config RISCV_DMA_NONCOHERENT
> > config AS_HAS_INSN
> > def_bool $(as-instr,.insn r 51$(comma) 0$(comma) 0$(comma) t0$(comma) t0$(comma) zero)
> >
> > +config AS_HAS_OPTION_ARCH
> > + # https://reviews.llvm.org/D123515
> > + def_bool y
> > + depends on $(as-instr, .option arch$(comma) +m)
> > + depends on !$(as-instr, .option arch$(comma) -i)
>
> Oh cool, I didn't expect this to work given what Nathan said in his
> mail, but I gave it a whirl and it does seem to.
The second line is the clever part of this option that I had not
considered, as it checks for something that should error in addition to
something that shouldn't::
$ echo '.option arch, -i' | riscv64-linux-gcc -c -o /dev/null -x assembler -
{standard input}: Assembler messages:
{standard input}:1: Error: cannot + or - base extension `i' in .option arch `-i'
Looking at D123515, I see this same option test is present and appears
to error in the same manner so this should work when that change is
merged.
Reviewed-by: Nathan Chancellor <nathan at kernel.org>
> I suppose:
> Reviewed-by: Conor Dooley <conor.dooley at microchip.com>
>
> I'd rather it be this way so that it is "hands off", as opposed to the
> version check that would need updating in the future. And I guess it
> means that support for V & IAS will automatically turn on for stable
> kernels too once the LLVM change lands, which is nice ;)
Very much agreed!
> Thanks Andy!
>
> > +
> > source "arch/riscv/Kconfig.socs"
> > source "arch/riscv/Kconfig.errata"
> >
> > @@ -442,7 +448,7 @@ config TOOLCHAIN_HAS_ZBB
> > depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64ima_zbb)
> > depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zbb)
> > depends on LLD_VERSION >= 150000 || LD_VERSION >= 23900
> > - depends on AS_IS_GNU
> > + depends on AS_HAS_OPTION_ARCH
> >
> > config RISCV_ISA_ZBB
> > bool "Zbb extension support for bit manipulation instructions"
> > --
> > 2.17.1
> >
> >
More information about the linux-riscv
mailing list