Warum gibt GCC hier eine andere Assembly aus, nachdem er volatile angegeben hat (keine Flags/Optimierung)?C++

Programme in C++. Entwicklerforum
Anonymous
 Warum gibt GCC hier eine andere Assembly aus, nachdem er volatile angegeben hat (keine Flags/Optimierung)?

Post by Anonymous »

Mit Godbolt unter Verwendung von x86-64 gcc 15.1 mit -O1, der folgende Code:

Code: Select all

int i = 2;

int main(int argc, char** argv)
{
while(i != 0) ;
}
erzeugt

Code: Select all

main:
mov     eax, DWORD PTR i[rip]
.L2:
test    eax, eax
jne     .L2
ret
i:
.long   2
Ich habe es nur einmal gelesen. Macht mich volatil,

Code: Select all

volatile int i = 2;

int main(int argc, char** argv)
{
while(i != 0) ;
}
erzeugt

Code: Select all

main:
.L2:
mov     eax, DWORD PTR i[rip]
test    eax, eax
jne     .L2
ret
i:
.long   2
es wird bei jeder Schleifeniteration statt nur einmal gelesen. Bisher gut. Aber es werden weder O1 noch andere Argumente übergeben, das ursprüngliche Beispiel

Code: Select all

int i = 2;

int main(int argc, char** argv)
{
while(i != 0) ;
}
liest weiterhin i jede Iteration der generierten Schleife.

Code: Select all

i:
.long   2
main:
push    rbp
mov     rbp, rsp
mov     DWORD PTR [rbp-4], edi
mov     QWORD PTR [rbp-16], rsi
nop
.L2:
mov     eax, DWORD PTR i[rip]
test    eax, eax
jne     .L2
mov     eax, 0
pop     rbp
ret
Das Seltsame ist, dass ich wieder volatil werde mit

Code: Select all

volatile int i = 2;

int main(int argc, char** argv)
{
while(i != 0) ;
}
gcc gibt jetzt neue Anweisungen setne al und test al, alnach test eax, eax
aus

Code: Select all

i:
.long   2
main:
push    rbp
mov     rbp, rsp
mov     DWORD PTR [rbp-4], edi
mov     QWORD PTR [rbp-16], rsi
nop
.L2:
mov     eax, DWORD PTR i[rip]
test    eax, eax
setne   al
test    al, al
jne     .L2
mov     eax, 0
pop     rbp
ret
Warum macht gcc das? Erfüllt die im nichtflüchtigen/nicht optimierten Beispiel generierte vorhandene Assembly nicht bereits die Anforderungen flüchtiger Variablen? Was ändert sich durch das Hinzufügen dieser Anweisungen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post