我正在尝试将ALIGNED浮点数组移动到xmm寄存器
#define ALIGNED16 __declspec(align(16))
ALIGNED16 float vector1[4] = { 1.0f, 2.0f, 3.0f, 4.0f };
ALIGNED16 float vector2[4] = { 1.0f, 2.0f, 3.0f, 4.0f };
ALIGNED16 float result[4];
_add_vector(vector1, vector2, result);
....
_add_vector(float *__restrict v1, float * __restrict v2, float * __restrict rvec)
{
__asm
{
movaps xmm0, xmmword ptr [v1]
movaps xmm1, xmmword ptr [v2]
addps xmm0, xmm1
movaps xmmword ptr [rvec], xmm0
};
}
所以当编译器试图从v1复制到xmm0时我有“读取访问冲突”v1 was0xFFFFFFFF
但如果我正在做
__asm
{
movaps xmm0, xmmword ptr [v1]
};
在vector1声明后,它可以工作。为什么呢?
答案 0 :(得分:2)
问题是ActionEvent
,v1
和v2
是指向浮点数组的指针。您需要取消引用每个指针以获取实际数组。这样的事情可能有用:
vrec
在这种情况下,我使用调用者保存的 EAX , ECX 和 EDX 寄存器来取消引用变量。