|
@@ -21,9 +21,6 @@ extern convulcion_matrix
|
|
|
|
|
|
|
|
; Mascaras y esas cosas
|
|
; Mascaras y esas cosas
|
|
|
section .data
|
|
section .data
|
|
|
- ;copiar: db 0,1,2,3,0,1,2,3,3,2,1,0,3,2,1,0;0,1,2,3,0,1,2,3
|
|
|
|
|
- copiar: db 0,1,2,3
|
|
|
|
|
- ;copiar: db 3,2,1,0,3,2,1,0,3,2,1,0,3,2,1,0
|
|
|
|
|
|
|
|
|
|
section .text
|
|
section .text
|
|
|
;void blur_asm (
|
|
;void blur_asm (
|
|
@@ -60,6 +57,7 @@ blur_asm:
|
|
|
mov rdi, radius
|
|
mov rdi, radius
|
|
|
call convulcion_matrix
|
|
call convulcion_matrix
|
|
|
mov matriz, rax
|
|
mov matriz, rax
|
|
|
|
|
+ mov r15, matriz ;copio puntero inicial
|
|
|
|
|
|
|
|
movdqu xmm0, [rsp]
|
|
movdqu xmm0, [rsp]
|
|
|
add rsp, 16
|
|
add rsp, 16
|
|
@@ -104,7 +102,7 @@ blur_asm:
|
|
|
inc filas_faltan ; 2r+1 filas
|
|
inc filas_faltan ; 2r+1 filas
|
|
|
mov tmp_src, src
|
|
mov tmp_src, src
|
|
|
pxor xmm10,xmm10
|
|
pxor xmm10,xmm10
|
|
|
- movdqu xmm11,[copiar]
|
|
|
|
|
|
|
+ mov matriz, r15
|
|
|
.loopInterno:
|
|
.loopInterno:
|
|
|
mov col_faltan, radius
|
|
mov col_faltan, radius
|
|
|
add col_faltan, radius
|
|
add col_faltan, radius
|
|
@@ -137,9 +135,7 @@ blur_asm:
|
|
|
pxor xmm6,xmm6
|
|
pxor xmm6,xmm6
|
|
|
pxor xmm7,xmm7
|
|
pxor xmm7,xmm7
|
|
|
pxor xmm8,xmm8
|
|
pxor xmm8,xmm8
|
|
|
- pxor xmm11,xmm11
|
|
|
|
|
|
|
|
|
|
- movdqa xmm12, xmm2 ;salvo
|
|
|
|
|
punpcklbw xmm3, xmm2 ;pix a,b
|
|
punpcklbw xmm3, xmm2 ;pix a,b
|
|
|
punpckhbw xmm4, xmm2 ;pix c,d
|
|
punpckhbw xmm4, xmm2 ;pix c,d
|
|
|
|
|
|
|
@@ -149,11 +145,14 @@ blur_asm:
|
|
|
punpckhwd xmm8, xmm4 ;pix d
|
|
punpckhwd xmm8, xmm4 ;pix d
|
|
|
|
|
|
|
|
;cargo 1 elem de matriz como single
|
|
;cargo 1 elem de matriz como single
|
|
|
- movd xmm9, [matriz]
|
|
|
|
|
- ;pshufb xmm9, xmm11;lo clono con mascara a los 4 elem del xmm
|
|
|
|
|
- pshufd xmm9, xmm9, 0x00
|
|
|
|
|
|
|
+ movdqu xmm9, [matriz] ;traje 4 float.
|
|
|
|
|
|
|
|
|
|
+ pshufd xmm11, xmm9, 0x00
|
|
|
|
|
+ pshufd xmm12, xmm9, 0x55
|
|
|
|
|
+ pshufd xmm13, xmm9, 0xAA
|
|
|
|
|
+ pshufd xmm14, xmm9, 0xFF
|
|
|
|
|
|
|
|
|
|
+ ;acomodo los registros
|
|
|
psrldq xmm5, 3
|
|
psrldq xmm5, 3
|
|
|
psrldq xmm6, 3
|
|
psrldq xmm6, 3
|
|
|
psrldq xmm7, 3
|
|
psrldq xmm7, 3
|
|
@@ -164,10 +163,10 @@ blur_asm:
|
|
|
CVTDQ2PS xmm7,xmm7
|
|
CVTDQ2PS xmm7,xmm7
|
|
|
CVTDQ2PS xmm8,xmm8
|
|
CVTDQ2PS xmm8,xmm8
|
|
|
;multiplico cada pixel por su coeficiente de la matriz(float)
|
|
;multiplico cada pixel por su coeficiente de la matriz(float)
|
|
|
- mulps xmm5, xmm9
|
|
|
|
|
- mulps xmm6, xmm9
|
|
|
|
|
- mulps xmm7, xmm9
|
|
|
|
|
- mulps xmm8, xmm9
|
|
|
|
|
|
|
+ mulps xmm5, xmm11
|
|
|
|
|
+ mulps xmm6, xmm12
|
|
|
|
|
+ mulps xmm7, xmm13
|
|
|
|
|
+ mulps xmm8, xmm14
|
|
|
|
|
|
|
|
;acumulo
|
|
;acumulo
|
|
|
addps xmm10, xmm5
|
|
addps xmm10, xmm5
|
|
@@ -187,7 +186,7 @@ blur_asm:
|
|
|
|
|
|
|
|
|
|
|
|
|
add src, PIXEL_SIZE*4 ; Incremento 4 pixeles
|
|
add src, PIXEL_SIZE*4 ; Incremento 4 pixeles
|
|
|
-
|
|
|
|
|
|
|
+ add matriz, PIXEL_SIZE*4
|
|
|
jmp .loopFila
|
|
jmp .loopFila
|
|
|
|
|
|
|
|
.retroceder:
|
|
.retroceder:
|