Clang - бесполезный толчок rax и поп rcx?
Сегодня, разбирая некоторые двоичные файлы, которые я построил ранее (clang x86_64), я наткнулся на что-то [на вид] бесполезное.
_baz: ## @baz
.cfi_startproc
## BB#0:
pushq %rax ; What?
Ltmp7:
.cfi_def_cfa_offset 16
leaq (%rsp), %rax
movq %rsi, (%rax)
xorl %edx, %edx
movq %rax, %rsi
callq _something
movq %rax, %rdi
callq _something_else
movl (%rax), %eax
popq %rcx ; What?
retq
.cfi_endproc
я вижу rax
сохраняется, а затем восстанавливается rcx
и я не вижу смысла делать это, так как rax
это пустой регистр (который, кажется, здесь не нужно сохранять) и rcx
(еще один пустой регистр, также для аргумента, переданного через 4-й регистр) здесь никогда не используется.