On Tue, 2 Feb 2021, Michael Weiser wrote:

clang does not, however, support the .arch_extension directive. 3.9.1 complains
about the directive, 11.0.0 seems to silently ignore it:

$ cat t.s
.arch_extension crypto
pmull v2.1q, v2.1d, v1.1d
$ aarch64-unknown-linux-gnu-as -o t.o t.s
$ clang+llvm-3.9.1-aarch64-linux-gnu/bin/clang -c -o t.o t.s
t.s:1:1: error: unknown directive
.arch_extension crypto
^
t.s:2:1: error: instruction requires: crypto
pmull v2.1q, v2.1d, v1.1d
^
$ clang+llvm-11.0.0-aarch64-linux-gnu/bin/clang -c -o t.o t.s
t.s:2:1: error: instruction requires: aes
pmull v2.1q, v2.1d, v1.1d
^

Clang does actually support .arch_extension for aarch64 in general since Clang 8 - but the "crypto" extension seems to be a bit of a special case, as it expands to a number of other features, including aes and sha2, depending on the base architecture level:

https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp#L5361-L5388

This routine is called when enabling extensions in .arch, but not in .arch_extension - which is a bug.

So ".arch_extension aes" would work, but setting the extension via the .arch directive is indeed more compatible.

// Martin


_______________________________________________
nettle-bugs mailing list
[email protected]
http://lists.lysator.liu.se/mailman/listinfo/nettle-bugs

Reply via email to