On Wed, 7 May 2014, Richard Biener wrote: > > This removes the need_64bit_hwi logic, nothing else (well, brings > libcpp in line with gcc). > > Bootstrap / regtest pending on x86_64-unknown-linux-gnu.
Bootstrapped and tested on x86_64-unknown-linux-gnu, ok for trunk? Thanks, Richard. > Just as I promised to send this before committing the "let's try this" > patch (which is now said to fix wide-int fallout). > > Richard. > > 2014-05-07 Richard Biener <rguent...@suse.de> > > gcc/ > * config.gcc: Remove need_64bit_hwint. > * configure.ac: Do not define NEED_64BIT_HOST_WIDE_INT. > * hwint.h: Do not check NEED_64BIT_HOST_WIDE_INT but assume > it to be true. > * config.in: Regenerate. > * configure: Likewise. > > libcpp/ > * configure.ac: Copy gcc logic of detecting a 64bit type. > Remove HOST_WIDE_INT define. > * include/cpplib.h: typedef cpp_num_part to a 64bit type, > similar to how hwint.h does it. > * config.in: Regenerate. > * configure: Likewise. > > Index: trunk/gcc/config.gcc > =================================================================== > *** trunk.orig/gcc/config.gcc 2014-04-30 10:16:58.491135331 +0200 > --- trunk/gcc/config.gcc 2014-04-30 10:24:43.902103288 +0200 > *************** > *** 164,176 **** > # gas Set to yes or no depending on whether the target > # system normally uses GNU as. > # > - # need_64bit_hwint Set to yes if HOST_WIDE_INT must be 64 bits wide > - # for this target. This is true if this target > - # supports "long" or "wchar_t" wider than 32 bits, > - # or BITS_PER_WORD is wider than 32 bits. > - # The setting made here must match the one made in > - # other locations such as libcpp/configure.ac > - # > # configure_default_options > # Set to an initializer for configure_default_options > # in configargs.h, based on --with-cpu et cetera. > --- 164,169 ---- > *************** gnu_ld="$gnu_ld_flag" > *** 233,239 **** > default_use_cxa_atexit=no > default_gnu_indirect_function=no > target_gtfiles= > - need_64bit_hwint=yes > need_64bit_isa= > native_system_header_dir=/usr/include > target_type_format_char='@' > --- 226,231 ---- > *************** m32c*-*-*) > *** 310,323 **** > ;; > aarch64*-*-*) > cpu_type=aarch64 > - need_64bit_hwint=yes > extra_headers="arm_neon.h" > extra_objs="aarch64-builtins.o aarch-common.o" > target_has_targetm_common=yes > ;; > alpha*-*-*) > cpu_type=alpha > - need_64bit_hwint=yes > extra_options="${extra_options} g.opt" > ;; > am33_2.0-*-linux*) > --- 302,313 ---- > *************** arm*-*-*) > *** 333,339 **** > target_type_format_char='%' > c_target_objs="arm-c.o" > cxx_target_objs="arm-c.o" > - need_64bit_hwint=yes > extra_options="${extra_options} arm/arm-tables.opt" > ;; > avr-*-*) > --- 323,328 ---- > *************** i[34567]86-*-*) > *** 363,369 **** > cpu_type=i386 > c_target_objs="i386-c.o" > cxx_target_objs="i386-c.o" > - need_64bit_hwint=yes > extra_options="${extra_options} fused-madd.opt" > extra_headers="cpuid.h mmintrin.h mm3dnow.h xmmintrin.h emmintrin.h > pmmintrin.h tmmintrin.h ammintrin.h smmintrin.h > --- 352,357 ---- > *************** x86_64-*-*) > *** 393,403 **** > adxintrin.h fxsrintrin.h xsaveintrin.h xsaveoptintrin.h > avx512cdintrin.h avx512erintrin.h avx512pfintrin.h > shaintrin.h" > - need_64bit_hwint=yes > ;; > ia64-*-*) > extra_headers=ia64intrin.h > - need_64bit_hwint=yes > extra_options="${extra_options} g.opt fused-madd.opt" > ;; > hppa*-*-*) > --- 381,389 ---- > *************** microblaze*-*-*) > *** 420,426 **** > ;; > mips*-*-*) > cpu_type=mips > - need_64bit_hwint=yes > extra_headers="loongson.h" > extra_options="${extra_options} g.opt mips/mips-tables.opt" > ;; > --- 406,411 ---- > *************** picochip-*-*) > *** 438,444 **** > powerpc*-*-*) > cpu_type=rs6000 > extra_headers="ppc-asm.h altivec.h spe.h ppu_intrinsics.h paired.h > spu2vmx.h vec_types.h si2vmx.h htmintrin.h htmxlintrin.h" > - need_64bit_hwint=yes > case x$with_cpu in > > xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[345678]|xpower6x|xrs64a|xcell|xa2|xe500mc64|xe5500|Xe6500) > cpu_is_64bit=yes > --- 423,428 ---- > *************** powerpc*-*-*) > *** 447,453 **** > extra_options="${extra_options} g.opt fused-madd.opt > rs6000/rs6000-tables.opt" > ;; > rs6000*-*-*) > - need_64bit_hwint=yes > extra_options="${extra_options} g.opt fused-madd.opt > rs6000/rs6000-tables.opt" > ;; > score*-*-*) > --- 431,436 ---- > *************** sparc*-*-*) > *** 459,480 **** > c_target_objs="sparc-c.o" > cxx_target_objs="sparc-c.o" > extra_headers="visintrin.h" > - need_64bit_hwint=yes > ;; > spu*-*-*) > cpu_type=spu > - need_64bit_hwint=yes > ;; > s390*-*-*) > cpu_type=s390 > - need_64bit_hwint=yes > extra_options="${extra_options} fused-madd.opt" > extra_headers="s390intrin.h htmintrin.h htmxlintrin.h" > ;; > # Note the 'l'; we need to be able to match e.g. "shle" or "shl". > sh[123456789lbe]*-*-* | sh-*-*) > cpu_type=sh > - need_64bit_hwint=yes > extra_options="${extra_options} fused-madd.opt" > extra_objs="${extra_objs} sh_treg_combine.o sh-mem.o > sh_optimize_sett_clrt.o" > ;; > --- 442,459 ---- > *************** xtensa*-*-*) > *** 491,501 **** > ;; > tilegx*-*-*) > cpu_type=tilegx > - need_64bit_hwint=yes > ;; > tilepro*-*-*) > cpu_type=tilepro > - need_64bit_hwint=yes > ;; > esac > > --- 470,478 ---- > *************** case ${target} in > *** 683,689 **** > *) > default_use_cxa_atexit=yes;; > esac > - # need_64bit_hwint=yes # system compiler has this for all arch! > use_gcc_stdint=wrap > ;; > *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | > *-*-gnu* | *-*-kopensolaris*-gnu) > --- 660,665 ---- > *************** hppa*64*-*-linux*) > *** 1183,1189 **** > glibc-stdint.h pa/pa-linux.h pa/pa64-regs.h pa/pa-64.h \ > pa/pa64-linux.h" > gas=yes gnu_ld=yes > - need_64bit_hwint=yes > ;; > hppa*-*-linux*) > target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS" > --- 1159,1164 ---- > *************** hppa*64*-*-hpux11*) > *** 1258,1264 **** > esac > extra_options="${extra_options} pa/pa-hpux.opt \ > pa/pa-hpux1010.opt pa/pa64-hpux.opt hpux11.opt" > - need_64bit_hwint=yes > tmake_file="t-slibgcc" > case x${enable_threads} in > x | xyes | xposix ) > --- 1233,1238 ---- > *************** mipstx39-*-elf* | mipstx39el-*-elf*) > *** 2092,2098 **** > ;; > mmix-knuth-mmixware) > tm_file="${tm_file} newlib-stdint.h" > - need_64bit_hwint=yes > use_gcc_stdint=wrap > ;; > mn10300-*-*) > --- 2066,2071 ---- > Index: trunk/gcc/config.in > =================================================================== > *** trunk.orig/gcc/config.in 2014-04-28 11:53:47.560632455 +0200 > --- trunk/gcc/config.in 2014-04-30 10:26:38.000000000 +0200 > *************** > *** 1729,1740 **** > #endif > > > - /* Define to 1 if HOST_WIDE_INT must be 64 bits wide (see hwint.h). */ > - #ifndef USED_FOR_TARGET > - #undef NEED_64BIT_HOST_WIDE_INT > - #endif > - > - > /* Define to the address where bug reports for this package should be sent. > */ > #ifndef USED_FOR_TARGET > #undef PACKAGE_BUGREPORT > --- 1729,1734 ---- > Index: trunk/gcc/configure > =================================================================== > *** trunk.orig/gcc/configure 2014-04-28 13:26:42.395248635 +0200 > --- trunk/gcc/configure 2014-04-30 10:26:36.287095551 +0200 > *************** else > *** 11150,11161 **** > done > fi > > - if test x$need_64bit_hwint = xyes; then > - > - $as_echo "#define NEED_64BIT_HOST_WIDE_INT 1" >>confdefs.h > - > - fi > - > if test x$use_long_long_for_widest_fast_int = xyes; then > > $as_echo "#define USE_LONG_LONG_FOR_WIDEST_FAST_INT 1" >>confdefs.h > --- 11150,11155 ---- > *************** else > *** 17994,18000 **** > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > ! #line 17997 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > --- 17988,17994 ---- > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > ! #line 17991 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > *************** else > *** 18100,18106 **** > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > ! #line 18103 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > --- 18094,18100 ---- > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > ! #line 18097 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > Index: trunk/gcc/configure.ac > =================================================================== > *** trunk.orig/gcc/configure.ac 2014-04-28 13:26:42.397248634 +0200 > --- trunk/gcc/configure.ac 2014-04-30 10:54:47.723979097 +0200 > *************** else > *** 1372,1382 **** > done > fi > > - if test x$need_64bit_hwint = xyes; then > - AC_DEFINE(NEED_64BIT_HOST_WIDE_INT, 1, > - [Define to 1 if HOST_WIDE_INT must be 64 bits wide (see hwint.h).]) > - fi > - > if test x$use_long_long_for_widest_fast_int = xyes; then > AC_DEFINE(USE_LONG_LONG_FOR_WIDEST_FAST_INT, 1, > [Define to 1 if the 'long long' (or '__int64') is wider than 'long' but > still > --- 1372,1377 ---- > Index: trunk/gcc/hwint.h > =================================================================== > *** trunk.orig/gcc/hwint.h 2014-01-07 10:20:15.790453288 +0100 > --- trunk/gcc/hwint.h 2014-04-30 10:27:31.640091740 +0200 > *************** extern char sizeof_long_long_must_be_8[s > *** 56,62 **** > Thus, we use that unless we have to use 'long long' or '__int64' > because we're targeting a 64-bit machine from a 32-bit host. */ > > ! #if HOST_BITS_PER_LONG >= 64 || !defined NEED_64BIT_HOST_WIDE_INT > # define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG > # define HOST_WIDE_INT long > # define HOST_WIDE_INT_C(X) X ## L > --- 56,62 ---- > Thus, we use that unless we have to use 'long long' or '__int64' > because we're targeting a 64-bit machine from a 32-bit host. */ > > ! #if HOST_BITS_PER_LONG >= 64 > # define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG > # define HOST_WIDE_INT long > # define HOST_WIDE_INT_C(X) X ## L > Index: trunk/libcpp/config.in > =================================================================== > *** trunk.orig/libcpp/config.in 2013-03-01 12:05:05.628540226 +0100 > --- trunk/libcpp/config.in 2014-04-30 11:09:46.000000000 +0200 > *************** > *** 180,185 **** > --- 180,188 ---- > /* Define to 1 if you have the <locale.h> header file. */ > #undef HAVE_LOCALE_H > > + /* Define to 1 if the system has the type `long long'. */ > + #undef HAVE_LONG_LONG > + > /* Define to 1 if you have the <memory.h> header file. */ > #undef HAVE_MEMORY_H > > *************** > *** 228,236 **** > /* Define to 1 if you have the <unistd.h> header file. */ > #undef HAVE_UNISTD_H > > ! /* Define to the widest efficient host integer type at least as wide as the > ! target's size_t type. */ > ! #undef HOST_WIDE_INT > > /* Define as const if the declaration of iconv() needs const. */ > #undef ICONV_CONST > --- 231,238 ---- > /* Define to 1 if you have the <unistd.h> header file. */ > #undef HAVE_UNISTD_H > > ! /* Define to 1 if the system has the type `__int64'. */ > ! #undef HAVE___INT64 > > /* Define as const if the declaration of iconv() needs const. */ > #undef ICONV_CONST > *************** > *** 262,267 **** > --- 264,275 ---- > /* The size of `long', as computed by sizeof. */ > #undef SIZEOF_LONG > > + /* The size of `long long', as computed by sizeof. */ > + #undef SIZEOF_LONG_LONG > + > + /* The size of `__int64', as computed by sizeof. */ > + #undef SIZEOF___INT64 > + > /* If using the C implementation of alloca, define if you know the > direction of stack growth for your system; otherwise it will be > automatically deduced at runtime. > Index: trunk/libcpp/configure > =================================================================== > *** trunk.orig/libcpp/configure 2014-02-24 17:40:11.060711433 +0100 > --- trunk/libcpp/configure 2014-04-30 11:09:43.683917411 +0200 > *************** _ACEOF > *** 5566,5571 **** > --- 5566,5657 ---- > > fi > > + ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" > "$ac_includes_default" > + if test "x$ac_cv_type_long_long" = x""yes; then : > + > + cat >>confdefs.h <<_ACEOF > + #define HAVE_LONG_LONG 1 > + _ACEOF > + > + # The cast to long int works around a bug in the HP C Compiler > + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects > + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. > + # This bug is HP SR number 8606223364. > + { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 > + $as_echo_n "checking size of long long... " >&6; } > + if test "${ac_cv_sizeof_long_long+set}" = set; then : > + $as_echo_n "(cached) " >&6 > + else > + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" > "ac_cv_sizeof_long_long" "$ac_includes_default"; then : > + > + else > + if test "$ac_cv_type_long_long" = yes; then > + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 > + $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} > + { as_fn_set_status 77 > + as_fn_error "cannot compute sizeof (long long) > + See \`config.log' for more details." "$LINENO" 5; }; } > + else > + ac_cv_sizeof_long_long=0 > + fi > + fi > + > + fi > + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" > >&5 > + $as_echo "$ac_cv_sizeof_long_long" >&6; } > + > + > + > + cat >>confdefs.h <<_ACEOF > + #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long > + _ACEOF > + > + > + fi > + > + ac_fn_c_check_type "$LINENO" "__int64" "ac_cv_type___int64" > "$ac_includes_default" > + if test "x$ac_cv_type___int64" = x""yes; then : > + > + cat >>confdefs.h <<_ACEOF > + #define HAVE___INT64 1 > + _ACEOF > + > + # The cast to long int works around a bug in the HP C Compiler > + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects > + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. > + # This bug is HP SR number 8606223364. > + { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of __int64" >&5 > + $as_echo_n "checking size of __int64... " >&6; } > + if test "${ac_cv_sizeof___int64+set}" = set; then : > + $as_echo_n "(cached) " >&6 > + else > + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (__int64))" > "ac_cv_sizeof___int64" "$ac_includes_default"; then : > + > + else > + if test "$ac_cv_type___int64" = yes; then > + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 > + $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} > + { as_fn_set_status 77 > + as_fn_error "cannot compute sizeof (__int64) > + See \`config.log' for more details." "$LINENO" 5; }; } > + else > + ac_cv_sizeof___int64=0 > + fi > + fi > + > + fi > + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof___int64" >&5 > + $as_echo "$ac_cv_sizeof___int64" >&6; } > + > + > + > + cat >>confdefs.h <<_ACEOF > + #define SIZEOF___INT64 $ac_cv_sizeof___int64 > + _ACEOF > + > + > + fi > + > { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in > sys/time.h or time.h" >&5 > $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; > } > if test "${ac_cv_struct_tm+set}" = set; then : > *************** $as_echo "#define ENABLE_CANONICAL_SYSTE > *** 7151,7191 **** > > fi > > - > - case $target in > - aarch64*-*-* | \ > - alpha*-*-* | \ > - arm*-*-* | \ > - x86_64-*-* | \ > - ia64-*-* | \ > - hppa*64*-*-* | \ > - i[34567]86-*-* | x86_64-*-solaris2.1[0-9]* | \ > - mips*-*-* | \ > - mmix-*-* | \ > - powerpc*-*-* | \ > - rs6000*-*-* | \ > - s390*-*-* | \ > - sparc*-*-* | \ > - spu-*-* | \ > - sh[123456789lbe]*-*-* | sh-*-* | \ > - tilegx*-*-* | tilepro*-*-* ) > - need_64bit_hwint=yes ;; > - *) > - need_64bit_hwint=no ;; > - esac > - > - case $need_64bit_hwint:$ac_cv_sizeof_long in > - *:8 | no:*) host_wide_int=long ;; > - *) host_wide_int='long long' ;; > - esac > - > - > - > - cat >>confdefs.h <<_ACEOF > - #define HOST_WIDE_INT $host_wide_int > - _ACEOF > - > - > case $target in > i?86-* | x86_64-*) > cat confdefs.h - <<_ACEOF >conftest.$ac_ext > --- 7237,7242 ---- > Index: trunk/libcpp/configure.ac > =================================================================== > *** trunk.orig/libcpp/configure.ac 2014-04-30 10:16:58.480135332 +0200 > --- trunk/libcpp/configure.ac 2014-04-30 10:56:21.677972629 +0200 > *************** AC_TYPE_SIZE_T > *** 64,69 **** > --- 64,71 ---- > AC_TYPE_SSIZE_T > AC_TYPE_UINTPTR_T > AC_CHECK_TYPE(ptrdiff_t, int) > + AC_CHECK_TYPES([long long], [AC_CHECK_SIZEOF(long long)]) > + AC_CHECK_TYPES([__int64], [AC_CHECK_SIZEOF(__int64)]) > AC_STRUCT_TM > AC_CHECK_SIZEOF(int) > AC_CHECK_SIZEOF(long) > *************** if test $enable_canonical_system_headers > *** 180,218 **** > 1, [Define to enable system headers canonicalization.]) > fi > > - m4_changequote(,) > - case $target in > - aarch64*-*-* | \ > - alpha*-*-* | \ > - arm*-*-* | \ > - x86_64-*-* | \ > - ia64-*-* | \ > - hppa*64*-*-* | \ > - i[34567]86-*-* | x86_64-*-solaris2.1[0-9]* | \ > - mips*-*-* | \ > - mmix-*-* | \ > - powerpc*-*-* | \ > - rs6000*-*-* | \ > - s390*-*-* | \ > - sparc*-*-* | \ > - spu-*-* | \ > - sh[123456789lbe]*-*-* | sh-*-* | \ > - tilegx*-*-* | tilepro*-*-* ) > - need_64bit_hwint=yes ;; > - *) > - need_64bit_hwint=yes ;; > - esac > - > - case $need_64bit_hwint:$ac_cv_sizeof_long in > - *:8 | no:*) host_wide_int=long ;; > - *) host_wide_int='long long' ;; > - esac > - m4_changequote([,]) > - > - AC_DEFINE_UNQUOTED(HOST_WIDE_INT, $host_wide_int, > - [Define to the widest efficient host integer type at least > - as wide as the target's size_t type.]) > - > case $target in > i?86-* | x86_64-*) > AC_TRY_COMPILE([], [asm ("pcmpestri %0, %%xmm0, %%xmm1" : : "i"(0))], > --- 182,187 ---- > Index: trunk/libcpp/include/cpplib.h > =================================================================== > *** trunk.orig/libcpp/include/cpplib.h 2014-01-07 10:20:27.942452756 > +0100 > --- trunk/libcpp/include/cpplib.h 2014-04-30 11:09:27.230918544 +0200 > *************** extern int cpp_defined (cpp_reader *, co > *** 819,825 **** > > /* A preprocessing number. Code assumes that any unused high bits of > the double integer are set to zero. */ > ! typedef unsigned HOST_WIDE_INT cpp_num_part; > typedef struct cpp_num cpp_num; > struct cpp_num > { > --- 819,842 ---- > > /* A preprocessing number. Code assumes that any unused high bits of > the double integer are set to zero. */ > ! > ! /* Find a type with at least 64bit precision, mimicking hwint.h. > ! This type has to be equal to unsigned HOST_WIDE_INT, see > ! gcc/c-family/c-lex.c. */ > ! #if SIZEOF_LONG >= 8 > ! typedef unsigned long cpp_num_part; > ! #else > ! # if SIZEOF_LONG_LONG >= 8 > ! typedef unsigned long long cpp_num_part; > ! # else > ! # if SIZEOF___INT64 >= 8 > ! typedef unsigned __int64 cpp_num_part; > ! # else > ! #error "This line should be impossible to reach" > ! # endif > ! # endif > ! #endif > ! > typedef struct cpp_num cpp_num; > struct cpp_num > { >