ARM base instruction -- csel

CSEL

Conditional Select returns, in the destination register, the value of the first source register if the condition is TRUE, and otherwise returns the value of the second source register.

如果条件为TRUE,则条件选择在目标寄存器中返回第一个源寄存器的值,否则返回第二个源寄存器。


sf 0 0 11010100 Rm cond 0 0 Rn Rd
31 30 29 28 27 26 25 24 23 22 21 20 16 15 12 11 10 9 5 4 0


32-bit variant
    Applies when sf == 0.
    CSEL <Wd>, <Wn>, <Wm>, <cond>

64-bit variant
    Applies when sf == 1.
    CSEL <Xd>, <Xn>, <Xm>, <cond>

Operation
    bits(datasize) result; 
    bits(datasize) operand1 = X[n]; 
    bits(datasize) operand2 = X[m]; 

    if ConditionHolds(cond) then 
        result = operand1; 
    else 
        result = operand2; 

    X[d] = result; 


CSEL <Xd>, <Xn>, <Xm>, <cond>        
# 如果条件(cond)满足,就选择(sel) Xn 作为 Xd,否则选择 Xm 作为 Xd。

CSEL X0, X0, X1, ge                    
# 如果 cond (ge : greater or equal)成立,那么X0 = X0(保持不变),否则X0 = X1。
# 虽然比IT指令块的语法看起来要直观一些,但比起IT指令块能表达的层级关系,还是稍微弱了一点。


  403400:    121d1003     and    w3, w0, #0xf8
  403404:    52800062     mov    w2, #0x3                       // #3
  403408:    7103c07f     cmp    w3, #0xf0
  40340c:    1a8213e2     csel    w2, wzr, w2, ne  // if w3!=0, w2=0; else w2=w2
  403410:    17ffffef     b    4033cc <ferror@plt+0x14ec>
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值