• Naveen N. Rao's avatar
    powerpc/bpf/jit: Fix/enhance 32-bit Load Immediate implementation · aaf2f7e0
    Naveen N. Rao authored
    The existing LI32() macro can sometimes result in a sign-extended 32-bit
    load that does not clear the top 32-bits properly. As an example,
    loading 0x7fffffff results in the register containing
    0xffffffff7fffffff. While this does not impact classic BPF JIT
    implementation (since that only uses the lower word for all operations),
    we would like to share this macro between classic BPF JIT and extended
    BPF JIT, wherein the entire 64-bit value in the register matters. Fix
    this by first doing a shifted LI followed by ORI.
    
    An additional optimization is with loading values between -32768 to -1,
    where we now only need a single LI.
    
    The new implementation now generates the same or less number of
    instructions.
    Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    aaf2f7e0
bpf_jit.h 11.7 KB