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.

[参考译文] 编译器/TMS320C6746:编译器在调用函数时如何保存 B3?

Guru**** 2979400 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/940037/compiler-tms320c6746-how-does-the-compiler-save-b3-when-calling-a-function

器件型号:TMS320C6746

工具/软件:TI C/C++编译器

CCS 版本为8.20

   在《TMS320C6000优化编译器 v8.2.x 用户指南》中、编译器在调用函数时如何保存 B3也有相同的信息。

我编写了一些 c 函数、并使用 CCS 在 C6748上进行调试。但结果让我感到困惑。

编译器将 B3保存为寄存器(例如、 A31/A30/B6)  而不是堆栈。


编译结果 与用户指南冲突的原因。 调用函数时 B3的保存规则是什么?

结果受编译器选项的影响? 还有其他一些特定的用户指南?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在某些情况下、除了在堆栈上保存 B3、还必须将其复制到另一个寄存器中。  我不确定这些条件是什么。  但我可以进行调查。  对于生成此汇编代码 的源文件、请按照文章如何提交编译器测试用例中的说明进行操作。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复。

    我们将开发自己的崩溃转储工具。

    我认为 B3的保存规则是非常重要的信息。

    这是编译器测试用例。

    编译器版本是

    TMS320C6x 链接器 PC v8.2.4

    e2e.ti.com/.../3465.main.pp.txt

    e2e.ti.com/.../Compiler-Options.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的测试案例。  我可以重现相同的结果。

    我对发生的情况有很好的了解。  但是、我还没有确认此帖子中的所有内容都是正确的。  我将带您回到这里。

    目前、假设一个名为父级的函数调用一个名为子级的函数。  如果子函数位于同一文件中、因此编译器知道哪些寄存器由子函数修改、则编译器可以将 B3复制到不由子函数修改的寄存器中、而不是将其保存到栈上的存储器位置。   

    在您发送的测试用例中、这是函数 add3调用函数 ADD2时发生的情况。  寄存器 B3不会保存到堆栈上的存储器位置。  相反、它被保存到 A1、这是一个不由函数 ADD2修改的寄存器。

    没有方法可以禁用编译器的此行为。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    编译器的这种行为是否是一种优化?

    我希望有一份明确的文件。

    否则。 我们将 分析机器代码以查找 B3寄存器的保存位置。

    我的天啊~

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我可以确认我上一个帖子中的解释正确。

    [引用 user="k Ω 杨旭]编译器的这种行为是否是一种优化?

    是的

    [杨旭用户="k Ω"]我希望有一个清晰的文档。

    不幸的是、不  我提交了条目 EXT_EP-10046以更正编译器手册。  欢迎您使用我签名中的以下链接进行操作。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。