is there a way to do _umul128 on posix ?
a11e99z
black80 at bk.ru
Tue Sep 10 07:34:49 UTC 2019
On Tuesday, 10 September 2019 at 04:13:25 UTC, Newbie2019 wrote:
> I need _umul128 to do the fast math, is there a way to made
> it work for posix ?
>
> On windows I can use _umul128, is there a ASM or work around in
> LDC to do this on posix ?
https://run.dlang.io/is/2xYt5j
struct m128 { ulong lo, hi; }
// REX.W + F7 /4 MUL r/m64 (RDX:RAX ← RAX ∗ r/m64).
//
https://en.wikipedia.org/wiki/X86_calling_conventions#x86-64_calling_conventions
// Windows RCX, RDX, R8, R9. returns RAX only
// Linux RDI, RSI, RDX, RCX, R8, R9. returns RDX:RAX
m128 mul128( ulong a, ulong b ) pure nothrow @nogc @trusted {
asm pure @nogc nothrow {
naked;
mov RAX, RDI;
mul RSI;
ret;
}
}
// probably u can do it inline
More information about the digitalmars-d-ldc
mailing list