C と ASM コードの間で配列へのポインターを渡したい。4 つの double 値の配列があり、それらを asm に渡し、xmm にロードし、乗算して 4 つの値へのポインターを C に戻す必要があります。データを xmm0 にロード中にエラーが発生しました。
このポインタを ASM に渡して C に戻す方法は? 4 つの数値すべてを 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;
}