Wydanie R2019.06.2: SSE
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
# Jan Potocki 2019
|
||||
# Suma 2 tablic liczb int (32-bitowych) za pomoca jednostki SSE
|
||||
|
||||
.globl suma_sse
|
||||
.type sume_sse, @function
|
||||
|
||||
suma_sse:
|
||||
pushq %rbp # Wejscie do funkcji
|
||||
movq %rsp, %rbp
|
||||
|
||||
# rdi - wskaznik na 1. tablice
|
||||
# rsi - wskaznik na 2. tablice
|
||||
# rdx - wskaznik na tablice przeznaczona na wynik
|
||||
# rcx - dlugosc tablic
|
||||
|
||||
# Obliczenie dlugosci tablicy w bajtach (ograniczenie petli)
|
||||
pushq %rdx # Zapisanie wartosci rdx na stosie
|
||||
movq %rcx, %rax # Przygotowanie mnozenia...
|
||||
movq $4, %rcx # int = 4 bajty (w modelu danych LP64)
|
||||
mulq %rcx # Mnozenie (wynik w rdx:rax)
|
||||
popq %rdx # Przywrocenie wartosci rdx ze stosu
|
||||
|
||||
# Sumowanie wektorowe
|
||||
mov $0, %r8 # r8 - indeks petli
|
||||
|
||||
suma:
|
||||
movdqu (%rdi, %r8, 1), %xmm0 # xmm0 - 4 liczby z pierwszej tablicy
|
||||
movdqu (%rsi, %r8, 1), %xmm1 # xmm1 - 4 liczby z drugiej tablicy
|
||||
paddd %xmm1, %xmm0 # Rownoczesna suma 4 liczb
|
||||
movdqu %xmm0, (%rdx, %r8, 1) # Zapisanie wyniku w pamieci
|
||||
add $16, %r8 # Przesuniecie o 16 bajtow (4x int)
|
||||
cmp %rax, %r8 # sprawdzenie czy osiagnieto koniec tablicy
|
||||
jne suma
|
||||
|
||||
popq %rbp # Wyjscie z funkcji
|
||||
ret
|
||||
Reference in New Issue
Block a user