https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90600
Bug ID: 90600 Summary: incompatible 64-bit-types in x86-intrinsics Product: gcc Version: 9.1.1 Status: UNCONFIRMED Keywords: ssemmx Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: g.peterh...@t-online.de Target Milestone: --- Host: x86-64 Target: x86-64 Build: 9.1.1 COLLECT_GCC=gcc-9 COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-suse-linux/9/lto-wrapper OFFLOAD_TARGET_NAMES=hsa:nvptx-none Target: x86_64-suse-linux Configured with: ../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c,c++,objc,fortran,obj-c++,ada,go,d --enable-offload-targets=hsa,nvptx-none=/usr/nvptx-none, --without-cuda-driver --disable-werror --with-gxx-include-dir=/usr/include/c++/9 --enable-ssp --disable-libssp --disable-libvtv --disable-cet --disable-libcc1 --enable-plugin --with-bugurl=https://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --with-slibdir=/lib64 --with-system-zlib --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-libphobos --enable-version-specific-runtime-libs --with-gcc-major-version-only --enable-linker-build-id --enable-linux-futex --enable-gnu-indirect-function --program-suffix=-9 --without-system-libunwind --enable-multilib --with-arch-32=x86-64 --with-tune=generic --with-build-config=bootstrap-lto-lean --enable-link-mutex --build=x86_64-suse-linux --host=x86_64-suse-linux Thread model: posix gcc version 9.1.1 20190520 [gcc-9-branch revision 271396] (SUSE Linux) snip 1: using intrinsic_int64_t = decltype(_mm_cvtsi128_si64(__m128i{})); std::cout<<std::boolalpha; std::cout<<(std::is_same_v<int64_t, intrinsic_int64_t>)<<std::endl; std::cout<<(sizeof(int64_t) == sizeof(intrinsic_int64_t))<<std::endl; -> false true snip 2: uint64_t a, b, r; uint8_t carry; carry = _addcarry_u64(carry, a, b, &r); -> error: invalid conversion from ‘uint64_t*’ {aka ‘long unsigned int*’} to ‘long long unsigned int*’ [-fpermissive] Hello, you're using incompatible 64-bit-types in the x86-intrinsics. Why are not always and everywhere the default-types taken from "types.h"? PS: Is there any hope that the completely outdated (from the 70') short/int/long-types will be completely replaced by u/intX_t (keywords!)? With (signed/unsigned) char != u/int8_t, so that you can write: uint8_t ui = 65; int8_t si = 65; unsigned char uc = 65; signed char sc = 65; char c = 65; std::cout << ui ... -> 65 65 A A A reguards Gero