Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-19 08:08:33

0001 // Basic type definitions
0002 
0003 #ifndef _CL_TYPES_H
0004 #define _CL_TYPES_H
0005 
0006 // CPU and other
0007 #include "cln/config.h"
0008 
0009 // char_bitsize, short_bitsize, long_bitsize, long_long_bitsize, pointer_bitsize
0010 #include "cln/intparam.h"
0011 
0012 // intptr_t, uintptr_t
0013 #include <stdint.h>
0014 
0015 // Elementary arithmetic types of given width:
0016   // 8 bits
0017   #if (char_bitsize==8)
0018     typedef signed char    sint8;
0019     typedef unsigned char  uint8;
0020   #else
0021     #error "No 8 bit integer type?"
0022   #endif
0023   // 16 bits
0024   #if (short_bitsize==16)
0025     typedef short           sint16;
0026     typedef unsigned short  uint16;
0027   #else
0028     #error "No 16 bit integer type?"
0029   #endif
0030   // 32 bits
0031   #if (long_bitsize==32)
0032     typedef long           sint32;
0033     typedef unsigned long  uint32;
0034   #elif (int_bitsize==32)
0035     typedef int            sint32;
0036     typedef unsigned int   uint32;
0037   #else
0038     #error "No 32 bit integer type?"
0039   #endif
0040   // 64 bits
0041   #if (long_bitsize==64)
0042     typedef long           sint64;
0043     typedef unsigned long  uint64;
0044   #elif (long_long_bitsize==64)
0045     typedef long long           sint64;
0046     typedef unsigned long long  uint64;
0047   #else
0048     #error "No 64 bit integer type?"
0049   #endif
0050   #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))
0051     // 64 bit registers in hardware
0052     #define HAVE_FAST_LONGLONG
0053   #endif
0054 // Synonyms
0055   #define intBsize 8
0056   typedef sint8  sintB;
0057   typedef uint8  uintB;
0058   #define intWsize 16
0059   typedef sint16 sintW;
0060   typedef uint16 uintW;
0061   #define intLsize 32
0062   typedef sint32 sintL;
0063   typedef uint32 uintL;
0064   #define intQsize 64
0065   typedef sint64 sintQ;
0066   typedef uint64 uintQ;
0067 
0068 // Type for three values (0, +1, -1).
0069   typedef int  cl_signean;
0070   #define signean_plus  1
0071   #define signean_null  0
0072   #define signean_minus -1
0073 
0074 // Integer type used for counters.
0075 // Constraint: sizeof(uintC) >= sizeof(uintL)
0076   #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)))
0077     #define intCsize long_bitsize
0078     typedef long           sintC;
0079     typedef unsigned long  uintC;
0080   #else
0081     #define intCsize int_bitsize
0082     typedef int           sintC;
0083     typedef unsigned int  uintC;
0084   #endif
0085 
0086 // Integer type used for lfloat exponents.
0087 // Constraint: sizeof(uintE) >= sizeof(uintC)
0088   #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))
0089     #define intEsize 64
0090     typedef sint64  sintE;
0091     typedef uint64  uintE;
0092   #else
0093     #define intEsize 32
0094     typedef sint32  sintE;
0095     typedef uint32  uintE;
0096   #endif
0097 
0098 // Integer type as large as a pointer.
0099 // Assumption: sizeof(intptr_t) == sizeof(void*)
0100   #define intPsize pointer_bitsize
0101   typedef intptr_t   sintP;
0102   typedef uintptr_t  uintP;
0103 
0104 // Integer type used for the value of a fixnum.
0105   // It must be like this, because in a couple of places we assume
0106   // cl_value_shift + cl_value_len == cl_pointer_size.
0107   #define intVsize intPsize
0108   typedef sintP  sintV;
0109   typedef uintP  uintV;
0110 
0111 // Numbers in the heap are stored as "digit" sequences.
0112 // A digit is an unsigned int with intDsize bits.
0113 // intDsize should be 8 or 16 or 32 or 64 and it should match mp_limb_t,
0114 // if CLN is sitting on top of GMP.
0115   #if defined(GMP_DEMANDS_UINTD_LONG_LONG)
0116     #define HAVE_FAST_LONGLONG
0117     #define intDsize long_long_bitsize
0118     typedef long long sintD;
0119     typedef unsigned long long uintD;
0120   #elif defined(GMP_DEMANDS_UINTD_LONG)
0121     #define intDsize long_bitsize
0122     typedef long sintD;
0123     typedef unsigned long uintD;
0124   #elif defined(GMP_DEMANDS_UINTD_INT)
0125     #define intDsize int_bitsize
0126     typedef int sintD;
0127     typedef unsigned int uintD;
0128   #else  // we are not using GMP, so just guess something reasonable
0129     #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)))
0130       #define intDsize 64
0131       typedef sint64  sintD;
0132       typedef uint64  uintD;
0133     #else
0134       #define intDsize 32
0135       typedef sint32  sintD;
0136       typedef uint32  uintD;
0137     #endif
0138   #endif
0139   #if (intDsize==64)
0140     #define intDDsize 128    // = 2*intDsize
0141     #define log2_intDsize 6  // = log2(intDsize)
0142   #elif (intDsize==32)
0143     #define intDDsize 64     // = 2*intDsize
0144     #define log2_intDsize 5  // = log2(intDsize)
0145   #elif (intDsize==16)
0146     #define intDDsize 32     // = 2*intDsize
0147     #define log2_intDsize 4  // = log2(intDsize)
0148   #elif (intDsize==8)
0149     #define intDDsize 16     // = 2*intDsize
0150     #define log2_intDsize 3  // = log2(intDsize)
0151   #else
0152     #error "What is intDsize again?"
0153   #endif
0154 // HAVE_DD means that there are unsigned ints with 2*intDsize bits.
0155   #if (intDDsize <= (defined(HAVE_FAST_LONGLONG) ? 64 : 32))
0156     #define HAVE_DD 1
0157     #if (intDDsize==16)
0158       typedef sint16  sintDD;
0159       typedef uint16  uintDD;
0160     #endif
0161     #if (intDDsize==32)
0162       typedef sint32  sintDD;
0163       typedef uint32  uintDD;
0164     #endif
0165     #if (intDDsize==64)
0166       typedef sint64  sintDD;
0167       typedef uint64  uintDD;
0168     #endif
0169   #else
0170     #define HAVE_DD 0
0171   #endif
0172 
0173 // Largest integer type which can be manipulated as efficiently as a pointer.
0174 // This is normally the same as the hardware register size.
0175 // Assumption: cl_word_size >= intPsize
0176   #ifdef HAVE_FAST_LONGLONG
0177     #define cl_word_size  64
0178   #else
0179     #define cl_word_size  32
0180   #endif
0181 
0182 #endif /* _CL_TYPES_H */