• J
    bpf: introduce new mov32 variant for doing explicit zero extension · 7d134041
    Jiong Wang 提交于
    The encoding for this new variant is based on BPF_X format. "imm" field was
    0 only, now it could be 1 which means doing zero extension unconditionally
    
      .code = BPF_ALU | BPF_MOV | BPF_X
      .dst_reg = DST
      .src_reg = SRC
      .imm  = 1
    
    We use this new form for doing zero extension for which verifier will
    guarantee SRC == DST.
    
    Implications on JIT back-ends when doing code-gen for
    BPF_ALU | BPF_MOV | BPF_X:
      1. No change if hardware already does zero extension unconditionally for
         sub-register write.
      2. Otherwise, when seeing imm == 1, just generate insns to clear high
         32-bit. No need to generate insns for the move because when imm == 1,
         dst_reg is the same as src_reg at the moment.
    
    Interpreter doesn't need change as well. It is doing unconditionally zero
    extension for mov32 already.
    
    One helper macro BPF_ZEXT_REG is added to help creating zero extension
    insn using this new mov32 variant.
    
    One helper function insn_is_zext is added for checking one insn is an
    zero extension on dst. This will be widely used by a few JIT back-ends in
    later patches in this set.
    Signed-off-by: NJiong Wang <jiong.wang@netronome.com>
    Signed-off-by: NAlexei Starovoitov <ast@kernel.org>
    7d134041
filter.h 32.4 KB