Inline assembly question

Dibyendu Majumdar d.majumdar at gmail.com
Sun Nov 12 11:01:39 UTC 2017


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


More information about the Digitalmars-d-learn mailing list