汇编中 C 的数组

array from C in Assembly

我正在尝试使用 SSE 进行一些添加,并且正在使用此 C 和程序集。为什么这样的东西不起作用?

struct vector {
    float x1, x2, x3, x4;
};

struct vector *dodawanie(const struct vector v1[], const struct vector v2[], int size) {

struct vector vec[size];
int i;
for(i = 0; i < size; i++) {
        asm(
            "MOV %1, %%rax \n"
            "MOV %2, %%rdx \n"

            "MOVUPS (%%rax), %%xmm0 \n"
            "MOVUPS (%%rdx), %%xmm1 \n"
            "ADDPS %%xmm0, %%xmm1 \n"

            "MOVUPS %%xmm1, %0 \n"

            :"=g"(vec[i])       //wyjscie
            :"g"(v1[i]), "g"(v2[i]) //wejscie
            :"%rax", "%rdx"
        );
}
return vec;
}

我收到错误:线程 1:EXC_BAD_ACCESS (CODE = EXC_I386_GPFLT)

但是当我输入 v1、v2 等而不是 v1[i]、v2[i] 时,这个工作正常但是当然只有数组的第一个元素。

我的代码有什么问题?

您正在使用表 (v1[i]v2[i]) 中的值,并将它们视为地址 ("MOVUPS (%%rax), %%xmm0 \n")。分别使用&v1[i]&v2[i]

这也是表单 v1v2 在这种情况下传递地址的原因。