소스 검색

ya itera netero, sin que valgrind llore

David 11 년 전
부모
커밋
31fba72c30
1개의 변경된 파일28개의 추가작업 그리고 12개의 파일을 삭제
  1. 28 12
      filtros/blur_asm.asm

+ 28 - 12
filtros/blur_asm.asm

@@ -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