如何在汇编语言中移动双精度数组的元素?

时间:2017-04-13 01:33:33

标签: gcc assembly x86-64 sse att

我将一个双精度数组传递给一个函数,如何将每个元素移动到相应的SSE寄存器中?如何将指定值移动到XMM寄存器中?我正在使用AT& T语法和GNU汇编程序。

_variance:

    push    %rbp
    movq    %rsp, %rbp

    xorq    %r8, %r8
    movq    %rdi, %r9
    movsd   $0, %xmm1
    movsd   $0, %xmm2
    cvtsi2sd    %r9, %xmm3
    decq    %r9
    jmp     2f
1:  movd    (%rsi, %r8, 8), %xmm0
    addsd   %xmm0, %xmm2
    mulsd   %xmm0, %xmm0
    addsd   %xmm0, %xmm1
    incq    %r8
2:  cmpq    %r8, %r9
    jl      1b
    divsd   %xmm3, %xmm1
    divsd   %xmm3,  %xmm2
    mulsd   %xmm2, %xmm2
    subsd   %xmm1, %xmm2
    movsd   %xmm2, %xmm0

    pop     %rbp
    ret
    .size   _variance,.-variance

这是C程序:

#include<stdio.h>

variance(int n, double x[]);

int main(void) {

double array[10] = {5.5, 3.4, 7.7, 3.2, 9.1, 113.5, .125, 33.2, 93.2, .00001};
int number = 10;


double answer = variance(number, array);

printf("Variance is: %d\n", answer);

return 0;

}

我正在计算一系列变量的方差。这是功能:

double sum1, sum2;
int i = 0;

while(i < n-1) {

sum1 = sum1 + (x[i] * x[i]);
sum2 = sum2 + x[i];

}

sum1 = sum1 / n;
sum2 = sum2 / n;

sum2 = sum2 * sum2;

return sum1 - sum2;

0 个答案:

没有答案