RFC: PR target/40722: [4.5 Regression] ia32intrin.h defines of _rotl, _rotr conflict with target stdlib.h decls
Richard Guenther
richard.guenther@gmail.com
Sat Mar 20 21:57:00 GMT 2010
On Sat, Mar 20, 2010 at 7:08 PM, H.J. Lu <hongjiu.lu@intel.com> wrote:
> On Sat, Mar 20, 2010 at 10:59:35AM -0700, H.J. Lu wrote:
>> Hi,
>>
>> stdlib.h on mingw defines some new gcc 4.5 intrinsics as normal functions.
>> We can either disable gcc intrinsics on mingw or fix stdlib.h on mingw.
>> But fixincludes isn't run on mingw. Here is a hack to fix stdlib.h
>> mingw.
>>
>>
>> H.J.
>> ---
>> 2010-03-20 H.J. Lu <hongjiu.lu@intel.com>
>>
>> PR target/40722
>> * mkfixinc.sh: Fix stdlib.h for mingw.
>>
>
>
> Of course, we need to include <x86intrin.h> for gcc 4.5 and above.
> Otherwise, those functions won't be available in <stdlib.h>.
Hm. It makes more sense to disable gcc intrinsics, otherwise you'd
get different behavior when compiling with different GCC versions.
Richard.
>
> H.J.
> 2010-03-20 H.J. Lu <hongjiu.lu@intel.com>
>
> PR target/40722
> * mkfixinc.sh: Fix stdlib.h for mingw.
>
> diff --git a/fixincludes/mkfixinc.sh b/fixincludes/mkfixinc.sh
> index b45f179..c353d89 100755
> --- a/fixincludes/mkfixinc.sh
> +++ b/fixincludes/mkfixinc.sh
> @@ -15,8 +15,6 @@ case $machine in
> i?86-moss-msdos* | \
> i?86-*-pe | \
> i?86-*-cygwin* | \
> - i?86-*-mingw32* | \
> - x86_64-*-mingw32* | \
> i?86-*-interix* | \
> *-*-vxworks* | \
> powerpc-*-eabisim* | \
> @@ -29,6 +27,51 @@ case $machine in
> (echo "#! /bin/sh" ; echo "exit 0" ) > ${target}
> ;;
>
> + i?86-*-mingw32* | \
> + x86_64-*-mingw32*)
> + # We only want to fix stdlib.h in mingw.
> + # FIXME: Is SED available on mingw?
> + (cat > ${target} << EOF
> +#! /bin/sh
> +
> +OUTPUT_DIR=\$1
> +if [ "x\$OUTPUT_DIR" = "x" ]; then
> + echo fixincludes: no output directory specified
> + exit 1
> +fi
> +
> +if [ ! -d \$OUTPUT_DIR ]; then
> + echo fixincludes: output dir \"\$OUTPUT_DIR\" is an invalid directory
> + exit 1
> +fi
> +
> +INPUT_DIR=\$2
> +if [ "x\$INPUT_DIR" = "x" ]; then
> + echo fixincludes: no input directory specified
> + exit 1
> +fi
> +
> +if [ ! -d \$INPUT_DIR ]; then
> + echo fixincludes: input dir \"\$INPUT_DIR\" is an invalid directory
> + exit 1
> +fi
> +
> +INPUT_STDLIB_H=\$INPUT_DIR/stdlib.h
> +if [ ! -f \$INPUT_STDLIB_H ]; then
> + echo fixincludes: \"stdlib.h\" is an invalid file
> + exit 1
> +fi
> +
> +OUTPUT_STDLIB_H=\$OUTPUT_DIR/stdlib.h
> +sed -e "s/\(.*_rotl.*\)/#if __GNUC__ < 4 || (__GNUC__ == 4 \&\& __GNUC_MINOR__ < 5)\n\1/" \
> + -e "s/\(.*_lrotr.*\)/\1\n#else\n\#include <x86intrin.h>\n#endif/" \
> + \$INPUT_STDLIB_H > \$OUTPUT_STDLIB_H
> +
> +exit 0
> +EOF
> +)
> + ;;
> +
> *)
> cat < ${srcdir}/fixinc.in > ${target} || exit 1
> ;;
>
More information about the Gcc-patches
mailing list