فهرست منبع

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

Fabian 11 سال پیش
والد
کامیت
08c8cdb9b0
2فایلهای تغییر یافته به همراه9 افزوده شده و 0 حذف شده
  1. 1 0
      .gitignore
  2. 8 0
      filtros/diff_asm.asm

+ 1 - 0
.gitignore

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

+ 8 - 0
filtros/diff_asm.asm

@@ -17,6 +17,7 @@ global diff_asm
 section .data
     ; 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
+	DIVIDIR: dw 21,21,21,21,0,0,0,0
 
 section .text
 ;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)|
 	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, 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|....|
 
 	movdqu xmm2, [SHUFFLE_MASK] ; Cargo la mascara para shuffle