|
|
@@ -15,7 +15,7 @@ extern convulcion_matrix
|
|
|
%define filas_faltan r11
|
|
|
%define col_faltan r12
|
|
|
%define basura r13
|
|
|
-
|
|
|
+%define tmp_src rbp
|
|
|
; Algunos defines ultiles
|
|
|
%define PIXEL_SIZE 4
|
|
|
|
|
|
@@ -43,6 +43,7 @@ blur_asm:
|
|
|
push r14
|
|
|
push r15
|
|
|
.init:
|
|
|
+ mov filas, rcx ;filas
|
|
|
|
|
|
push src
|
|
|
push dst
|
|
|
@@ -55,6 +56,7 @@ blur_asm:
|
|
|
|
|
|
mov rdi, radius
|
|
|
call convulcion_matrix
|
|
|
+ mov matriz, rax
|
|
|
|
|
|
movdqu xmm0, [rsp]
|
|
|
add rsp, 16
|
|
|
@@ -65,7 +67,7 @@ blur_asm:
|
|
|
pop dst
|
|
|
pop src
|
|
|
|
|
|
- mov r14,rcx ;guardo rcx para loop
|
|
|
+ ;mov r14,rcx ;guardo rcx para loop
|
|
|
mov r9, rdx ;salvo rdx por los mul
|
|
|
mov rax, PIXEL_SIZE
|
|
|
mul cols
|
|
|
@@ -94,21 +96,27 @@ blur_asm:
|
|
|
.loop:
|
|
|
cmp cols, cont_c ; Comparo tamaño con el contador
|
|
|
je .finFila ; Si ya recorri la imagen voy al final
|
|
|
- mov filas_faltan, radius;FIXME este radius es pixeles no bytes
|
|
|
+ mov filas_faltan, radius
|
|
|
add filas_faltan, radius
|
|
|
- add filas_faltan, PIXEL_SIZE ; 2r+1 filas
|
|
|
+ inc filas_faltan ; 2r+1 filas
|
|
|
+ mov tmp_src, src
|
|
|
.loopInterno:
|
|
|
mov col_faltan, radius
|
|
|
add col_faltan, radius
|
|
|
- add col_faltan, PIXEL_SIZE ; 2r+1 columnas
|
|
|
+ inc col_faltan ; 2r+1 columnas
|
|
|
+ mov basura, rdx
|
|
|
+ mov rax,PIXEL_SIZE
|
|
|
+ mul col_faltan ;destruyo rdx
|
|
|
+ mov col_faltan, rax
|
|
|
+ mov rdx, basura ;salvo rdx
|
|
|
.loopFila:
|
|
|
|
|
|
;levanto 4px
|
|
|
movdqu xmm2, [src] ; Cargo 4 pix de la imagen 1 => xmm0 = |B(P1)|G(P1)|R(P1)|A(P1)|B(P2)|G(P2)|......|
|
|
|
cmp col_faltan, 3
|
|
|
- jg .normal
|
|
|
- je .tres
|
|
|
- jl .uno
|
|
|
+ jg .normal ;no qiuero shiftear
|
|
|
+ je .tres ;quiero borrar 3 elem
|
|
|
+ ;quiero borrar 1 elem
|
|
|
|
|
|
.uno:
|
|
|
;shift (4-faltantes) bytes
|
|
|
@@ -145,12 +153,19 @@ blur_asm:
|
|
|
|
|
|
;actualizo cuantos faltan
|
|
|
sub col_faltan, 4*PIXEL_SIZE
|
|
|
- cmp col_faltan, 4
|
|
|
- jg .loopFila
|
|
|
+
|
|
|
cmp col_faltan, 0
|
|
|
jle .finFilaInterna
|
|
|
|
|
|
- ;me faltan entre 0 y 4 pixeles, retrocedo suficiente para que me falten 4 exactos
|
|
|
+ cmp col_faltan, 4
|
|
|
+ jle .retroceder ;me faltan entre 0 y 4 pixeles, retrocedo suficiente para que me falten 4 exactos
|
|
|
+
|
|
|
+
|
|
|
+ add src, PIXEL_SIZE*4 ; Incremento 4 pixeles
|
|
|
+
|
|
|
+ jmp .loopFila
|
|
|
+
|
|
|
+ .retroceder:
|
|
|
lea src, [src-(4-col_faltan)]
|
|
|
jmp .loopFila
|
|
|
|
|
|
@@ -168,7 +183,8 @@ blur_asm:
|
|
|
.write:
|
|
|
movdqu [dst], xmm10 ; Escribo en el destino
|
|
|
.endLoop:
|
|
|
- add src, PIXEL_SIZE ; Incremento 4 pixeles
|
|
|
+ mov src, tmp_src
|
|
|
+ add src, PIXEL_SIZE ; Incremento 1 pixel
|
|
|
add dst, PIXEL_SIZE
|
|
|
add cont_c, PIXEL_SIZE
|
|
|
jmp .loop
|