X-Git-Url: https://ginac.de/CLN/cln.git//cln.git?a=blobdiff_plain;f=include%2Fcln%2Ftypes.h;h=d243865f21ecb40a0ad3c53fdd6260d3a8f6779f;hb=09d9f676a5d1c9652b732d0dd78f0c6130a83165;hp=1f956a42c8c6b1de62833821032966ef2a42062a;hpb=6fdd87f5e762926b273583db2d6440862584596f;p=cln.git diff --git a/include/cln/types.h b/include/cln/types.h index 1f956a4..d243865 100644 --- a/include/cln/types.h +++ b/include/cln/types.h @@ -6,9 +6,12 @@ // CPU and other #include "cln/config.h" -// char_bitsize, short_bitsize, long_bitsize, long_long_bitsize +// char_bitsize, short_bitsize, long_bitsize, long_long_bitsize, pointer_bitsize #include "cln/intparam.h" +// intptr_t, uintptr_t +#include + // Elementary arithmetic types of given width: // 8 bits #if (char_bitsize==8) @@ -38,17 +41,13 @@ #if (long_bitsize==64) typedef long sint64; typedef unsigned long uint64; - #undef HAVE_LONGLONG - #define HAVE_LONGLONG - #elif defined(HAVE_LONGLONG) - #if defined(long_long_bitsize) && (long_long_bitsize==64) + #elif (long_long_bitsize==64) typedef long long sint64; typedef unsigned long long uint64; - #else // unusable type - #undef HAVE_LONGLONG - #endif + #else + #error "No 64 bit integer type?" #endif - #if defined(HAVE_LONGLONG) && (defined(__alpha__) || defined(__ia64__) || defined(__mips64__) || defined(__powerpc64__) || defined(__sparc64__) || defined(__x86_64__)) + #if (defined(__alpha__) || defined(__ia64__) || defined(__mips64__) || defined(__powerpc64__) || defined(__s390x__) || (defined(__sparc__) && defined(__arch64__)) || (defined(__x86_64__) || defined(_M_AMD64)) || defined(__aarch64__) || (defined(__riscv) && __riscv_xlen == 64) || defined(__e2k__) || defined(__loongarch_lp64)) // 64 bit registers in hardware #define HAVE_FAST_LONGLONG #endif @@ -62,21 +61,9 @@ #define intLsize 32 typedef sint32 sintL; typedef uint32 uintL; - #ifdef HAVE_LONGLONG - #define intQsize 64 - typedef sint64 sintQ; - typedef uint64 uintQ; - #endif - -// Boolean type. -#if 1 - typedef enum { cl_false = 0, cl_true = 1 } - cl_boolean; -#else - typedef bool cl_boolean; - #define cl_false 0 - #define cl_true 1 -#endif + #define intQsize 64 + typedef sint64 sintQ; + typedef uint64 uintQ; // Type for three values (0, +1, -1). typedef int cl_signean; @@ -85,7 +72,8 @@ #define signean_minus -1 // Integer type used for counters. - #if (defined(HAVE_FAST_LONGLONG) && (defined(__alpha__) || defined(__ia64__) || defined(__powerpc64__) || defined(__x86_64__))) +// Constraint: sizeof(uintC) >= sizeof(uintL) + #if (defined(HAVE_FAST_LONGLONG) && (defined(__alpha__) || defined(__ia64__) || defined(__powerpc64__) || defined(__s390x__) || (defined(__sparc__) && defined(__arch64__)) || defined(__x86_64__) || defined(__aarch64__) || defined(__mips64__) || (defined(__riscv) && __riscv_xlen == 64) || defined(__e2k__) || defined(__loongarch_lp64))) #define intCsize long_bitsize typedef long sintC; typedef unsigned long uintC; @@ -95,16 +83,30 @@ typedef unsigned int uintC; #endif +// Integer type used for lfloat exponents. +// Constraint: sizeof(uintE) >= sizeof(uintC) + #if (defined(__alpha__) || defined(__ia64__) || defined(__powerpc64__) || defined(__s390x__) || (defined(__sparc__) && defined(__arch64__)) || defined(__x86_64__) || defined(__i386__) || defined(__mips__) || defined(__rs6000__) || defined(__aarch64__) || (defined(__riscv) && __riscv_xlen == 64) || defined(__e2k__) || defined(__loongarch_lp64)) + #define intEsize 64 + typedef sint64 sintE; + typedef uint64 uintE; + #else + #define intEsize 32 + typedef sint32 sintE; + typedef uint32 uintE; + #endif + // Integer type as large as a pointer. -// Assumption: sizeof(long) == sizeof(void*) - #define intPsize long_bitsize - typedef long sintP; - typedef unsigned long uintP; +// Assumption: sizeof(intptr_t) == sizeof(void*) + #define intPsize pointer_bitsize + typedef intptr_t sintP; + typedef uintptr_t uintP; // Integer type used for the value of a fixnum. - #define intVsize long_bitsize - typedef long sintV; - typedef unsigned long uintV; + // It must be like this, because in a couple of places we assume + // cl_value_shift + cl_value_len == cl_pointer_size. + #define intVsize intPsize + typedef sintP sintV; + typedef uintP uintV; // Numbers in the heap are stored as "digit" sequences. // A digit is an unsigned int with intDsize bits. @@ -124,7 +126,7 @@ 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(__x86_64__))) + #if (defined(HAVE_FAST_LONGLONG) && (defined(__alpha__) || defined(__ia64__) || defined(__powerpc64__) || (defined(__sparc__) && defined(__arch64__)) || defined(__s390x__) || defined(__x86_64__) || defined(__aarch64__) || defined(__mips64__) || (defined(__riscv) && __riscv_xlen == 64) || defined(__e2k__) || defined(__loongarch_lp64))) #define intDsize 64 typedef sint64 sintD; typedef uint64 uintD;