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.

[参考译文] 编译器:意外的'SPM #0'指令插入

Guru**** 2589670 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/618652/compiler-unexpected-spm-0-instruction-insertion

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

大家好,

我们使用的是CL2000编译器版本6.4 6,并且注意到插入汇编器指令'PM #0'的原因不明且不一致。  当我们 在 C源代码中放置ASM ("SETC INTM")或ASM ("CLRC INTM")宏时,会发生这种情况。  在我们的代码中,附近没有正在进行的乘法运算或其他算术运算。  而且,这种情况也不一致。  我们的代码库中有一个位置,即ASM (“SETC INTM”)*不*导致'PM #0'。  我们正在执行编译器分析,这是我们严格的DO178C相关过程的一部分,即 在编译后仔细检查生成的汇编器,并需要证明这种无关但无害的指令添加的合理性。  我们的编译器标志,用于分析任务的设置为:

-v28 -g -O2 -mf -ss -D"_debug"-k -c --symdebug:none

非常感谢

Chris   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    PM字段是隐式位移量,用于某些指令。 编译器跟踪此字段的值,并在必要时进行设置。 为了尽量减少需要发出SPM指令的次数,它可以将SPM指令插入到涵盖PM字段多种用途的位置,该字段可能在词法上与该用法不接近。 现在,编译器不喜欢ASM()语句。 ASM()语句表示编译器未知的大值;它假定为最坏的情况,包括它包含一个SPM指令,将PM字段设置为不适当的值。 因此,如果在函数中使用了PM字段,即使ASM()语句没有真正接触PM值,编译器可能会觉得有义务在ASM()语句后插入SPM指令。

    如果在计算了由ASM()语句引起的未知语句后,您觉得编译器不必要地插入SPM,我们希望看到测试用例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您的回复。  我曾想过,这可能是编译器玩安全游戏的情况。