在D语言中对齐堆栈变量

10

在D语言中,您可以使用align关键字对结构体/类成员进行对齐,例如:

struct Vec4 { align(16) float[4] elems; }

但是,似乎在堆栈上您无法执行相同的操作:

void foo()
{
    align(16) float[4] vec; // error: found 'align' instead of statement
}

有没有一种方法可以对齐堆栈上的数据?特别地,我想创建一个16字节对齐的浮点数数组,以使用 movaps 加载到 XMM 寄存器中,该方法比使用 movups 快得多。

例如:

void foo()
{
    float[4] v = [1.0f, 2.0f, 3.0f, 4.0f];
    asm
    {
        movaps XMM0, v; // v must be 16-byte aligned for this to work.
        ...
    }
}

3
为了在内联汇编中使用movaps而不是movups - Peter Alexander
1个回答

5

如果你愿意多花费16个字节,你可以在运行时自己进行对齐。除此之外,我就不知道了。


是的,这就是我目前正在做的事情,尽管它有点丑陋并浪费了一些额外的周期。 - Peter Alexander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接