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-й регистр) здесь никогда не используется.

0 ответов

Другие вопросы по тегам