summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2014-09-24 19:40:36 +0200
committerMarc Glisse <marc.glisse@inria.fr>2014-09-24 19:40:36 +0200
commit06307336ed303da12743e573356d96532df33ec5 (patch)
tree5bc10ec1860e9328670ef847526e1bf46333ebc3
parenta7689c1de373ca4652baeb2977a202ad3999f419 (diff)
downloadgmp-06307336ed303da12743e573356d96532df33ec5.tar.gz
On arm64, use __builtin_c[lt]zl, fix typo in umul_ppmm.
-rw-r--r--ChangeLog6
-rw-r--r--longlong.h8
2 files changed, 9 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index ec4c21b77..4350060e0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-09-24 Marc Glisse <marc.glisse@inria.fr>
+
+ * longlong.h (arm64 count_trailing_zeros, count_leading_zeros): Use
+ gcc's builtins.
+ (arm64 umul_ppmm): Use macro arguments only once.
+
2014-09-22 Marc Glisse <marc.glisse@inria.fr>
* mpn/arm64/lshift.asm: Avoid negative immediates.
diff --git a/longlong.h b/longlong.h
index 4f3adbb90..d7667cec1 100644
--- a/longlong.h
+++ b/longlong.h
@@ -556,13 +556,11 @@ extern UWtype __MPN(udiv_qrnnd) (UWtype *, UWtype, UWtype, UWtype);
#define umul_ppmm(ph, pl, m0, m1) \
do { \
UDItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("umulh\t%0, %1, %2" : "=r" (ph) : "r" (m0), "r" (m1)); \
+ __asm__ ("umulh\t%0, %1, %2" : "=r" (ph) : "r" (__m0), "r" (__m1)); \
(pl) = __m0 * __m1; \
} while (0)
-#define count_leading_zeros(count, x) \
- __asm__ ("clz\t%0, %1" : "=r" (count) : "r" (x))
-#define count_trailing_zeros(count, x) \
- __asm__ ("rbit\t%0, %1\n\tclz\t%0, %0" : "=r" (count) : "r" (x))
+#define count_leading_zeros(count, x) count_leading_zeros_gcc_clz(count, x)
+#define count_trailing_zeros(count, x) count_trailing_zeros_gcc_ctz(count, x)
#define COUNT_LEADING_ZEROS_0 64
#endif /* __aarch64__ */