1
我想对齐的浮动阵列转移到XMM寄存器功能参数XMM0
#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]
};
AFTER vector1声明然后它的作品。为什么?
'v1'(和'v2'和'rvec')是指向堆栈上的浮游物的指针。在_add_vector函数中,需要对这些指针进行解引用,然后将该数据移动到xmm0(和xmm1) –
除非您有特定的要求才能使用汇编语言,否则使用内在函数可以节省大量时间和悲伤。 –