On 05/18/2018 09:12 PM, Jakub Kicinski wrote: > Jiong says: > > NFP eBPF JIT is missing logic indirect shifts (both left and right) and > arithmetic right shift (both indirect shift and shift by constant). > > This patch adds support for them. > > For indirect shifts, shift amount is not specified as constant, NFP needs > to get the shift amount through the low 5 bits of source A operand in > PREV_ALU, therefore extra instructions are needed compared with shifts by > constants. > > Because NFP is 32-bit, so we are using register pair for 64-bit shifts and > therefore would need different instruction sequences depending on whether > shift amount is less than 32 or not. > > NFP branch-on-bit-test instruction emitter is added by this patch set and > is used for efficient runtime check on shift amount. We'd think the shift > amount is less than 32 if bit 5 is clear and greater or equal then 32 > otherwise. Shift amount is greater than or equal to 64 will result in > undefined behavior. > > This patch also use range info to avoid generating unnecessary runtime code > if we are certain shift amount is less than 32 or not. > > Jiong Wang (3): > nfp: bpf: support logic indirect shifts (BPF_[L|R]SH | BPF_X) > nfp: bpf: support arithmetic right shift by constant (BPF_ARSH | > BPF_K) > nfp: bpf: support arithmetic indirect right shift (BPF_ARSH | BPF_X) > > drivers/net/ethernet/netronome/nfp/bpf/jit.c | 410 ++++++++++++++++-- > drivers/net/ethernet/netronome/nfp/bpf/main.h | 28 ++ > .../net/ethernet/netronome/nfp/bpf/offload.c | 2 + > .../net/ethernet/netronome/nfp/bpf/verifier.c | 8 + > drivers/net/ethernet/netronome/nfp/nfp_asm.h | 18 +- > 5 files changed, 435 insertions(+), 31 deletions(-)
Applied to bpf-next, thanks guys!