struct vec_struct {
alias field this;
bool b;
int8 field; // ymm
}在这段代码中,当您查看GDC生成的x64代码时,它似乎做得很好,因为它对256位YMM字段的偏移量是正确的。
Q:D会自动将字段上的对齐限制传播到堆栈上静态结构或结构的分配吗?
在这种情况下-
struct vec_struct {
bool b2;
struct {
alias field this;
bool b;
int8 field; // umm
}
}“字段”的偏移量似乎不再正确地对齐--偏移量在GDC中是40字节。我不认为编译器只会使用未对齐的指令?无论如何,如果我已经理解了D文档,那么我可以获取字段的地址,然后将其传递给希望获得具有保证正确对齐的东西的人。Q:这是正确的-一个严重的坏问题,还是我是愚蠢的?
请不要咬人。我对D都是新手,我希望我已经理解了x86 SIMD指令的文档。(非常有经验的专业asm和C程序员,但v过时了。)
Noob问:我注意到GDC操作码看起来有点奇怪,例如编译器生成256位未对齐的获取,然后是对齐的二进制操作(我认为),例如movdqu后面跟着vpaddd r,ymm ptr blah --后者是只对齐的吗?抱歉,如果我弄错了,就得把它念一遍。有人能好好检查一下我吗?
发布于 2017-03-02 07:55:50
D是否自动将字段上的对齐限制传播到堆栈上静态结构或结构的分配?
我认为应该是这样的,GDC/LDC应该已经支持正确的堆栈对齐。在这方面,DMD可能有一些bug:bug.cgi?id=16098
“字段”的偏移量似乎不再正确地对齐--偏移量在GDC中是40字节。
正如Iain已经在D.learn线程中回答的那样,这是共享DMD/GDC代码库中的一个bug。
Bug报告:bug.cgi?id=17237
https://stackoverflow.com/questions/42538132
复制相似问题