#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 */ | |