Funkcja: push ebp mov ebp, esp mov ecx, [iloscElementow] lea edx, [adresTablicy] mov eax, [wartoscProgowa] Loop1: ; początek pętli cmp eax, [edx+4*ecx-4] ; if-else ja ElseBranch ... ; pierwsza gałąź jmp EndIf ElseBranch: .... ; druga gałąź EndIf: sub ecx, 1 ; epilog pętli jnz Loop1 mov esp, ebp ; epilog funkcji pop ebp ret
Przez powielenie epilogu pętli mozemy wyeliminować skok do EndIf
Funkcja: push ebp mov ebp, esp mov ecx, [iloscElementow] lea edx, [adresTablicy] mov eax, [wartoscProgowa] Loop1: ; początek pętli cmp eax, [edx+4*ecx-4] ; if-else ja ElseBranch ... ; pierwsza gałąź sub ecx, 1 ; epilog pętli 1 jnz Loop1 jmp EndLoop ElseBranch: .... ; druga gałąź sub ecx, 1 ; epilog pętli 2 jnz Loop1 EndLoop: mov esp, ebp ; epilog funkcji pop ebp ret
Przez powielenie epilogu funkcji mozemy wyeliminować skok do EndLoop (tutaj zysk prędkości jest już niewielki).
Funkcja: push ebp mov ebp, esp mov ecx, [iloscElementow] lea edx, [adresTablicy] mov eax, [wartoscProgowa] Loop1: ; początek pętli cmp eax, [edx+4*ecx-4] ; if-else ja ElseBranch ... ; pierwsza gałąź sub ecx, 1 ; epilog pętli 1 jnz Loop1 mov esp, ebp ; epilog funkcji 1 pop ebp ret ElseBranch: .... ; druga gałąź sub ecx, 1 ; epilog pętli 2 jnz Loop1 mov esp, ebp ; epilog funkcji 2 pop ebp ret