ARM并行指令ASX和SAX的用途?

bar*_*e82 4 parallel-processing assembly arm

有人可以解释何时使用并行加/减ARM指令ASX和/或SAX?在什么情况下/算法需要用来调出半字,然后加上AND减去上/下半字?以下是每个的解释:

ASX

  • 交换半字Rm,然后添加顶部半字和减去底部半字.

SAX

  • 交换半字Rm,然后减去前半字和添加下半字.

Ros*_*dge 10

就像Russ Schultz在评论中所说的那样,用L + R和LR通道编码的音频很有用.它将使用类似于:

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]
Run Code Online (Sandbox Code Playgroud)

交换第三个操作数的顶部和底部半字是必要的,因此可以相互增加/减少两个不同的组件.没有你得到的交换((L-R)+(L-R))/2:((L+R)-(L+R))/2 = (2(L-R)/2):(0/2) = (L-R):0.