Witam
Chciałem przyspieszyc troche program i dodałem wstawki asemblerowe nie znam się na tym zabardzo. I o dziwo zwolniło ;) coś poknociłem albo gdzieś coś trzeba jeszcze ustawić by było szybciej - jak możecie to pomóżcie. Tu jest fragemt kodu.
ASM
<i> DWORD rgba[4] = {124,54,12,255};
DWORD tab[4];
__asm
{
mov edi, p
mov esi, 8
mov eax, rgba
mov ebx, [rgba + 4]
mov ecx, [rgba + 8]
mov edx, [rgba + 12]
imul eax, edi
imul ebx, edi
imul ecx, edi
imul edx, edi
shr eax, 8
shr ebx, 8
shr ecx, 8
shr edx, 8
mov tab, eax
mov [tab + 4], ebx
mov [tab + 8], ecx
mov [tab + 12], edx
};</i>
i ten sam szybszy kod w c++
DWORD rgba[4] = {124,54,12,255};
DWORD tab[4];
tab[ 0 ] = MUL2( rgba[ 0 ], p );
tab[ 1 ] = MUL2( rgba[ 1 ], p );
tab[ 2 ] = MUL2( rgba[ 2 ], p );
tab[ 3 ] = MUL2( rgba[ 3 ], p );
gdzie MUL2 to makro
#define MUL2(a,b) (((a)*(b))>>8)
Poza tym kodem jest dosyć duża pętla - znacyz kod jest troche skrócony by było łatwiej załapać. Tak wygląda w programie testowym bo coś mi nie grało wiec wyciołem sobie i odnawia tą pętle kilka tysięcy razy.