gpt4 book ai didi

c - 汇编中 C 的数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:09 24 4
gpt4 key购买 nike

我正在尝试使用 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 在这种情况下传递地址的原因。

关于c - 汇编中 C 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37492073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com