diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2014-09-24 19:40:36 +0200 |
---|---|---|
committer | Marc Glisse <marc.glisse@inria.fr> | 2014-09-24 19:40:36 +0200 |
commit | 06307336ed303da12743e573356d96532df33ec5 (patch) | |
tree | 5bc10ec1860e9328670ef847526e1bf46333ebc3 | |
parent | a7689c1de373ca4652baeb2977a202ad3999f419 (diff) | |
download | gmp-06307336ed303da12743e573356d96532df33ec5.tar.gz |
On arm64, use __builtin_c[lt]zl, fix typo in umul_ppmm.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | longlong.h | 8 |
2 files changed, 9 insertions, 5 deletions
@@ -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__ */ |