Skip to content
  • Aurelien Jarno's avatar
    tcg: add ext{8,16,32}u_i{32,64} TCG ops · cfc86988
    Aurelien Jarno authored
    
    
    Currently zero extensions ops are implemented by a and op with a
    constant. This is then catched in some backend, and replaced by
    a zero extension instruction. While this works well on RISC
    machines, this adds a useless register move on non-RISC machines.
    
    Example on x86:
      ext16u_i32 r1, r2
    is translated into
      mov    %eax,%ebx
      movzwl %bx, %ebx
    while the optimized version should be:
      movzwl %ax, %ebx
    
    This patch adds ext{8,16,32}u_i{32,64} TCG ops that can be
    implemented in the backends to avoid emitting useless register
    moves.
    
    Signed-off-by: default avatarAurelien Jarno <aurelien@aurel32.net>
    cfc86988