Просмотр исходного кода

Ahora se hace promedio del diff ASM. REVISAR por que puede haber errores de aproximacion.

Fabian 11 лет назад
Родитель
Сommit
08c8cdb9b0
2 измененных файлов с 9 добавлено и 0 удалено
  1. 1 0
      .gitignore
  2. 8 0
      filtros/diff_asm.asm

+ 1 - 0
.gitignore

@@ -4,3 +4,4 @@ img/
 *.swp
 *.swp
 tp2
 tp2
 build/*
 build/*
+.*

+ 8 - 0
filtros/diff_asm.asm

@@ -17,6 +17,7 @@ global diff_asm
 section .data
 section .data
     ; Mascara para realizar un shuffle para repetir los valores del diff
     ; Mascara para realizar un shuffle para repetir los valores del diff
 	SHUFFLE_MASK: db 2,2,2,255,3,3,3,255,0,0,0,255,1,1,1,255
 	SHUFFLE_MASK: db 2,2,2,255,3,3,3,255,0,0,0,255,1,1,1,255
+	DIVIDIR: dw 21,21,21,21,0,0,0,0
 
 
 section .text
 section .text
 ;void diff_asm    (
 ;void diff_asm    (
@@ -60,8 +61,15 @@ diff_asm:
 	punpckhbw xmm0, xmm2        ; Desempaqueto la parte alta => xmm0 = |B(P1)|G(P1)|R(P1)|A(P1)|B(P2)|G(P2)|R(P2)|A(P2)|
 	punpckhbw xmm0, xmm2        ; Desempaqueto la parte alta => xmm0 = |B(P1)|G(P1)|R(P1)|A(P1)|B(P2)|G(P2)|R(P2)|A(P2)|
 	punpcklbw xmm1, xmm2        ; Desempaqueto la parte baja => xmm1 = |B(P3)|G(P3)|R(P3)|A(P3)|B(P4)|G(P4)|R(P4)|A(P4)|
 	punpcklbw xmm1, xmm2        ; Desempaqueto la parte baja => xmm1 = |B(P3)|G(P3)|R(P3)|A(P3)|B(P4)|G(P4)|R(P4)|A(P4)|
 
 
+								; Sumo horizontalmente los pixeles:
 	phaddw xmm0, xmm1           ; xmm0 = |B(P1)+G(P1)|R(P1)+A(P1)|B(P2)+G(P2)|R(P2)+A(P2)|....|
 	phaddw xmm0, xmm1           ; xmm0 = |B(P1)+G(P1)|R(P1)+A(P1)|B(P2)+G(P2)|R(P2)+A(P2)|....|
 	phaddw xmm0, xmm2           ; xmm0 = |B+G+R+A (P1)| B+G+R+A(P2) | B+G+R+A(P3) | B+G+R+A(P4)| 0x0 | 0x0 | 0x0 | 0x0 |
 	phaddw xmm0, xmm2           ; xmm0 = |B+G+R+A (P1)| B+G+R+A(P2) | B+G+R+A(P3) | B+G+R+A(P4)| 0x0 | 0x0 | 0x0 | 0x0 |
+
+.dividir:
+	movdqu xmm3, [DIVIDIR]		; Cargo la mascara para dividir
+	pmullw xmm0, xmm3			; Multiplico y almaceno parte baja TODO: Demostrar que no puedo llegar a la parte alta
+	psrlw xmm0, 6				; Divido por 64
+
 	packuswb xmm0, xmm2         ; xmm0 = |P1|P2|P3|P4|0x0|0x0|0x0|0x0|0x0|....|
 	packuswb xmm0, xmm2         ; xmm0 = |P1|P2|P3|P4|0x0|0x0|0x0|0x0|0x0|....|
 
 
 	movdqu xmm2, [SHUFFLE_MASK] ; Cargo la mascara para shuffle
 	movdqu xmm2, [SHUFFLE_MASK] ; Cargo la mascara para shuffle