Você está na página 1de 1

Soma de 4 dwords (Q30) contidas em registrador XMM

Ao final do loop interno do algortimo da convoluo utilizando a unidade SSE2 temos, no registrador XMM1, escolhido como acumulador, quatro dwords (32 bits) no formato Q30:
XMM1:

dwQ30_D

dwQ30_C

dwQ30_B

Inicialmente copiamos para outro registrador, p. ex: XMM0, com

dwQ30_A

movdqa xmm0, xmm1:

XMM0:

dwQ30_D

dwQ30_C

dwQ30_B

dwQ30_A

XMM1:

dwQ30_D

dwQ30_C

dwQ30_B

dwQ30_A

Ento deslocamos cada qword de XMM0 de 32 bits a direita com

psrlq xmm0, 32:

XMM0:

dwQ30_D

dwQ30_B

XMM1:

dwQ30_D

dwQ30_C

dwQ30_B

dwQ30_A

Adicionamos ento XMM0 a XMM1 dword a dword com


XMM1:

dwQ30_D

dwQ30_C + dwQ30_D

paddd xmm1, xmm0:


dwQ30_B

Fazemos novamente uma cpia de XMM1 em XMM0 com

dwQ30_A + dwQ30_B

movdqa xmm0, xmm1:

XMM0:

dwQ30_D

dwQ30_C + dwQ30_D

dwQ30_B

dwQ30_A + dwQ30_B

XMM1:

dwQ30_D

dwQ30_C + dwQ30_D

dwQ30_B

dwQ30_A + dwQ30_B

deslocamos a dqword superior de XMM0 de 64 bits para a direita com psrldq xmm0, 8:
XMM0:

dwQ30_D

dwQ30_C + dwQ30_D

XMM1:

dwQ30_D

dwQ30_C + dwQ30_D

dwQ30_B

dwQ30_A + dwQ30_B

Note-se aqui, que o deslocamento de 64 bits da instruo anterior especificado em bytes, e no


em bits (8 bytes = 64 bits).
Adicionamos ento XMM0 a XMM1 dword a dword com
XMM1:

dwQ30_D

dwQ30_C + dwQ30_D

paddd xmm1, xmm0:

dwQ30_B + dwQ30D

dwQ30_A + dwQ30_B
+
dwQ30_C + dwQ30_D

Finalmente, podemos utilizar a instruo movd para mover a soma completa dos quatro dwords
contida no dword menos significativo de XMM1 para algum registrador de inteiros, por exemplo o
registrador ebx, onde daremos prosseguimento ao processamento:
movd ebx, xmm1.
A tecnologia SSSE3 (note os trs S's) disponibilizou instrues para soma horizontal de inteiros. Se
essa tecnologia estiver disponvel pode-se obter o mesmo resultado utilizando:
phaddd xmm1, xmm0
phaddd xmm1, xmm0
movd ebx, xmm1

Soma de 4 dwords de um registrador XMM Arq. e Org. Comp. - Prof. Gortan

fl. 1/1

Você também pode gostar