我想將指針傳遞給C和ASM代碼之間的數組。我有一個四個double值的數組,我需要將它們傳遞給asm,將它們加載到xmm,乘以並將指針返回到C的四個值。我在將數據加載到xmm0時出錯。將指針從c傳遞到asm並將值添加到sse寄存器
如何將此指針傳遞給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;
}
可能不是這樣的。在Linux和Windows(64位)上,前幾個參數傳入寄存器(但不同的寄存器和不同的寄存器)。這是什麼平臺?此外,他們是雙打的,但你用它們作爲浮游物。其中四個不適合xmm寄存器。 – harold
這是linux ubuntu。所以指針會在正常的寄存器中?然後我會改變爲浮動。 – Gravian
那麼參數將在'rdi'中。 – harold