On Tuesday, 22 November 2016 at 08:54:36 UTC, Kagamin wrote:
Yep, I need muldiv for long values on x86-64.
Quick and dirty assembler: version(D_InlineAsm_X86_64): long muldiv(long a, long b, long c) { //windows RCX, RDX, R8 //linux RDI, RSI, RDX version(Windows) { asm { naked; mov RAX, RCX; //RAX = a imul RDX; //RDX:RAX = a * b idiv R8; //RAX = a * b / c ret; } } else version(linux) { asm { naked; mov RAX, RDI; //RAX = a; mov R8, RDX; //R8 = b imul RSI; //RDX:RAX = a * b idiv R8; //RAX = a * b / c ret; } } else static assert(0); }