x86-64调用约定假设返回寄存器为零?

时间:2016-05-26 10:42:14

标签: standards language-lawyer x86-64 abi

鉴于代码:

uint64_t f() { return 42; }

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

movl $42, %eax
ret

我引起了我的注意,因为返回值应该是64位,但编译器似乎认为可以安全地假设返回寄存器%rax%rdi为零。我似乎无法在x86-64 ABI找到任何相关信息。有人能指出这种假设的基础吗?

1 个答案:

答案 0 :(得分:1)

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

找到参考...

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

相关问题