Witam
Mam taki problem który wyszedł przy jakimś innym błedzie że kompilator
kompiluje petle for(i=0,i<1024;i++) na kod w ktorym wyjście z pętli jest określone na zasadzie i != 1024.
Czy bez wyłączenia optymalizacji kodu ( czego nie chciałbym robić) da sie jakos to obejść ?
Czy da sie jakoś lokalnie wyłączyć optymalizacje ?
rozne wersje zapisu tej samej petli :
for (i = 0; i < 1024; i++) {;}
for (i = 0; i < 1024) {i++;}
dawaly ten sam kod wyjscia z petli
w r8,r9 licznik petli,
wyjscie przez zapis wiekszej wartosci do i ( i= 0xfff0) kompilator zrealizował jako skok do etykiety .L133.
Mam taki problem który wyszedł przy jakimś innym błedzie że kompilator
kompiluje petle for(i=0,i<1024;i++) na kod w ktorym wyjście z pętli jest określone na zasadzie i != 1024.
Czy bez wyłączenia optymalizacji kodu ( czego nie chciałbym robić) da sie jakos to obejść ?
Czy da sie jakoś lokalnie wyłączyć optymalizacje ?
unsigned int i = 0; //wczesniej gdzies nbylo
for (i = 0; i <= 1023; )
{
//tu cos tam robilo
if (blad)
{ i = 0xfff0;}
i++;
}
rozne wersje zapisu tej samej petli :
for (i = 0; i < 1024; i++) {;}
for (i = 0; i < 1024) {i++;}
dawaly ten sam kod wyjscia z petli
Cytat:
1692 .L134:
1693 0a92 0894 sec
1694 0a94 811C adc r8,__zero_reg__
1695 0a96 911C adc r9,__zero_reg__
1696 .LBE25:
1697 .LM239:
1698 0a98 F0E0 ldi r31,lo8(1024)
1699 0a9a 8F16 cp r8,r31
1700 0a9c F4E0 ldi r31,hi8(1024)
1701 0a9e 9F06 cpc r9,r31
1702 0aa0 01F0 breq .+2
1703 0aa2 00C0 rjmp .L125
1704 .L133:
w r8,r9 licznik petli,
wyjscie przez zapis wiekszej wartosci do i ( i= 0xfff0) kompilator zrealizował jako skok do etykiety .L133.