[gcc][gas][x64] movq ... %rax ; movq %rax, %rdi ; call ...
Добрый вечер. Кто-нибудь вкурсе почему gcc перекладывает первый аргумент функциям в %rdi не напрямую, а всегда через %rax? Я ABI читал и перечитывал, но может где недоглядел. Это просто неоптимальность или всё-таки в этом есть какой-то смысл?
fopen(...); ...
getc(...); ...
fclose(...);
movq -24(%rbp), %rax
movq %rdx, %rsi
movq %rax, %rdi
call fopen
...
movq -16(%rbp), %rax
movq %rax, %rdi
call _IO_getc
...
movq -16(%rbp), %rax
movq %rax, %rdi
call fclose