标签: standards language-lawyer x86-64 abi
鉴于代码:
uint64_t f() { return 42; }
编译器为x86-64输出以下程序集:
movl $42, %eax ret
我引起了我的注意,因为返回值应该是64位,但编译器似乎认为可以安全地假设返回寄存器%rax和%rdi为零。我似乎无法在x86-64 ABI找到任何相关信息。有人能指出这种假设的基础吗?
%rax
%rdi
答案 0 :(得分:1)
设置EAX等,无论如何都会清除高32位。
EAX
找到参考...
实际上它应该作为this question的欺骗而关闭。