Bug#868877: libgpuarray FTBFS on 32bit: error: '__int128' is not supported on this target
Adrian Bunk
bunk at debian.org
Wed Jul 19 12:11:07 UTC 2017
Source: libgpuarray
Version: 0.6.8-1
Severity: important
https://buildd.debian.org/status/package.php?p=libgpuarray&suite=sid
...
/<<PKGBUILDDIR>>/src/util/integerfactoring.c: In function 'gaIMulMod':
/<<PKGBUILDDIR>>/src/util/integerfactoring.c:271:20: error: '__int128' is not supported on this target
return ((unsigned __int128)a * (unsigned __int128)b) % m;
^~~~~~~~
/<<PKGBUILDDIR>>/src/util/integerfactoring.c:271:43: error: '__int128' is not supported on this target
return ((unsigned __int128)a * (unsigned __int128)b) % m;
^~~~~~~~
src/CMakeFiles/gpuarray.dir/build.make:696: recipe for target 'src/CMakeFiles/gpuarray.dir/util/integerfactoring.c.o' failed
....
The code is:
static uint64_t gaIMulMod (uint64_t a, uint64_t b, uint64_t m){
#if (__GNUC__ >= 4) && defined(__x86_64__) && !defined(__STRICT_ANSI__)
uint64_t r;
asm(
"mul %2\n\t"
"div %3\n\t"
: "=&d"(r), "+a"(a) /* Outputs */
: "r"(b), "r"(m) /* Inputs */
: "cc"
);
return r;
#elif (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
/* Hardcore GCC 4.6+ optimization jazz */
return ((unsigned __int128)a * (unsigned __int128)b) % m;
#else
...
defined(__SIZEOF_INT128__) might be a suitable test
for __int128 support.
On a sidenote the amd64 assembler above is wrong and should be removed,
in addition to being buggy it just tries to do a 64bit
return (a * b) % m;
More information about the debian-science-maintainers
mailing list