среда, 4 февраля 2009 г.

full optimisation

вот полная оптимизация в msvs 2003
это cl /Ox


{
pos += 1;
00680717 add eax,1
0068071A mov dword ptr [esi],eax
len = 1;
0068071C mov dword ptr [edi],1
// сосчитаем символы до закрывающей кавычки или конца строки
//while (!strchr("\"",string[pos+len] )&&(string[pos+len]!= '\0'))
// while(!memchr("\"\0", string[pos + len], 2) // интересно, как быстрее?
while(string[pos + len] && (string[pos + len] != '"'))
00680722 mov eax,dword ptr [ebx]
00680724 mov ecx,dword ptr [esi]
00680726 cmp byte ptr [ecx+eax+1],0
0068072B je $L92588+36h (68074Dh)
0068072D lea ecx,[ecx]
00680730 mov ecx,dword ptr [edi]
00680732 mov edx,dword ptr [esi]
00680734 add edx,ecx
00680736 cmp byte ptr [edx+eax],22h < --------o
0068073A je $L92588+36h (68074Dh) \
len++; \
0068073C add ecx,1 \
0068073F mov dword ptr [edi],ecx один и тот же адрес
00680741 mov ecx,dword ptr [esi] /
00680743 add ecx,dword ptr [edi] /
00680745 mov eax,dword ptr [ebx] ; eax не менялся /
00680747 cmp byte ptr [ecx+eax],0 < -------- o
0068074B jne $L92588+19h (680730h)
0068074D pop edi
0068074E pop esi
return TOKEN_WORD;
0068074F xor eax,eax
00680751 pop ebx
}
};//End case
}
00680752 ret 8



Она очень умная но не складывать string[pos + len] второй раз не додумалась.

Также, что такое lea ecx, [ecx] o_O
EDIT Я понял! Это выравнивание.

Комментариев нет:

Отправить комментарий