PPC: net: bpf_jit_comp: add XOR instruction for BPF JIT
Subsystems (5)
PATCH 1/2 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.
---
Disclaimer: uncompiled and untested, since I don't have a PPC machine, but it should (hopefully) integrate cleanly; impl. after PPC instruction reference.
arch/powerpc/include/asm/ppc-opcode.h | 3 +++ arch/powerpc/net/bpf_jit.h | 6 ++++++ arch/powerpc/net/bpf_jit_comp.c | 11 +++++++++++ 3 files changed, 20 insertions(+), 0 deletions(-)
arch/powerpc/include/asm/ppc-opcode.h +3 -0
@@ -168,9 +168,12 @@#define PPC_INST_AND 0x7c000038#define PPC_INST_ANDDOT 0x7c000039#define PPC_INST_OR 0x7c000378 +#define PPC_INST_XOR 0x7c000278#define PPC_INST_ANDI 0x70000000#define PPC_INST_ORI 0x60000000#define PPC_INST_ORIS 0x64000000 +#define PPC_INST_XORI 0x68000000 +#define PPC_INST_XORIS 0x6c000000#define PPC_INST_NEG 0x7c0000d0#define PPC_INST_BRANCH 0x48000000#define PPC_INST_BRANCH_COND 0x40800000
arch/powerpc/net/bpf_jit.h +6 -0
@@ -134,6 +134,12 @@ DECLARE_LOAD_FUNC(sk_load_byte_msh); ___PPC_RS(a) | IMM_L(i))#define PPC_ORIS (d, a, i) EMIT(PPC_INST_ORIS | ___PPC_RA(d) | \ ___PPC_RS(a) | IMM_L(i)) +#define PPC_XOR (d, a, b) EMIT(PPC_INST_XOR | ___PPC_RA(d) | \ + ___PPC_RS(a) | ___PPC_RB(b)) +#define PPC_XORI (d, a, i) EMIT(PPC_INST_XORI | ___PPC_RA(d) | \ + ___PPC_RS(a) | IMM_L(i)) +#define PPC_XORIS (d, a, i) EMIT(PPC_INST_XORIS | ___PPC_RA(d) | \ + ___PPC_RS(a) | IMM_L(i))#define PPC_SLW (d, a, s) EMIT(PPC_INST_SLW | ___PPC_RA(d) | \ ___PPC_RS(a) | ___PPC_RB(s))#define PPC_SRW (d, a, s) EMIT(PPC_INST_SRW | ___PPC_RA(d) | \
arch/powerpc/net/bpf_jit_comp.c +11 -0
@@ -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);
David Miller
maintainerFrom: Daniel Borkmann <[email protected]>
Date: Thu, 8 Nov 2012 22:39:41 +0100
Quoted 4 lines
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 <[email protected]>
Could a powerpc person please review these two patches so that I can toss them into net-next (where the dependency is)?
Thanks!
Quoted 10 lines · David Miller
From: Daniel Borkmann <[email protected]>
Date: Thu, 8 Nov 2012 22:39:41 +0100Quoted 4 lines
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 <[email protected]>Could a powerpc person please review these two patches so that I can toss them into net-next (where the dependency is)?
Sure, travelling right now, will try to find somebody or will do it myself some time next week.
Cheers,
Ben.
Hi Daniel,
Quoted 10 lines · Daniel Borkmann
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 <[email protected]>Cc Matt Evans <[email protected]>Cc Benjamin Herrenschmidt <[email protected]>---
Disclaimer: uncompiled and untested, since I don't have a PPC machine, but it should (hopefully) integrate cleanly; impl. after PPC instruction reference.
Unfortunately I can only compile and test this mentally, but it looks fine, instruction formats correct etc. Thanks!
Matt
Quoted 62 lines
arch/powerpc/include/asm/ppc-opcode.h | 3 +++ arch/powerpc/net/bpf_jit.h | 6 ++++++ arch/powerpc/net/bpf_jit_comp.c | 11 +++++++++++ 3 files changed, 20 insertions(+), 0 deletions(-)arch/powerpc/include/asm/ppc-opcode.h +3
-0@@ -168,9 +168,12 @@#define PPC_INST_AND 0x7c000038#define PPC_INST_ANDDOT 0x7c000039#define PPC_INST_OR 0x7c000378 +#define PPC_INST_XOR 0x7c000278#define PPC_INST_ANDI 0x70000000#define PPC_INST_ORI 0x60000000#define PPC_INST_ORIS 0x64000000 +#define PPC_INST_XORI 0x68000000 +#define PPC_INST_XORIS 0x6c000000#define PPC_INST_NEG 0x7c0000d0#define PPC_INST_BRANCH 0x48000000#define PPC_INST_BRANCH_COND 0x40800000arch/powerpc/net/bpf_jit.h +6
-0@@ -134,6 +134,12 @@ DECLARE_LOAD_FUNC(sk_load_byte_msh); ___PPC_RS(a) | IMM_L(i))#define PPC_ORIS (d, a, i) EMIT(PPC_INST_ORIS | ___PPC_RA(d) | \ ___PPC_RS(a) | IMM_L(i)) +#define PPC_XOR (d, a, b) EMIT(PPC_INST_XOR | ___PPC_RA(d) | \ + ___PPC_RS(a) | ___PPC_RB(b)) +#define PPC_XORI (d, a, i) EMIT(PPC_INST_XORI | ___PPC_RA(d) | \ + ___PPC_RS(a) | IMM_L(i)) +#define PPC_XORIS (d, a, i) EMIT(PPC_INST_XORIS | ___PPC_RA(d) | \ + ___PPC_RS(a) | IMM_L(i))#define PPC_SLW (d, a, s) EMIT(PPC_INST_SLW | ___PPC_RA(d) | \ ___PPC_RS(a) | ___PPC_RB(s))#define PPC_SRW (d, a, s) EMIT(PPC_INST_SRW | ___PPC_RA(d) | \arch/powerpc/net/bpf_jit_comp.c +11
-0@@ -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);
From: Matt Evans <[email protected]>
Date: Sat, 17 Nov 2012 00:00:38 +0000
Quoted 16 lines
Hi Daniel,
Quoted 10 lines · Daniel Borkmann
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 <[email protected]>Cc Matt Evans <[email protected]>Cc Benjamin Herrenschmidt <[email protected]>---
Disclaimer: uncompiled and untested, since I don't have a PPC machine, but it should (hopefully) integrate cleanly; impl. after PPC instruction reference.
Quoted 4 lines
Unfortunately I can only compile and test this mentally, but it looks fine, instruction formats correct etc. Thanks!
Acked-by Matt Evans <[email protected]>
Applied.