Alignment of struct containing SIMD field - GDC
Cecil Ward via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Feb 28 22:04:32 PST 2017
struct vec_struct {
alias field this;
bool b;
int8 field;
}
In this code when you look at the generated x64 code output by
GDC it seems to be doing a nice job, because it has got the
offset right for the 256-bit YMM 'field' correct.
Does D automatically propagate the alignment restrictions on the
field to the allocation of static structs or structs on the stack?
In this case:
struct vec_struct {
bool b2;
struct {
alias field this;
bool b;
int8 field;
}
}
it appears that the offset to 'field' is no longer aligned
correctly - offset is 40 bytes in GDC. I don't suppose the
compiler will use solely unaligned instructions? In any event, I
could take the address of field and then pass that to someone
expecting to pick up something with guaranteed correct alignment,
if I have understood the D docs.
Please don't bite. I'm both new to D and I hope I have understood
the x86 SIMD instructions' docs. (Very experienced professional
asm and C programmer, but v out-of-date.)
Noob q: I notice that the GDC opcodes look a bit odd, for example
the compiler generates a 256-bit unaligned fetch followed by an
aligned binary operation (I think), eg a movdqu followed by a
vpaddd r, ymm ptr blah - is the latter aligned-only? Apologies if
I have got this wrong, need to read up. Would someone
sanity-check me?
More information about the Digitalmars-d-learn
mailing list