有人可以解释使用parallel add/subtract ARM instructions ASX
and/or SAX
时有什么好处吗?在什么情况下/算法需要用来调出半字,然后加上AND减去上/下半字?以下是每个的解释:
ASX
- 交换
Rm
的半字,然后添加上半字和减去下半字。SAX
- 交换
Rm
的半字,然后减去上半字并添加下半字。
答案 0 :(得分:9)
就像Russ Schultz在评论中所言,用L+R and L-R channels编码的音频很有用。它将被用于:
ldr r1, [r0] ; R1 = (L-R):(L+R)
shasx r1, r1, r1 ; R1 = ((L-R)+(L+R))/2:((L+R)-(L-R))/2
; = (2L/2):(2R/2)
; = L:R
ror r1, r1, #16 ; R1 = R:L
str r1, [r0]
第三个操作数的顶部和底部半字的交换是必要的,因此可以相互增加/减少两个不同的组件。如果没有交换,您将获得((L-R)+(L-R))/2:((L+R)-(L+R))/2 = (2(L-R)/2):(0/2) = (L-R):0
。