Alternar um bit específico

Então eu vi as perguntas comotoggle um pouco no i-ésimo posicionamento eComo você define, limpa e alterna um único bit?, mas eu queria saber se havia uma boa maneira de alternar um pouco na i-ésima posição na montagem x86-6

Tentei escrever em C e examinar a montagem e não entendo exatamente por que existem algumas coisa

C:

unsigned long toggle(unsigned long num, unsigned long bit)
{
  num ^= 1 << bit;
  return num;
}

int main()
{
  printf("%ld\n", toggle(100, 60));
  return 0;
}

Montagem da função de alternância do GDB:

<toggle>
push rbp
mov rbp, rsp
mov QWORD PTR [rbp-0x8],rdi
mov QWORD PTR [rbp-0x10],rsi
mov rax, QWORD PTR [rbp-0x10]
mov edx, 0x1
mov ecx, eax
shl edx, cl
mov eax, edx
cdqe
xor QWORD PTR [rbp-0x8],rax
mov rax, QWORD PTR [rbp-0x8]
pop rbp
ret

Alguém pode me orientar sobre o que está acontecendo no nível da montagem para que eu possa entender melhor isso e escrever minha própria função de alternância em x86-6

questionAnswers(1)

yourAnswerToTheQuestion