|
|
@@ -1,6 +1,8 @@
|
|
|
default rel global _blur_asm
|
|
|
global blur_asm
|
|
|
|
|
|
+extern convulcion_matriz
|
|
|
+
|
|
|
; Alias para no volverme loco con los registros
|
|
|
%define src rdi
|
|
|
%define dst rsi
|
|
|
@@ -8,6 +10,8 @@ global blur_asm
|
|
|
%define filas rcx
|
|
|
%define sigma xmm0
|
|
|
%define radius r8
|
|
|
+%define cont_c r9
|
|
|
+%define matriz r10
|
|
|
|
|
|
; Algunos defines ultiles
|
|
|
%define PIXEL_SIZE 4
|
|
|
@@ -30,7 +34,6 @@ blur_asm:
|
|
|
mov rbp, rsp ; Stack frame
|
|
|
push r9
|
|
|
push r10
|
|
|
- push r11
|
|
|
|
|
|
.init:
|
|
|
mov r9, rdx ;salvo rdx por los mul
|
|
|
@@ -52,15 +55,13 @@ blur_asm:
|
|
|
mul cols
|
|
|
mov cols, rax ;cols:=cols*pix_size
|
|
|
|
|
|
- xor r10,r10
|
|
|
-
|
|
|
.iniciarFila:
|
|
|
lea src, [src+PIXEL_SIZE*radius] ;avanzo radius pixeles (borde)
|
|
|
lea dst, [dst+PIXEL_SIZE*radius] ;avanzo radius pixeles (borde)
|
|
|
- xor r9,r9
|
|
|
+ xor cont_c,cont_c
|
|
|
|
|
|
.loop:
|
|
|
- cmp cols, r9 ; Comparo tamaño con el contador
|
|
|
+ cmp cols, cont_c ; Comparo tamaño con el contador
|
|
|
je .finFila ; Si ya recorri la imagen voy al final
|
|
|
;movdqu xmm0, [src] ; Cargo la imagen 1 => xmm0 = |B(P1)|G(P1)|R(P1)|A(P1)|B(P2)|G(P2)|......|
|
|
|
pxor xmm0,xmm0
|
|
|
@@ -70,13 +71,13 @@ blur_asm:
|
|
|
.endLoop:
|
|
|
add src, PIXEL_SIZE ; Incremento 4 pixeles
|
|
|
add dst, PIXEL_SIZE
|
|
|
- add r9, PIXEL_SIZE
|
|
|
+ add cont_c, PIXEL_SIZE
|
|
|
jmp .loop
|
|
|
|
|
|
.finFila:
|
|
|
- inc r10
|
|
|
- cmp r10,filas
|
|
|
- jge .fin
|
|
|
+ dec filas
|
|
|
+ cmp filas, qword 0
|
|
|
+ je .fin
|
|
|
|
|
|
lea src, [src+PIXEL_SIZE*radius] ;agrego radius a la columna (termino la fila)
|
|
|
lea dst, [dst+PIXEL_SIZE*radius]
|
|
|
@@ -84,7 +85,6 @@ blur_asm:
|
|
|
jmp .iniciarFila
|
|
|
|
|
|
.fin:
|
|
|
- pop r11
|
|
|
pop r10
|
|
|
pop r9
|
|
|
pop rbp
|