#include <_mingw.h> #ifdef _WIN64 #ifndef __SIZEOF_INT128__ typedef unsigned int __uint128 __attribute__ ((__mode__ (TI))); #else typedef unsigned __int128 __uint128; #endif unsigned __int64 _umul128(unsigned __int64, unsigned __int64, unsigned __int64 *); unsigned __int64 _umul128(unsigned __int64 a, unsigned __int64 b, unsigned __int64 *hi) { union { __uint128 v; unsigned __int64 sv[2]; } var; var.v = ((__uint128) a) * ((__uint128) b); if (hi) *hi = var.sv[1]; return var.sv[0]; } #endif /* _WIN64 */