On 6/7/2012 4:42 PM, David Nadlinger wrote:
I'm currently working on a few codegen issues in LDC, where I'm not
quite sure if I understood the intended ABI for extern(D) on x86_64
correctly:
- What is the exact specification for returning static arrays by value?
My intention is to have it work exactly as if it were an equivalent
struct, i.e. int[3] would behave as if it were struct S { int a,b,c;}.
- What is the ABI for D vararg functions? (extern(D) void foo(…);)
- What was the reason of explicitly exposing __va_argsave_t instead
of going for compiler magic in vararg functions? The latter is what we
do in LDC (LLVM provides va_* intrinsics), and it seems to work fine.
We obviously try to be compatible to DMD, but I don't quite see why we
should move towards an (at least subjectively) worse design: With the
DMD implementation, the API is different from C _and_ requires
annoying special casing of code for x86_64. Sure, code that relied on
directly manipulating the argument pointer on x86 obviously can't
work, but a program just using va_start/va_arg/va_end should compile
fine on either platform without changes. With DMD, it doesn't.
I agree with you, but when I did that I was just trying to get something
that worked at all.
By the way, http://dlang.org/abi.html seems to be quite outdated, as
it still mentions static arrays being passed by reference.
Yes, more work needs to be done on that.
Also related to my current LDC pre-release work, name mangling on OS
X: http://d.puremagic.com/issues/show_bug.cgi?id=8207
Thanks,
David
_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals