ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
706105 Топик полностью
fk0, легенда (16.10.2016 16:53 - 17:47, просмотров: 253) ответил Ксения на И на каком компиляторе вы предлагаете мне это сделать? (спрашиваю, чтобы потом вы не говорили, что компилятор был дурак)
gcc (-mavx2 -march=haswell -mfpmath=sse -O3, gcc=6.2) -- для "упакованных флоатов" в gcc нужно встроенные функции использовать -- тот же ассемблер получается...  double f(double *x, double *y) { double sum=0; double *xp=x, *yp=y; for (int i=0; i<128; i++) { sum += (*xp++) * (*yp++); } return sum; }
f:
.LFB0:
        .cfi_startproc
        subl    $12, %esp
        .cfi_def_cfa_offset 16
        xorl    %eax, %eax
        vxorpd  %xmm0, %xmm0, %xmm0
        movl    16(%esp), %ecx
        movl    20(%esp), %edx
        .p2align 4,,10
        .p2align 3
.L2:
        vmovsd  (%ecx,%eax), %xmm1
        vfmadd231sd     (%edx,%eax), %xmm1, %xmm0
        addl    $8, %eax
        cmpl    $1024, %eax
        jne     .L2
        vmovsd  %xmm0, (%esp)
        fldl    (%esp)
        addl    $12, %esp
        .cfi_def_cfa_offset 4
        ret
[ZX]