diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 518f5a3aa00..771e2043266 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-05-28 Richard Biener + + * hwint.h (*_HALF_WIDE_INT*): Move to ... + * wide-int.cc (HOST_BITS_PER_HALF_WIDE_INT, HOST_HALF_WIDE_INT): + ... here and remove the rest. + * hwint.h (HOST_WIDE_INT_PRINT_*): Define in terms of PRI*64. + 2014-05-28 Richard Biener PR tree-optimization/61335 diff --git a/gcc/hwint.h b/gcc/hwint.h index fa573b8c236..f2ecc04ada5 100644 --- a/gcc/hwint.h +++ b/gcc/hwint.h @@ -64,40 +64,6 @@ extern char sizeof_long_long_must_be_8[sizeof (long long) == 8 ? 1 : -1]; # endif #endif -/* Print support for half a host wide int. */ -#define HOST_BITS_PER_HALF_WIDE_INT 32 -#if HOST_BITS_PER_HALF_WIDE_INT == HOST_BITS_PER_LONG -# define HOST_HALF_WIDE_INT long -# define HOST_HALF_WIDE_INT_PRINT HOST_LONG_FORMAT -# define HOST_HALF_WIDE_INT_PRINT_C "L" -# define HOST_HALF_WIDE_INT_PRINT_DEC "%" HOST_HALF_WIDE_INT_PRINT "d" -# define HOST_HALF_WIDE_INT_PRINT_DEC_C HOST_HALF_WIDE_INT_PRINT_DEC HOST_HALF_WIDE_INT_PRINT_C -# define HOST_HALF_WIDE_INT_PRINT_UNSIGNED "%" HOST_HALF_WIDE_INT_PRINT "u" -# define HOST_HALF_WIDE_INT_PRINT_HEX "%#" HOST_HALF_WIDE_INT_PRINT "x" -# define HOST_HALF_WIDE_INT_PRINT_HEX_PURE "%" HOST_HALF_WIDE_INT_PRINT "x" -#elif HOST_BITS_PER_HALF_WIDE_INT == HOST_BITS_PER_INT -# define HOST_HALF_WIDE_INT int -# define HOST_HALF_WIDE_INT_PRINT "" -# define HOST_HALF_WIDE_INT_PRINT_C "" -# define HOST_HALF_WIDE_INT_PRINT_DEC "%" HOST_HALF_WIDE_INT_PRINT "d" -# define HOST_HALF_WIDE_INT_PRINT_DEC_C HOST_HALF_WIDE_INT_PRINT_DEC HOST_HALF_WIDE_INT_PRINT_C -# define HOST_HALF_WIDE_INT_PRINT_UNSIGNED "%" HOST_HALF_WIDE_INT_PRINT "u" -# define HOST_HALF_WIDE_INT_PRINT_HEX "%#" HOST_HALF_WIDE_INT_PRINT "x" -# define HOST_HALF_WIDE_INT_PRINT_HEX_PURE "%" HOST_HALF_WIDE_INT_PRINT "x" -#elif HOST_BITS_PER_HALF_WIDE_INT == HOST_BITS_PER_SHORT -# define HOST_HALF_WIDE_INT short -# define HOST_HALF_WIDE_INT_PRINT "" -# define HOST_HALF_WIDE_INT_PRINT_C "" -# define HOST_HALF_WIDE_INT_PRINT_DEC "%" HOST_HALF_WIDE_INT_PRINT "d" -# define HOST_HALF_WIDE_INT_PRINT_DEC_C HOST_HALF_WIDE_INT_PRINT_DEC HOST_HALF_WIDE_INT_PRINT_C -# define HOST_HALF_WIDE_INT_PRINT_UNSIGNED "%" HOST_HALF_WIDE_INT_PRINT "u" -# define HOST_HALF_WIDE_INT_PRINT_HEX "%#" HOST_HALF_WIDE_INT_PRINT "x" -# define HOST_HALF_WIDE_INT_PRINT_HEX_PURE "%" HOST_HALF_WIDE_INT_PRINT "x" -#else -#error Please add support for HOST_HALF_WIDE_INT -#endif - - #define HOST_WIDE_INT_UC(X) HOST_WIDE_INT_C (X ## U) #define HOST_WIDE_INT_1 HOST_WIDE_INT_C (1) #define HOST_WIDE_INT_1U HOST_WIDE_INT_UC (1) @@ -109,48 +75,45 @@ extern char sizeof_long_long_must_be_8[sizeof (long long) == 8 ? 1 : -1]; typedef before using the __asm_fprintf__ format attribute. */ typedef HOST_WIDE_INT __gcc_host_wide_int__; +/* Provide C99 style format definitions for 64bits. */ +#ifndef HAVE_INTTYPES_H +#if HOST_BITS_PER_LONG == 64 +# define GCC_PRI64 HOST_LONG_FORMAT +#else +# define GCC_PRI64 HOST_LONG_LONG_FORMAT +#endif +#undef PRId64 +#define PRId64 GCC_PRI64 "d" +#undef PRIi64 +#define PRIi64 GCC_PRI64 "i" +#undef PRIo64 +#define PRIo64 GCC_PRI64 "o" +#undef PRIu64 +#define PRIu64 GCC_PRI64 "u" +#undef PRIx64 +#define PRIx64 GCC_PRI64 "x" +#undef PRIX64 +#define PRIX64 GCC_PRI64 "X" +#endif + /* Various printf format strings for HOST_WIDE_INT. */ -#if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG +#if HOST_BITS_PER_LONG == 64 # define HOST_WIDE_INT_PRINT HOST_LONG_FORMAT # define HOST_WIDE_INT_PRINT_C "L" - /* HOST_BITS_PER_WIDE_INT is 64 bits. */ -# define HOST_WIDE_INT_PRINT_DOUBLE_HEX \ - "0x%" HOST_LONG_FORMAT "x%016" HOST_LONG_FORMAT "x" -# define HOST_WIDE_INT_PRINT_PADDED_HEX \ - "%016" HOST_LONG_FORMAT "x" #else # define HOST_WIDE_INT_PRINT HOST_LONG_LONG_FORMAT # define HOST_WIDE_INT_PRINT_C "LL" - /* HOST_BITS_PER_WIDE_INT is 64 bits. */ -# define HOST_WIDE_INT_PRINT_DOUBLE_HEX \ - "0x%" HOST_LONG_LONG_FORMAT "x%016" HOST_LONG_LONG_FORMAT "x" -# define HOST_WIDE_INT_PRINT_PADDED_HEX \ - "%016" HOST_LONG_LONG_FORMAT "x" -#endif /* HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG */ - -#define HOST_WIDE_INT_PRINT_DEC "%" HOST_WIDE_INT_PRINT "d" -#define HOST_WIDE_INT_PRINT_DEC_C HOST_WIDE_INT_PRINT_DEC HOST_WIDE_INT_PRINT_C -#define HOST_WIDE_INT_PRINT_UNSIGNED "%" HOST_WIDE_INT_PRINT "u" -#define HOST_WIDE_INT_PRINT_HEX "%#" HOST_WIDE_INT_PRINT "x" -#define HOST_WIDE_INT_PRINT_HEX_PURE "%" HOST_WIDE_INT_PRINT "x" - -/* Provide C99 style format definitions for 64bits. */ -#ifndef HAVE_INTTYPES_H -#undef PRId64 -#define PRId64 HOST_WIDE_INT_PRINT "d" -#undef PRIi64 -#define PRIi64 HOST_WIDE_INT_PRINT "i" -#undef PRIo64 -#define PRIo64 HOST_WIDE_INT_PRINT "o" -#undef PRIu64 -#define PRIu64 HOST_WIDE_INT_PRINT "u" -#undef PRIx64 -#define PRIx64 HOST_WIDE_INT_PRINT "x" -#undef PRIX64 -#define PRIX64 HOST_WIDE_INT_PRINT "X" #endif +#define HOST_WIDE_INT_PRINT_DEC "%" PRId64 +#define HOST_WIDE_INT_PRINT_DEC_C "%" PRId64 HOST_WIDE_INT_PRINT_C +#define HOST_WIDE_INT_PRINT_UNSIGNED "%" PRIu64 +#define HOST_WIDE_INT_PRINT_HEX "%#" PRIx64 +#define HOST_WIDE_INT_PRINT_HEX_PURE "%" PRIx64 +#define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%" PRIx64 "%016" PRIx64 +#define HOST_WIDE_INT_PRINT_PADDED_HEX "%016" PRIx64 + /* Define HOST_WIDEST_FAST_INT to the widest integer type supported efficiently in hardware. (That is, the widest integer type that fits in a hardware register.) Normally this is "long" but on some hosts it diff --git a/gcc/wide-int.cc b/gcc/wide-int.cc index 3bfae2c9cd3..0d26edb245f 100644 --- a/gcc/wide-int.cc +++ b/gcc/wide-int.cc @@ -27,6 +27,16 @@ along with GCC; see the file COPYING3. If not see #include "tree.h" #include "dumpfile.h" + +#define HOST_BITS_PER_HALF_WIDE_INT 32 +#if HOST_BITS_PER_HALF_WIDE_INT == HOST_BITS_PER_LONG +# define HOST_HALF_WIDE_INT long +#elif HOST_BITS_PER_HALF_WIDE_INT == HOST_BITS_PER_INT +# define HOST_HALF_WIDE_INT int +#else +#error Please add support for HOST_HALF_WIDE_INT +#endif + #define W_TYPE_SIZE HOST_BITS_PER_WIDE_INT #if GCC_VERSION >= 3000 && (W_TYPE_SIZE == 32 || defined (__SIZEOF_INT128__)) typedef unsigned HOST_HALF_WIDE_INT UHWtype;