x86 调用者保存被调用者保存寄存器数量是否分配的不太合理

2019-01-30 14:42:33 +08:00
 doraos

刚看 CASPP,上面说 X86_64 _中被调用者保存%rbp %rbx, %r12~%r15 而剩下来的由调用者保存,被调用者保存那么少,调用者函数保存那么多,是否分配的有点不合理,应该更多的由被调用者来保存所需的寄存器吧.mips 就是这样的

2191 次点击
所在节点    问与答
4 条回复
misaka19000
2019-01-30 15:14:43 +08:00
这个不是应该由编译器分配的吗,似乎和 CPU 本身没什么关系?
GeruzoniAnsasu
2019-01-30 15:32:05 +08:00
首先 x86 跟 x86_64 不一样。。。x86_64 一般简写成 x64

然后 bp bx r12 r13 r14 r15
vs
ax cx dx di si sp r8 r9 r10 r11
。。是咋得出被调用者保存少的结论的
feather12315
2019-01-30 15:35:41 +08:00
@GeruzoniAnsasu #2,correct:x64 —> AMD64 / Intel 64 / x86_64。我的记忆中,并不会简写为 x64。
GeruzoniAnsasu
2019-01-30 15:59:00 +08:00
@feather12315 行 8,就当做 x86 扩展到 64 位的各种架构不统一必须叫自己的名字好了

想补充吐槽一下“保存”这个词
我猜原文说的是 preserve?
在 intel 的手册 38.3.2

> As with most systems, it is the responsibility of the callee to preserve all registers except that used for returning a
value.

应该译作“保护”,我 2#的意思说反了,lz 说的东西的原意应该是

“被调函数有义务保证 rbp rbx r12~r15 这几个寄存器的值在进出函数前后一致”

如果按照 lz 的疑问是“为什么被调 routine 可以随意修改这么多寄存器的值不需要负责任”来理解的话

……只能回复说,恩,官方其实是建议负责任的,但可能现行 ABI 制定者觉得没必要

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/531876

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX