Thumb2汇编中优化有符号整数比较赋值逻辑的技术问询
Thumb2汇编优化:有符号整数比较后设置r1为-1或0
针对需求:当有符号整数r0 < r1时将r1设为0xffffffff(-1),否则设为0,以下是比现有实现更高效的优化方案:
优化方案1(代码空间+执行周期最优)
cmp r0, r1 ; 比较r0和r1,设置标志位 mvnlt r1, #0 ; 当r0 < r1(有符号lt条件满足)时,r1 = ~0 = 0xffffffff movge r1, #0 ; 否则r1 = 0
- 代码字节数:8字节(原实现为10字节)
- 指令数量:3条(原实现为4条)
- 原理:
mvnlt是Thumb2的32位条件执行取反指令,直接在满足lt条件时生成全1值,无需额外的ite前缀指令,减少了指令开销。
优化方案2(逻辑直观)
cmp r0, r1 ; 比较r0和r1,设置标志位 mov r1, #0 ; 先将r1初始化为0 addlt r1, r1, #-1 ; 当r0 < r1时,r1 += -1 → 0xffffffff
- 代码字节数:8字节
- 指令数量:3条
- 原理:先统一清零r1,再针对lt条件做加法赋值,逻辑更直观,执行效率与方案1一致。
对比原实现的优势
原实现使用ite lt前缀配合两条条件mov指令,需要额外的2字节前缀指令,且多一条指令执行开销。优化后的方案直接用单条条件数据处理指令完成赋值,既节省了代码空间,又减少了执行周期。
注:无符号整数场景的sbcs r1, r1技巧无法直接复用(因为有符号lt依赖N和V标志的异或结果,而非进位标志C),上述方案是Thumb2环境下针对有符号比较的最优实现。
内容的提问来源于stack exchange,提问作者Dongzin Choi
相关产品推荐
相关产品推荐

