Выравнивание переменных стека в D

В d вы можете выровнять элементы структуры / класса, используя ключевое слово , например:

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

Однако, кажется, вы не можете сделать то же самое на стеке:

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

Есть ли способ выровнять данные на стеке? В частности, я хочу создать 16-байт выровненный массив поплавков для загрузки в XMM-регистры с использованием MOVAPS , что значительно быстрее MOVEUPS .

E.G.

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.
        ...
    }
}

10
задан Peter Alexander 11 September 2011 в 16:36
поделиться