1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
/* HOST_WIDE_INT definitions for the GNU compiler.
Copyright (C) 1998, 2002 Free Software Foundation, Inc.
This file is part of GCC.
Provide definitions for macros which depend on HOST_BITS_PER_INT
and HOST_BITS_PER_LONG. */
#ifndef GCC_HWINT_H
#define GCC_HWINT_H
/* This describes the machine the compiler is hosted on. */
#define HOST_BITS_PER_CHAR CHAR_BIT
#define HOST_BITS_PER_SHORT (CHAR_BIT * SIZEOF_SHORT)
#define HOST_BITS_PER_INT (CHAR_BIT * SIZEOF_INT)
#define HOST_BITS_PER_LONG (CHAR_BIT * SIZEOF_LONG)
#ifdef HAVE_LONG_LONG
# define HOST_BITS_PER_LONGLONG (CHAR_BIT * SIZEOF_LONG_LONG)
#else
#ifdef HAVE___INT64
# define HOST_BITS_PER_LONGLONG (CHAR_BIT * SIZEOF___INT64)
#else
/* If we're here and we're GCC, assume this is stage 2+ of a bootstrap
and 'long long' has the width of the *target*'s long long. */
# if GCC_VERSION > 3000
# define HOST_BITS_PER_LONGLONG LONG_LONG_TYPE_SIZE
# endif /* gcc */
#endif
#endif /* no long long */
/* Find the largest host integer type and set its size and type. */
/* Use long long on the host if the target has a wider long type than
the host. */
#if ! defined HOST_BITS_PER_WIDE_INT \
&& defined HOST_BITS_PER_LONGLONG \
&& (HOST_BITS_PER_LONGLONG > HOST_BITS_PER_LONG) \
&& (defined (LONG_LONG_MAX) || defined (LONGLONG_MAX) \
|| defined (LLONG_MAX) || defined (__GNUC__))
# ifdef MAX_LONG_TYPE_SIZE
# if MAX_LONG_TYPE_SIZE > HOST_BITS_PER_LONG
# define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONGLONG
# define HOST_WIDE_INT long long
# endif
# else
# if LONG_TYPE_SIZE > HOST_BITS_PER_LONG
# define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONGLONG
# define HOST_WIDE_INT long long
# endif
# endif
#endif
#ifndef HOST_BITS_PER_WIDE_INT
# if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
# define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
# define HOST_WIDE_INT long
# else
# define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
# define HOST_WIDE_INT int
# endif
#endif /* ! HOST_BITS_PER_WIDE_INT */
/* Provide defaults for the way to print a HOST_WIDE_INT
in various manners. */
#ifndef HOST_WIDE_INT_PRINT_DEC
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT
# define HOST_WIDE_INT_PRINT_DEC "%d"
# define HOST_WIDE_INT_PRINT_DEC_C "%d"
# define HOST_WIDE_INT_PRINT_DEC_SPACE "% *d"
# else
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
# define HOST_WIDE_INT_PRINT_DEC "%ld"
# define HOST_WIDE_INT_PRINT_DEC_C "%ldL"
# define HOST_WIDE_INT_PRINT_DEC_SPACE "% *ld"
# else
# define HOST_WIDE_INT_PRINT_DEC "%lld"
# define HOST_WIDE_INT_PRINT_DEC_C "%lldLL"
# define HOST_WIDE_INT_PRINT_DEC_SPACE "% *lld"
# endif
# endif
#endif /* ! HOST_WIDE_INT_PRINT_DEC */
#ifndef HOST_WIDE_INT_PRINT_UNSIGNED
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT
# define HOST_WIDE_INT_PRINT_UNSIGNED "%u"
# define HOST_WIDE_INT_PRINT_UNSIGNED_SPACE "% *u"
# else
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
# define HOST_WIDE_INT_PRINT_UNSIGNED "%lu"
# define HOST_WIDE_INT_PRINT_UNSIGNED_SPACE "% *lu"
# else
# define HOST_WIDE_INT_PRINT_UNSIGNED "%llu"
# define HOST_WIDE_INT_PRINT_UNSIGNED_SPACE "% *llu"
# endif
# endif
#endif /* ! HOST_WIDE_INT_PRINT_UNSIGNED */
#ifndef HOST_WIDE_INT_PRINT_HEX
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT
# define HOST_WIDE_INT_PRINT_HEX "0x%x"
# else
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
# define HOST_WIDE_INT_PRINT_HEX "0x%lx"
# else
# define HOST_WIDE_INT_PRINT_HEX "0x%llx"
# endif
# endif
#endif /* ! HOST_WIDE_INT_PRINT_HEX */
#ifndef HOST_WIDE_INT_PRINT_DOUBLE_HEX
# if HOST_BITS_PER_WIDE_INT == 64
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT
# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%x%016x"
# else
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%lx%016lx"
# else
# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%llx%016llx"
# endif
# endif
# else
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT
# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%x%08x"
# else
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%lx%08lx"
# else
# define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%llx%08llx"
# endif
# endif
# endif
#endif /* ! HOST_WIDE_INT_PRINT_DOUBLE_HEX */
/* Find HOST_WIDEST_INT and set its bit size, type and print macros.
It will be the largest integer mode supported by the host which may
(or may not) be larger than HOST_WIDE_INT. */
#ifndef HOST_WIDEST_INT
#if defined HOST_BITS_PER_LONGLONG \
&& HOST_BITS_PER_LONGLONG > HOST_BITS_PER_LONG
# define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONGLONG
# define HOST_WIDEST_INT long long
# define HOST_WIDEST_INT_PRINT_DEC "%lld"
# define HOST_WIDEST_INT_PRINT_DEC_SPACE "% *lld"
# define HOST_WIDEST_INT_PRINT_UNSIGNED "%llu"
# define HOST_WIDEST_INT_PRINT_UNSIGNED_SPACE "% *llu"
# define HOST_WIDEST_INT_PRINT_HEX "0x%llx"
# else
# define HOST_BITS_PER_WIDEST_INT HOST_BITS_PER_LONG
# define HOST_WIDEST_INT long
# define HOST_WIDEST_INT_PRINT_DEC "%ld"
# define HOST_WIDEST_INT_PRINT_DEC_SPACE "% *ld"
# define HOST_WIDEST_INT_PRINT_UNSIGNED "%lu"
# define HOST_WIDEST_INT_PRINT_UNSIGNED_SPACE "% *lu"
# define HOST_WIDEST_INT_PRINT_HEX "0x%lx"
# endif /* long long wider than long */
#endif /* ! HOST_WIDEST_INT */
#endif /* ! GCC_HWINT_H */
|