Die Vorteile der Verwendung von 32-Bit-Registern / -Anweisungen in x86-64

Manchmal verwendet gcc ein 32-Bit-Register, wenn ich davon ausgehen würde, dass es ein 64-Bit-Register verwendet. Zum Beispiel der folgende C-Code:

unsigned long long 
div(unsigned long long a, unsigned long long b){
    return a/b;
}

wird mit der Option -O2 kompiliert, um (ohne Boilerplate):

div:
    movq    %rdi, %rax
    xorl    %edx, %edx
    divq    %rsi
    ret

Für die vorzeichenlose Division ist das Register%rdx muss sein0. Dies kann erreicht werden mitxorq %rdx, %rdx, aberxorl %edx, %edx scheint den gleichen Effekt zu haben.

Zumindest auf meinem Computer gab es keine Leistungssteigerung (d. H. Beschleunigung) fürxorl Überxorq.

Ich habe eigentlich mehr als nur eine Frage:

Warum bevorzugt gcc die 32-Bit-Version?Warum hört gcc bei @ axorl und benutzt keinxorw? Gibt es Maschinen für diexorl ist schneller alsxorq? Sollte man 32-Bit-Register / -Operationen immer vorziehen, wenn dies möglich ist, anstatt 64-Bit-Register / -Operationen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage