.calc_value: ; Proceso 2 pixeles al mismo tiempo, por que ya no estoy limitado a solo 4 floats por registro. ; MUL_S (Float) y MUL(Word) son las mismas elegidas para realizar la multiplicacion y luego el shifteo. ; MUL_S sirve para multiplicar el valor de merge antes de convertirlo a entero, asi no se pierde presicion. ; MUL sirve para multiplicar cada componente de los dos pixeles que se procesan pxor xmm15, xmm15 movups xmm14, [shiftf] ; xmm14 = |MUL_S|MUL_S|MUL_S|MUL_S| mulps xmm0, xmm14 ; |0|0|0|VALUE*MUL_S| cvttps2dq xmm0, xmm0 ; Lo paso a entero pshuflw xmm15, xmm0, MASK_REPEAT ; xmm15 = |00|00|00|00|VALUE*MUL_S|VALUE*MUL_S|VALUE*MUL_S|VALUE*MUL_S| movdqa xmm13, xmm15 ; xmm13 = xmm15 pslldq xmm15, MASK_MV_W_L2H ; xmm15 = |VALUE*MUL_S|VALUE*MUL_S|VALUE*MUL_S|VALUE*MUL_S|00|00|00|00| paddw xmm15, xmm13 ; xmm15 = |VAL*S|VAL*S|VAL*S|VAL*S|VAL*S|VAL*S|VAL*S|VAL*S| movdqu xmm14, [shift] ; xmm14 = |MUL|MUL|MUL|MUL|MUL|MUL|MUL|MUL| psubw xmm14, xmm15 ; xmm14 = |MUL-(VALUE*MUL_S)|...... ; Ahora cuando calcule el value tengo que "dividir" por MUL, realizando un shift