]> granicus.if.org Git - python/commitdiff
Provide PY_LLONG_MAX on all systems having long long.
authorMartin v. Löwis <martin@v.loewis.de>
Wed, 13 Jun 2007 03:42:19 +0000 (03:42 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Wed, 13 Jun 2007 03:42:19 +0000 (03:42 +0000)
Will backport to 2.5.

Include/pyport.h

index 1b274fd6c95d7e2cf074edbe6ca1049cd5bb9e7c..0020d7cf6ed0aa6b879d591732f0d5bd3eead2c9 100644 (file)
@@ -62,14 +62,20 @@ Used in:  PY_LONG_LONG
 #ifndef PY_LONG_LONG
 #define PY_LONG_LONG long long
 #if defined(LLONG_MAX)
+/* If LLONG_MAX is defined in limits.h, use that. */
 #define PY_LLONG_MIN LLONG_MIN
 #define PY_LLONG_MAX LLONG_MAX
 #define PY_ULLONG_MAX ULLONG_MAX
-#elif defined(__s390__)
-/* Apparently, S390 Linux has long long, but no LLONG_MAX */
-#define PY_LLONG_MAX 9223372036854775807LL
+#elif defined(__LONG_LONG_MAX__)
+/* Otherwise, if GCC has a builtin define, use that. */
+#define PY_LLONG_MAX __LONG_LONG_MAX__
+#define PY_LLONG_MIN (-PY_LLONG_MAX-1)
+#define PY_ULLONG_MAX (__LONG_LONG_MAX__*2ULL + 1ULL)
+#else
+/* Otherwise, rely on two's complement. */
+#define PY_ULLONG_MAX (~0ULL)
+#define PY_LLONG_MAX  ((long long)(PY_ULLONG_MAX>>1))
 #define PY_LLONG_MIN (-PY_LLONG_MAX-1)
-#define PY_ULLONG_MAX 18446744073709551615ULL
 #endif /* LLONG_MAX */
 #endif
 #endif /* HAVE_LONG_LONG */