[PATCH 3/5] lib/mpi: Fix for building for MIPS32 with Clang
From: Nathan Chancellor
Date: Sun Aug 11 2019 - 23:31:53 EST
From: Vladimir Serbinenko <phcoder@xxxxxxxxx>
clang doesn't recognise =l / =h assembly operand specifiers but apparently
handles C version well.
lib/mpi/generic_mpih-mul1.c:37:24: error: invalid use of a cast in a
inline asm context requiring an l-value: remove the cast or build with
-fheinous-gnu-extensions
umul_ppmm(prod_high, prod_low, s1_ptr[j], s2_limb);
~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lib/mpi/longlong.h:652:20: note: expanded from macro 'umul_ppmm'
: "=l" ((USItype)(w0)), \
~~~~~~~~~~^~~
lib/mpi/generic_mpih-mul1.c:37:3: error: invalid output constraint '=h'
in asm
umul_ppmm(prod_high, prod_low, s1_ptr[j], s2_limb);
^
lib/mpi/longlong.h:653:7: note: expanded from macro 'umul_ppmm'
"=h" ((USItype)(w1)) \
^
2 errors generated.
Fixes: 5ce3e312ec5c ("crypto: GnuPG based MPI lib - header files (part 2)")
Link: https://github.com/ClangBuiltLinux/linux/issues/605
Link: https://github.com/gpg/libgcrypt/commit/1ecbd0bca31d462719a2a6590c1d03244e76ef89
Signed-off-by: Vladimir Serbinenko <phcoder@xxxxxxxxx>
[jk: add changelog, rebase on libgcrypt repository, reformat changed
line so it does not go over 80 characters]
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@xxxxxx>
[nc: Added build error and tags to commit message
Added Vladimir's signoff with his permission
Adjusted Jussi's comment to wrap at 73 characters
Modified commit subject to mirror MIPS64 commit
Removed space between defined and (__clang__)]
Signed-off-by: Nathan Chancellor <natechancellor@xxxxxxxxx>
---
lib/mpi/longlong.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h
index 3bb6260d8f42..8a1507fc94dd 100644
--- a/lib/mpi/longlong.h
+++ b/lib/mpi/longlong.h
@@ -639,7 +639,8 @@ do { \
************** MIPS *****************
***************************************/
#if defined(__mips__) && W_TYPE_SIZE == 32
-#if (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4)
+#if defined(__clang__) || (__GNUC__ >= 5) || (__GNUC__ == 4 && \
+ __GNUC_MINOR__ >= 4)
#define umul_ppmm(w1, w0, u, v) \
do { \
UDItype __ll = (UDItype)(u) * (v); \
--
2.23.0.rc2