x86-64 调用约定假定 return 寄存器已清零?

x86-64 calling convention assumes return registers are zeroed?

给定代码:

uint64_t f() { return 42; }

编译器为 x86-64 输出以下程序集:

movl , %eax
ret

我很惊讶,因为 return 值应该是 64 位的,但是编译器似乎认为假设 return 寄存器 %rax 是安全的%rdi 为零。我似乎无法在 x86-64 ABI 中找到与此相关的任何信息。有人可以指出这个假设的基础吗?

设置EAX等,无论如何都会清除高32位。

正在查找参考...

实际上它应该作为 this question 的骗局而关闭。