Код IT Загрузка примера кода…

Assembler main.asm
section .data
    align 16
    vec_arr dd 1,2,3,4,5,6,7,8

section .text
sum_sse:
    pxor xmm0, xmm0           ; обнулить аккумулятор
    mov rsi, vec_arr
    mov rcx, 2                ; 8 элементов / 4 = 2 итерации

.loop:
    movdqa xmm1, [rsi]        ; загрузить 4 int32
    paddd xmm0, xmm1          ; сложить
    add rsi, 16
    loop .loop

    ; Горизонтальное сложение
    movhlps xmm1, xmm0
    paddd xmm0, xmm1
    pshufd xmm1, xmm0, 1
    paddd xmm0, xmm1
    movd eax, xmm0            ; результат в EAX
    ret
section .data
    align 16
    vec_arr dd 1,2,3,4,5,6,7,8

section .text
sum_sse:
    pxor xmm0, xmm0           ; обнулить аккумулятор
    mov rsi, vec_arr
    mov rcx, 2                ; 8 элементов / 4 = 2 итерации

.loop:
    movdqa xmm1, [rsi]        ; загрузить 4 int32
    paddd xmm0, xmm1          ; сложить
    add rsi, 16
    loop .loop

    ; Горизонтальное сложение
    movhlps xmm1, xmm0
    paddd xmm0, xmm1
    pshufd xmm1, xmm0, 1
    paddd xmm0, xmm1
    movd eax, xmm0            ; результат в EAX
    ret