Я скомпилировал следующую программу:
#include <stdint.h>
uint64_t usquare(uint32_t x) {
return (uint64_t)x * (uint64_t)x;
}
Это разборки:
0: 89 f8 mov eax,edi
2: 48 0f af c0 imul rax,rax
6: c3 ret
Но imul
- это команда для умножения подписанных чисел. Почему он используется gcc
тогда?
/edit: при использовании uint64_t
сборка аналогична:
0: 48 0f af ff imul rdi,rdi
4: 48 89 f8 mov rax,rdi
7: c3 ret