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) –
除非您有特定的要求才能使用匯編語言,否則使用內在函數可以節省大量時間和悲傷。 –