工具/软件:TI C/C++编译器
CCS 版本为8.20
在《TMS320C6000优化编译器 v8.2.x 用户指南》中、编译器在调用函数时如何保存 B3也有相同的信息。
我编写了一些 c 函数、并使用 CCS 在 C6748上进行调试。但结果让我感到困惑。
编译器将 B3保存为寄存器(例如、 A31/A30/B6) 而不是堆栈。
编译结果 与用户指南冲突的原因。 调用函数时 B3的保存规则是什么?
结果受编译器选项的影响? 还有其他一些特定的用户指南?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
CCS 版本为8.20
在《TMS320C6000优化编译器 v8.2.x 用户指南》中、编译器在调用函数时如何保存 B3也有相同的信息。
我编写了一些 c 函数、并使用 CCS 在 C6748上进行调试。但结果让我感到困惑。
编译器将 B3保存为寄存器(例如、 A31/A30/B6) 而不是堆栈。
编译结果 与用户指南冲突的原因。 调用函数时 B3的保存规则是什么?
结果受编译器选项的影响? 还有其他一些特定的用户指南?
感谢您的回复。
我们将开发自己的崩溃转储工具。
我认为 B3的保存规则是非常重要的信息。
这是编译器测试用例。
编译器版本是
TMS320C6x 链接器 PC v8.2.4
感谢您的测试案例。 我可以重现相同的结果。
我对发生的情况有很好的了解。 但是、我还没有确认此帖子中的所有内容都是正确的。 我将带您回到这里。
目前、假设一个名为父级的函数调用一个名为子级的函数。 如果子函数位于同一文件中、因此编译器知道哪些寄存器由子函数修改、则编译器可以将 B3复制到不由子函数修改的寄存器中、而不是将其保存到栈上的存储器位置。
在您发送的测试用例中、这是函数 add3调用函数 ADD2时发生的情况。 寄存器 B3不会保存到堆栈上的存储器位置。 相反、它被保存到 A1、这是一个不由函数 ADD2修改的寄存器。
没有方法可以禁用编译器的此行为。
谢谢、此致、
乔治