Dmytro Kovalov via Gnupg-users wrote:
Hello,

I found a strange libgcrypt behavior on ARM with clang built.

There is a big gap in performance of libgcrypt, built by clang, in comparison with gcc on my ARM target machine.
The simple profile test shows 100-500% advantage of gcc gcrypt.
I found an awkward workaround to beat this issue, but need your help to find the best way to fix it.

The root cause is next:
Due to clang strict assembler syntax rules the unified assembler ARM check doesn't pass.
Assembler check fails while ./configure for flags:
HAVE_COMPATIBLE_GCC_ARM_PLATFORM_AS
HAVE_GCC_INLINE_ASM_NEON

As a workaround I remove '%' from registers names in
configure.ac <http://configure.ac/>,
arm mips lib *.S files,
cipher/*arm.S,*armv7-neon.S files.

Could you please help with a more correct - polite way to compile libgcrypt with assembler code?

I would suggest using the GNU toolchain.  :-)

The problem is that the GNU assembler traditionally expects register names to be prefixed with %, using a syntax based on that of the old AT&T assembler and known (simply enough) as "AT&T syntax" while many vendor assemblers use a different syntax. Note that the configure tests in question are for GCC-or-strictly-compatible. If clang does not support the GNU assembler syntax, then it is not fully compatible with GCC, and libgcrypt is being compiled correctly.

Since LLVM claims compatibility with GCC, you should direct your complaints there: CLang apparently claims compatibility with the GNU toolchain, but does not support GNU assembler syntax.


-- Jacob

_______________________________________________
Gnupg-users mailing list
Gnupg-users@gnupg.org
https://lists.gnupg.org/mailman/listinfo/gnupg-users

Reply via email to