函数参数到xmm0

时间:2017-04-02 18:50:02

标签: c assembly x86 sse simd

我正在尝试将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声明后,它可以工作。为什么呢?

1 个答案:

答案 0 :(得分:2)

问题是ActionEventv1v2是指向浮点数组的指针。您需要取消引用每个指针以获取实际数组。这样的事情可能有用:

vrec

在这种情况下,我使用调用者保存的 EAX ECX EDX 寄存器来取消引用变量。

相关问题