我想将指针传递给 C 和 ASM 代码之间的数组。我有一个包含四个双精度值的数组,我需要将它们传递给 asm,将它们加载到 xmm,相乘并将指向四个值的指针返回给 C。将数据加载到 xmm0 时出现错误。
如何将此指针传递给 ASM 并返回给 C ?如何将所有四个数字加载到 xmm0 ?
这是代码:
.text
.globl calkasse
.type calkasse, @function
calkasse:
pushq %rbp
movq %rsp, %rbp
movq 8(%rbp), %rax
movaps 16(%rax), %xmm0
mulps %xmm0,%xmm0
movq %rbp, %rsp
popq %rbp
ret
和C代码:
double (*calkasse(double (*)[4]))[4];
int main(void) {
double suma=0.0;
double poczatek=1.0;
double koniec=5.0;
double step=0.001;
double i=poczatek;
double array[4];
double (*wynik)[4];
array[0] = i;
array[1] = i+step;
array[2] = i+(2*step);
array[3] = i+(3*step);
wynik = calkasse(&array);
suma+=*wynik[0]+*wynik[1]+*wynik[2]+*wynik[3];
return 1;
}