divmod assembly implementation
Nick Treleaven
nick at geany.org
Sat Nov 23 21:36:23 UTC 2024
On Saturday, 23 November 2024 at 19:54:36 UTC, Sam Ludacis wrote:
> G'day
>
> I'm trying to implement the Python divmod function in D w/
> assembly. Should look something like this...
>
> '''
> ulong divmod64(ulong a, ulong b, ulong quot, ulong rem)
> {
> asm {
> xor RDX, RDX;
> mov RAX, a;
> div b;
> mov quot, RAX;
> mov rem, RDX;
> }
> }
> '''
>
> Without doubt this routine will fail. But would anyone have a
> way?
Just to mention that if requiring compiler optimization for fast
code is acceptable, you can just write it in D e.g.:
```d
ulong[2] div(ulong a, ulong b)
{
return [a / b, a % b];
}
```
```
$ dmd -c divmod.d -O -vasm
_D6divmod3divFmmZG2m:
0000: 48 83 EC 18 sub RSP,018h
0004: 48 8B C6 mov RAX,RSI
0007: 33 D2 xor EDX,EDX
0009: 48 F7 F7 div RDI
000c: 48 89 04 24 mov [RSP],RAX
0010: 48 89 54 24 08 mov 8[RSP],RDX
0015: 48 8B 54 24 08 mov RDX,8[RSP]
001a: 48 8B 04 24 mov RAX,[RSP]
001e: 48 83 C4 18 add RSP,018h
0022: C3 ret
```
Based on an older request:
https://forum.dlang.org/post/jd97nf$1jfj$1@digitalmars.com
More information about the Digitalmars-d-learn
mailing list