64bit signed/unsigned integer support from the compiler if LONG_MAX != 0x7FFFFFFF

This commit is contained in:
Dale Weiler 2012-04-29 12:09:30 -04:00
parent c3df4edebd
commit 5d64001c36

18
gmqcc.h
View file

@ -119,9 +119,25 @@
typedef long int32_t;
typedef unsigned long uint32_t;
/* bail on 64 bit type! */
/*
* It's nearly impossible to figure out a 64bit type at
* this point without making assumptions about the build
* enviroment. So if clang or gcc is detected use some
* compiler builtins to create a 64 signed and unsigned
* type.
*/
# if defined(__GNUC__) || defined (__CLANG__)
typedef int int64_t __attribute__((__mode__(__DI__)));
typedef unsigned int uint64_t __attribute__((__mode__(__DI__)));
# else
/*
* Incoorectly size the types so static assertions below will
* fail. There is no valid way to get a 64bit type at this point
* without making assumptions of too many things.
*/
typedef char int64_t;
typedef char uint64_t;
# endif
#endif
#ifdef _LP64 /* long pointer == 64 */
typedef unsigned long uintptr_t;