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.

[参考译文] MSP-CGT:MSP430 C 编译器中的潜在优化

Guru**** 2808485 points

Other Parts Discussed in Thread: MSP-CGT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1607473/msp-cgt-potential-optimisation-in-msp430-c-compiler

器件型号: MSP-CGT

您好:

首先、很抱歉未将其放入 MSP 微控制器论坛中 — MSP-CGT 似乎位于下面(不正确?) 基于 Arm 的 MCU……...

我认为有机会对以下 C 片段进行小幅优化。 检查函数“boolean_test_func"(“(在(在寄存器 R12 中)的返回值后、生成的指令不需要在从“func"返回“返回之前清除 R12、因为这已被“boolean_test_func"清除“清除。

Bool func(...)

  ...
  如果(! Boolean_test_func())
  {
    返回 false;
  }
  ...
  返回 true;
}
 
从与上面的代码片段类似的代码生成指令:

        FUNC()
  ...
  0x0E066  12B0 E00E           调用    #boolean_test_func

  0x0E06A  934C                TST.B   R12
  0x0E06C  2416                JEQ     ($C$L46)
  ...
  0x0E096  435C                MOV.B   #1、R12
  0x0E098  4130                RET.      
        $C$L46
  0x0E09A  434C                CLR.B   R12
  0x0E09C  4130                回路      

生成的代码可能会完全省略最后两条指令、并跳转到前面的 RET 指令:

        FUNC()
  ...
  0x0E066  12B0 E00E           调用    #boolean_test_func

  0x0E06A  934C                TST.B   R12
  0x0E06C  2416                JEQ     ($C$L46)
  ...
  0x0E096  435C                MOV.B   #1、R12
        $C$L46
  0x0E098  4130                RET.      

节省了四个字节Slight smile

此致、

Michal

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

    您好、Michal、
    您似乎回答正确。 我将依靠我的团队、我们将评估何时可以添加提议的更改。

    此致、

    Diego Abad