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

时间:2016-07-21 16:14:59

标签: assembly parallel-processing arm

有人可以解释使用parallel add/subtract ARM instructions ASX and/or SAX时有什么好处吗?在什么情况下/算法需要用来调出半字,然后加上AND减去上/下半字?以下是每个的解释:

  

ASX

     
      
  • 交换Rm的半字,然后添加上半字和减去下半字。
  •   
     

SAX

     
      
  • 交换Rm的半字,然后减去上半字并添加下半字。
  •   

1 个答案:

答案 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