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

Reply via email to