Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: 7421/1: bpf_jit: BPF_S_ANC_ALU_XOR_X support

JIT support for the XOR operation introduced by the commit
ffe06c17afbb.

Signed-off-by: Mircea Gherzan <mgherzan@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

authored by

Mircea Gherzan and committed by
Russell King
2bea29b7 2307574a

+9
+5
arch/arm/net/bpf_jit_32.c
··· 762 762 update_on_xread(ctx); 763 763 emit(ARM_MOV_R(r_A, r_X), ctx); 764 764 break; 765 + case BPF_S_ANC_ALU_XOR_X: 766 + /* A ^= X */ 767 + update_on_xread(ctx); 768 + emit(ARM_EOR_R(r_A, r_A, r_X), ctx); 769 + break; 765 770 case BPF_S_ANC_PROTOCOL: 766 771 /* A = ntohs(skb->protocol) */ 767 772 ctx->seen |= SEEN_SKB;
+4
arch/arm/net/bpf_jit_32.h
··· 68 68 #define ARM_INST_CMP_R 0x01500000 69 69 #define ARM_INST_CMP_I 0x03500000 70 70 71 + #define ARM_INST_EOR_R 0x00200000 72 + 71 73 #define ARM_INST_LDRB_I 0x05d00000 72 74 #define ARM_INST_LDRB_R 0x07d00000 73 75 #define ARM_INST_LDRH_I 0x01d000b0 ··· 133 131 134 132 #define ARM_CMP_R(rn, rm) _AL3_R(ARM_INST_CMP, 0, rn, rm) 135 133 #define ARM_CMP_I(rn, imm) _AL3_I(ARM_INST_CMP, 0, rn, imm) 134 + 135 + #define ARM_EOR_R(rd, rn, rm) _AL3_R(ARM_INST_EOR, rd, rn, rm) 136 136 137 137 #define ARM_LDR_I(rt, rn, off) (ARM_INST_LDR_I | (rt) << 12 | (rn) << 16 \ 138 138 | (off))