David 11 rokov pred
rodič
commit
cdb3abefc3
1 zmenil súbory, kde vykonal 31 pridanie a 9 odobranie
  1. 31 9
      filtros/blur_asm.asm

+ 31 - 9
filtros/blur_asm.asm

@@ -5,8 +5,8 @@ global blur_asm
 ; Alias para no volverme loco con los registros
 %define src 	rdi
 %define dst 	rsi
-%define filas 	rdx
-%define cols 	rcx
+%define cols 	rdx
+%define filas 	rcx
 %define sigma 	xmm0
 %define radius 	r8
 
@@ -30,8 +30,11 @@ blur_asm:
     push rbp
     mov rbp, rsp                ; Stack frame
 	push r9
+	push r10
+	push r11
 
 .init:
+	mov r9, rdx					;salvo rdx por los mul
 	mov rax, PIXEL_SIZE
 	mul cols
 	mul radius 
@@ -39,17 +42,21 @@ blur_asm:
 	add src, rax				; Avanzo el radius filas (col*pix_size)
 	add dst, rax				; idem
 
-;	lea src, [rax+PIXEL_SIZE*cols*radius]
-
 	mov rax, PIXEL_SIZE
-	mul radius					;rax ahora es pix_size*radius
+	mul radius					;rax ahora es radius pixeles
+
 	add src, rax				;avanzo radius pixeles (borde)
 	add dst, rax				;idem
 
-	sub filas, rax				;acomodo filas para ignorar los bordes
-	sub filas, rax				;acomodo filas para ignorar los bordes
-	sub cols, rax				;acomodo cols para ignorar los bordes
+	mov cols, r9				;recupero cols  por el mul
+	sub filas, radius			;acomodo filas para ignorar los bordes
+	sub filas, radius			;acomodo filas para ignorar los bordes
+
 	sub cols, rax				;acomodo cols para ignorar los bordes
+
+	mov rax,PIXEL_SIZE 
+	mul cols
+	mov cols, rax 				;cols:=cols*pix_size
 	xor r9,r9
 	xor r10,r10
 .loop:
@@ -61,7 +68,6 @@ blur_asm:
 .write:
     movdqu [dst], xmm0          ; Escribo en el destino
 .endLoop:
-    ; TODO: Si el tamaño de la imagen no es multiplo de 4 acá va a sumar y hacer invalid read al llegar al final
     add src, PIXEL_SIZE * 4     ; Incremento 4 pixeles
     add dst, PIXEL_SIZE * 4
     add r9, PIXEL_SIZE * 4
@@ -71,9 +77,25 @@ blur_asm:
 	inc r10 
 	cmp r10,filas
 	jge .fin
+
+	xor r9,r9
+
+	mov r11, rdx				;salvo rdx
+	mov rax, PIXEL_SIZE
+	mul radius					;rax ahora es radius pixeles
+
+	add src, rax				;agrego radius a la columna inicial
+	add src, rax				;agrego radius a la columna inicial
+	add dst, rax
+	add dst, rax
+
+	mov rdx, r11				;recupero rdx
+
 	jmp .loop
 
 .fin:
+	pop r11
 	pop r10
+	pop r9
     pop rbp
     ret