刚看 CASPP,上面说 X86_64 _中被调用者保存%rbp %rbx, %r12~%r15 而剩下来的由调用者保存,被调用者保存那么少,调用者函数保存那么多,是否分配的有点不合理,应该更多的由被调用者来保存所需的寄存器吧.mips 就是这样的
1
misaka19000 2019-01-30 15:14:43 +08:00 via Android 1
这个不是应该由编译器分配的吗,似乎和 CPU 本身没什么关系?
|
2
GeruzoniAnsasu 2019-01-30 15:32:05 +08:00 1
首先 x86 跟 x86_64 不一样。。。x86_64 一般简写成 x64
然后 bp bx r12 r13 r14 r15 vs ax cx dx di si sp r8 r9 r10 r11 。。是咋得出被调用者保存少的结论的 |
3
feather12315 2019-01-30 15:35:41 +08:00 via Android 1
@GeruzoniAnsasu #2,correct:x64 —> AMD64 / Intel 64 / x86_64。我的记忆中,并不会简写为 x64。
|
4
GeruzoniAnsasu 2019-01-30 15:59:00 +08:00 1
@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 制定者觉得没必要 |