-// intDsize should be 8 or 16 or 32 or 64.
- #if (defined(HAVE_FAST_LONGLONG) && (defined(__alpha__) || defined(__ia64__)))
- #define intDsize 64
- #define intDDsize 128 // = 2*intDsize
- #define log2_intDsize 6 // = log2(intDsize)
- #else
- #define intDsize 32
- #define intDDsize 64 // = 2*intDsize
- #define log2_intDsize 5 // = log2(intDsize)
- #endif
- #if (intDsize==8)
- typedef sint8 sintD;
- typedef uint8 uintD;
- #endif
- #if (intDsize==16)
- typedef sint16 sintD;
- typedef uint16 uintD;
- #endif
- #if (intDsize==32)
- typedef sint32 sintD;
- typedef uint32 uintD;
+// intDsize should be 8 or 16 or 32 or 64 and it should match mp_limb_t,
+// if CLN is sitting on top of GMP.
+ #if defined(GMP_DEMANDS_UINTD_LONG_LONG)
+ #define HAVE_FAST_LONGLONG
+ #define intDsize long_long_bitsize
+ typedef long long sintD;
+ typedef unsigned long long uintD;
+ #elif defined(GMP_DEMANDS_UINTD_LONG)
+ #define intDsize long_bitsize
+ typedef long sintD;
+ typedef unsigned long uintD;
+ #elif defined(GMP_DEMANDS_UINTD_INT)
+ #define intDsize int_bitsize
+ typedef int sintD;
+ typedef unsigned int uintD;
+ #else // we are not using GMP, so just guess something reasonable
+ #if (defined(HAVE_FAST_LONGLONG) && (defined(__alpha__) || defined(__ia64__) || defined(__powerpc64__) || (defined(__sparc__) && defined(__arch64__)) || defined(__s390x__) || defined(__x86_64__)))
+ #define intDsize 64
+ typedef sint64 sintD;
+ typedef uint64 uintD;
+ #else
+ #define intDsize 32
+ typedef sint32 sintD;
+ typedef uint32 uintD;
+ #endif