I'm trying to compile a c program under mingw gcc. This program is using an __uint128_t integer. When I try to compile it under the standard ubuntu gcc on the same 64-bit machine, it perfectly works. But then, when I try to compile it for windows under mingw, it simply doesn't even recognize the __uint128_t keyword. What does this mean? There aren't 128 bit integers under mingw?
If not, is there any programming language for windows which has native (and FAST) 128 bit integers?
- 60,131
 - 14
 - 81
 - 117
 
- 8,362
 - 19
 - 68
 - 114
 
3 Answers
You need
- a relatively recent version of gcc
 - a version compiled with native 64 bit integer support
 
__int128_t is then emulated by using pairs of int64_t in the same way as 64bit integers are emulated with 32bit if they are not available on 32bit compiles
- 76,821
 - 6
 - 102
 - 177
 
I was able to get the same problem using Code::Blocks and the default mingw install (which is IA32 btw), however, when I installed TDM-MinGW64, it compiled fine (after adding the x64 compiler to C::B). So make sure your mingw build is targeting x64 (with -m64) and it is an x64 build of mingw, as __uint128_t is an optional x64 ABI extension.
whatever windows IDE you are using won't pick up __int128_t as a keyword though, as its a special GCC extension (as mentioned).
- 25,836
 - 3
 - 63
 - 101
 
But then, when I try to compile it for windows under mingw, it simply doesn't even recognize the __uint128_t keyword. What does this mean? There aren't 128 bit integers under mingw?
Perform gcc -dM -E - < /dev/null | grep INT128. If it output the macro #define __SIZEOF_INT128__ 16, then __uint128_t is available. If it does not output the macro or its less than 16, then __uint128_t is not available.
Also see 128-bit integer - nonsensical documentation? on the GCC users mailing list.
- 97,681
 - 90
 - 411
 - 885