Merge pull request #7932 from AgathiyanB/add-mpi-uint-size-macro
Use compile-time determination of which __builtin_clz() to use, with new MBEDTLS_MPI_UINT_SIZE macro
This commit is contained in:
commit
6dd40642e8
2 changed files with 15 additions and 14 deletions
|
@ -129,6 +129,7 @@
|
||||||
#endif /* !MBEDTLS_HAVE_INT64 */
|
#endif /* !MBEDTLS_HAVE_INT64 */
|
||||||
typedef int64_t mbedtls_mpi_sint;
|
typedef int64_t mbedtls_mpi_sint;
|
||||||
typedef uint64_t mbedtls_mpi_uint;
|
typedef uint64_t mbedtls_mpi_uint;
|
||||||
|
#define MBEDTLS_MPI_UINT_MAX UINT64_MAX
|
||||||
#elif defined(__GNUC__) && ( \
|
#elif defined(__GNUC__) && ( \
|
||||||
defined(__amd64__) || defined(__x86_64__) || \
|
defined(__amd64__) || defined(__x86_64__) || \
|
||||||
defined(__ppc64__) || defined(__powerpc64__) || \
|
defined(__ppc64__) || defined(__powerpc64__) || \
|
||||||
|
@ -141,6 +142,7 @@ typedef uint64_t mbedtls_mpi_uint;
|
||||||
#endif /* MBEDTLS_HAVE_INT64 */
|
#endif /* MBEDTLS_HAVE_INT64 */
|
||||||
typedef int64_t mbedtls_mpi_sint;
|
typedef int64_t mbedtls_mpi_sint;
|
||||||
typedef uint64_t mbedtls_mpi_uint;
|
typedef uint64_t mbedtls_mpi_uint;
|
||||||
|
#define MBEDTLS_MPI_UINT_MAX UINT64_MAX
|
||||||
#if !defined(MBEDTLS_NO_UDBL_DIVISION)
|
#if !defined(MBEDTLS_NO_UDBL_DIVISION)
|
||||||
/* mbedtls_t_udbl defined as 128-bit unsigned int */
|
/* mbedtls_t_udbl defined as 128-bit unsigned int */
|
||||||
typedef unsigned int mbedtls_t_udbl __attribute__((mode(TI)));
|
typedef unsigned int mbedtls_t_udbl __attribute__((mode(TI)));
|
||||||
|
@ -156,6 +158,7 @@ typedef unsigned int mbedtls_t_udbl __attribute__((mode(TI)));
|
||||||
#endif /* !MBEDTLS_HAVE_INT64 */
|
#endif /* !MBEDTLS_HAVE_INT64 */
|
||||||
typedef int64_t mbedtls_mpi_sint;
|
typedef int64_t mbedtls_mpi_sint;
|
||||||
typedef uint64_t mbedtls_mpi_uint;
|
typedef uint64_t mbedtls_mpi_uint;
|
||||||
|
#define MBEDTLS_MPI_UINT_MAX UINT64_MAX
|
||||||
#if !defined(MBEDTLS_NO_UDBL_DIVISION)
|
#if !defined(MBEDTLS_NO_UDBL_DIVISION)
|
||||||
/* mbedtls_t_udbl defined as 128-bit unsigned int */
|
/* mbedtls_t_udbl defined as 128-bit unsigned int */
|
||||||
typedef __uint128_t mbedtls_t_udbl;
|
typedef __uint128_t mbedtls_t_udbl;
|
||||||
|
@ -165,6 +168,7 @@ typedef __uint128_t mbedtls_t_udbl;
|
||||||
/* Force 64-bit integers with unknown compiler */
|
/* Force 64-bit integers with unknown compiler */
|
||||||
typedef int64_t mbedtls_mpi_sint;
|
typedef int64_t mbedtls_mpi_sint;
|
||||||
typedef uint64_t mbedtls_mpi_uint;
|
typedef uint64_t mbedtls_mpi_uint;
|
||||||
|
#define MBEDTLS_MPI_UINT_MAX UINT64_MAX
|
||||||
#endif
|
#endif
|
||||||
#endif /* !MBEDTLS_HAVE_INT32 */
|
#endif /* !MBEDTLS_HAVE_INT32 */
|
||||||
|
|
||||||
|
@ -175,6 +179,7 @@ typedef uint64_t mbedtls_mpi_uint;
|
||||||
#endif /* !MBEDTLS_HAVE_INT32 */
|
#endif /* !MBEDTLS_HAVE_INT32 */
|
||||||
typedef int32_t mbedtls_mpi_sint;
|
typedef int32_t mbedtls_mpi_sint;
|
||||||
typedef uint32_t mbedtls_mpi_uint;
|
typedef uint32_t mbedtls_mpi_uint;
|
||||||
|
#define MBEDTLS_MPI_UINT_MAX UINT32_MAX
|
||||||
#if !defined(MBEDTLS_NO_UDBL_DIVISION)
|
#if !defined(MBEDTLS_NO_UDBL_DIVISION)
|
||||||
typedef uint64_t mbedtls_t_udbl;
|
typedef uint64_t mbedtls_t_udbl;
|
||||||
#define MBEDTLS_HAVE_UDBL
|
#define MBEDTLS_HAVE_UDBL
|
||||||
|
|
|
@ -36,22 +36,17 @@
|
||||||
size_t mbedtls_mpi_core_clz(mbedtls_mpi_uint a)
|
size_t mbedtls_mpi_core_clz(mbedtls_mpi_uint a)
|
||||||
{
|
{
|
||||||
#if defined(__has_builtin)
|
#if defined(__has_builtin)
|
||||||
#if __has_builtin(__builtin_clz)
|
#if (MBEDTLS_MPI_UINT_MAX == UINT_MAX) && __has_builtin(__builtin_clz)
|
||||||
if (sizeof(mbedtls_mpi_uint) == sizeof(unsigned int)) {
|
#define core_clz __builtin_clz
|
||||||
return (size_t) __builtin_clz(a);
|
#elif (MBEDTLS_MPI_UINT_MAX == ULONG_MAX) && __has_builtin(__builtin_clzl)
|
||||||
}
|
#define core_clz __builtin_clzl
|
||||||
#endif
|
#elif (MBEDTLS_MPI_UINT_MAX == ULLONG_MAX) && __has_builtin(__builtin_clzll)
|
||||||
#if __has_builtin(__builtin_clzl)
|
#define core_clz __builtin_clzll
|
||||||
if (sizeof(mbedtls_mpi_uint) == sizeof(unsigned long)) {
|
|
||||||
return (size_t) __builtin_clzl(a);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if __has_builtin(__builtin_clzll)
|
|
||||||
if (sizeof(mbedtls_mpi_uint) == sizeof(unsigned long long)) {
|
|
||||||
return (size_t) __builtin_clzll(a);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(core_clz)
|
||||||
|
return (size_t) core_clz(a);
|
||||||
|
#else
|
||||||
size_t j;
|
size_t j;
|
||||||
mbedtls_mpi_uint mask = (mbedtls_mpi_uint) 1 << (biL - 1);
|
mbedtls_mpi_uint mask = (mbedtls_mpi_uint) 1 << (biL - 1);
|
||||||
|
|
||||||
|
@ -64,6 +59,7 @@ size_t mbedtls_mpi_core_clz(mbedtls_mpi_uint a)
|
||||||
}
|
}
|
||||||
|
|
||||||
return j;
|
return j;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t mbedtls_mpi_core_bitlen(const mbedtls_mpi_uint *A, size_t A_limbs)
|
size_t mbedtls_mpi_core_bitlen(const mbedtls_mpi_uint *A, size_t A_limbs)
|
||||||
|
|
Loading…
Reference in a new issue