- 如果我编写一个返回 void 的函数,根据 x86-64 约定调用,我会破坏 rax/eax 吗?
- 关于返回 double 值的函数的类似问题(因为真正的返回将发生在 xmm0 中)
如果我执行 movq xmm0 -> rax.然后我得到一个可以放入的数字
union { int, double };
通过 int.然后当我读完 double 时,我得到了预期的 double 值。我的行为有哪些陷阱?
最佳答案
rax
是暂存寄存器,并且 double
属于 SSE 类,因此它在 xmm0
中返回/xmm1
。这些记录在 SysV ABI 中。没有什么可以阻止您使用 xmm0
在将返回值放入其中之前作为草稿。 x86 tag wiki 中有指向 ABI 文档的链接。 .
要回答#3,我们需要查看您的代码。也许是 C++ 中的 UB,或者您的汇编是错误的。
关于c++ - x86-64 调用约定中的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40741395/