>>2 和/4是一样的结果,符号都有问题,而且在一样的优化级别下/4会产生多得多的代码(接近3倍)
\\ 184 T = pSrc[i0];
LDR R4,[R6, #+0]
\\ 185 in = ((int16_t) (T & 0xFFFF)) /4;
\\ 186 T = ((T /4) & 0xFFFF0000) | (in & 0xFFFF);
SXTH R7,R4
ASRS R6,R4,#+1
ADD R4,R4,R6, LSR #+30
AND R4,R1,R4, ASR #+2
ASRS R6,R7,#+1
ADD R6,R7,R6, LSR #+30
ANDS R6,R5,R6, ASR #+2
ORRS R4,R6,R4
\\ 184 T = pSrc[i0];
LDR LR,[R5, #+0]
\\ 185 in = ((int16_t) (T & 0xFFFF)) >> 2;
\\ 186 T = ((T >> 2) & 0xFFFF0000) | (in & 0xFFFF);
AND R8,R1,LR, ASR #+2
UBFX LR,LR,#+2,#+16
ORR R8,LR,R8
这个可能是IAR对表达式的理解问题,只能把这个C文件替换成汇编来解决了。
|