Skip to content
Snippets Groups Projects
Commit 253c097d authored by Reid Kleckner's avatar Reid Kleckner
Browse files

Implement __umulh with __int128 arithmetic

Use the same approach as _umul128, but just return the high half.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@223316 91177308-0d34-0410-b5e6-96231b3b80d8
parent 9181092e
No related branches found
No related tags found
No related merge requests found
...@@ -330,7 +330,6 @@ unsigned __int64 __shiftright128(unsigned __int64 _LowPart, ...@@ -330,7 +330,6 @@ unsigned __int64 __shiftright128(unsigned __int64 _LowPart,
unsigned char _Shift); unsigned char _Shift);
static __inline__ static __inline__
void __stosq(unsigned __int64 *, unsigned __int64, size_t); void __stosq(unsigned __int64 *, unsigned __int64, size_t);
unsigned __int64 __umulh(unsigned __int64, unsigned __int64);
unsigned char __vmx_on(unsigned __int64 *); unsigned char __vmx_on(unsigned __int64 *);
unsigned char __vmx_vmclear(unsigned __int64 *); unsigned char __vmx_vmclear(unsigned __int64 *);
unsigned char __vmx_vmlaunch(void); unsigned char __vmx_vmlaunch(void);
...@@ -429,6 +428,12 @@ _umul128(unsigned __int64 _Multiplier, unsigned __int64 _Multiplicand, ...@@ -429,6 +428,12 @@ _umul128(unsigned __int64 _Multiplier, unsigned __int64 _Multiplicand,
*_HighProduct = _FullProduct >> 64; *_HighProduct = _FullProduct >> 64;
return _FullProduct; return _FullProduct;
} }
static __inline__ unsigned __int64 __attribute__((__always_inline__, __nodebug__))
__umulh(unsigned __int64 _Multiplier, unsigned __int64 _Multiplicand) {
unsigned __int128 _FullProduct =
(unsigned __int128)_Multiplier * (unsigned __int128)_Multiplicand;
return _FullProduct >> 64;
}
void __cdecl _xrstor64(void const *, unsigned __int64); void __cdecl _xrstor64(void const *, unsigned __int64);
void __cdecl _xsave64(void *, unsigned __int64); void __cdecl _xsave64(void *, unsigned __int64);
void __cdecl _xsaveopt64(void *, unsigned __int64); void __cdecl _xsaveopt64(void *, unsigned __int64);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment