我正在阅读Computer Systems: A Programmer's Perspective,作业是描述该算法的工作原理。
C函数:
void store_prod(__int128 *dest, int64_t x, int64_t y) {
*dest = x * (__int128)y;
}
集会:
movq %rdx, %rax
cqto
movq %rsi, %rcx
sarq $63, %rcx
imulq %rax, %rcx
imulq %rsi, %rdx
addq %rdx, %rcx
mulq %rsi
addq %rcx, %rdx
movq %rax, (%rdi)
movq %rdx, 8(%rdi)
ret
我不知道它为什么会执行:xh * yl + yh * xl = value which we add after unsigned multiplication