Inline assembly question
Nicholas Wilson
iamthewilsonator at hotmail.com
Sun Nov 12 11:35:05 UTC 2017
On Sunday, 12 November 2017 at 11:01:39 UTC, Dibyendu Majumdar
wrote:
> Hi,
>
> I have recently started work on building a VM for Lua (actually
> a derivative of Lua) in X86-64 assembly. I am using the dynasm
> tool that is part of LuaJIT. I was wondering whether I could
> also write this in D's inline assembly perhaps, but there is
> one aspect that I am not sure how to do.
>
> The assembly code uses static allocation of registers, but
> because of the differences in how registers are used in Win64
> versus Unix X64 - different registers are assigned depending on
> the architecture. dynasm makes this easy to do using macros;
> e.g. below.
>
> |.if X64WIN
> |.define CARG1, rcx // x64/WIN64 C call arguments.
> |.define CARG2, rdx
> |.define CARG3, r8
> |.define CARG4, r9
> |.else
> |.define CARG1, rdi // x64/POSIX C call arguments.
> |.define CARG2, rsi
> |.define CARG3, rdx
> |.define CARG4, rcx
> |.endif
>
> With above in place, the code can use the mnemonics to refer to
> the registers rather than the registers themselves. This allows
> the assembly code to be coded once for both architectures.
>
> How would one do this in D inline assembly?
>
> Thanks and Regards
> Dibyendu
You could do it with a mixin, it would be rather ugly though. Not
sure of another way off the top of my head.
More information about the Digitalmars-d-learn
mailing list