В D вы можете выровнять членов структуры / класса, используя ключевое слово align
, например ::
struct Vec4 { align(16) float[4] elems; }
Однако, похоже, что вы не можете сделать то же самое в стеке:
void foo()
{
align(16) float[4] vec; // error: found 'align' instead of statement
}
Есть ли способ выровнять данные в стеке? В частности, я хочу создать 16-байтовый выровненный массив чисел с плавающей запятой для загрузки в регистры XMM, используя movaps
, что значительно быстрее, чем movups
.
, например * * 1016
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.
...
}
}