blob: 86860eff29ccacd4eda7a7fbff31c3908553bf45 [file] [log] [blame]
#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 */