Arm IT LT指令的奇怪结果

时间:2014-03-27 14:54:59

标签: c arm stm32 cortex-m3 iar

我在生成的汇编列表中有以下C代码:

//  359     // File must contain at least the Base64 SHA-1/HMAC
//  360     if (m_fileLength < AsciiSignatureLength)
        LDR      R0,[R6, #+8]
        CMP      R0,#+40
        IT       LT 
//  361     {
//  362         retVal = InvalidCrc;
        MOVLT    R5,#+2
        BLT.N    ??readSignatureNC_2
//  363     }

这是在ARM Cortex M3(STM32f1xx)和具有高优化设置的IAR编译器上运行的。进入此函数时,m_fileLength的值为55,AsciiSignatureLength为const 40。 根据调试器,R0正确获取值55. CMP正确设置APSR寄存器标志,但由于某种原因,当IT LT命令执行时,它会转储到“then子句”中,导致retval等于InvalidCRC。

在没有优化的情况下编译时,这个相同的c代码会生成一个cmp,后跟一个完全按预期工作的BNEQ程序集。

我已经四处寻找与stm32中的IT LT命令有关的时代,并且没有找到任何东西,看起来IAR编译器似乎没有为给定的c代码生成“坏”程序集,除非我在这里误解了一些内容。 谢谢,乔希

0 个答案:

没有答案