diff options
author | Daniel Borkmann <dxchgb@gmail.com> | 2012-11-08 11:39:41 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-11-17 22:12:47 -0500 |
commit | 02871903a1fcdf306a906c38566ca0d48a45a431 (patch) | |
tree | ed61bd5960d1eded043f1d1e6cf73995e06d83b9 /arch/powerpc/net/bpf_jit_comp.c | |
parent | 18d359ceb04485df0e387e04b0e52a761c4c58a0 (diff) | |
download | blackbird-op-linux-02871903a1fcdf306a906c38566ca0d48a45a431.tar.gz blackbird-op-linux-02871903a1fcdf306a906c38566ca0d48a45a431.zip |
PPC: net: bpf_jit_comp: add XOR instruction for BPF JIT
This patch is a follow-up for patch "filter: add XOR instruction for use
with X/K" that implements BPF PowerPC JIT parts for the BPF XOR operation.
Signed-off-by: Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch>
Cc: Matt Evans <matt@ozlabs.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Matt Evans <matt@ozlabs.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/powerpc/net/bpf_jit_comp.c')
-rw-r--r-- | arch/powerpc/net/bpf_jit_comp.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c index dd1130642d07..b9434de8222b 100644 --- a/arch/powerpc/net/bpf_jit_comp.c +++ b/arch/powerpc/net/bpf_jit_comp.c @@ -232,6 +232,17 @@ static int bpf_jit_build_body(struct sk_filter *fp, u32 *image, if (K >= 65536) PPC_ORIS(r_A, r_A, IMM_H(K)); break; + case BPF_S_ANC_ALU_XOR_X: + case BPF_S_ALU_XOR_X: /* A ^= X */ + ctx->seen |= SEEN_XREG; + PPC_XOR(r_A, r_A, r_X); + break; + case BPF_S_ALU_XOR_K: /* A ^= K */ + if (IMM_L(K)) + PPC_XORI(r_A, r_A, IMM_L(K)); + if (K >= 65536) + PPC_XORIS(r_A, r_A, IMM_H(K)); + break; case BPF_S_ALU_LSH_X: /* A <<= X; */ ctx->seen |= SEEN_XREG; PPC_SLW(r_A, r_A, r_X); |