* [RESEND PATCH 1/2] powerpc: net: filter: fix DIVWU instruction opcode @ 2013-09-21 7:25 Vladimir Murzin 2013-09-21 7:25 ` [RESEND PATCH 2/2] ppc: bpf_jit: support MOD operation Vladimir Murzin 0 siblings, 1 reply; 4+ messages in thread From: Vladimir Murzin @ 2013-09-21 7:25 UTC (permalink / raw) To: linuxppc-dev Cc: netdev, davem, benh, paulus, matt, edumazet, dborkman, Vladimir Murzin Currently DIVWU stands for *signed* divw opcode: 7d 2a 4b 96 divwu r9,r10,r9 7d 2a 4b d6 divw r9,r10,r9 Use the *unsigned* divw opcode for DIVWU. Signed-off-by: Vladimir Murzin <murzin.v@gmail.com> Acked-by: Matt Evans <matt@ozlabs.org> --- arch/powerpc/include/asm/ppc-opcode.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h index d7fe9f5..c91842c 100644 --- a/arch/powerpc/include/asm/ppc-opcode.h +++ b/arch/powerpc/include/asm/ppc-opcode.h @@ -218,7 +218,7 @@ #define PPC_INST_MULLW 0x7c0001d6 #define PPC_INST_MULHWU 0x7c000016 #define PPC_INST_MULLI 0x1c000000 -#define PPC_INST_DIVWU 0x7c0003d6 +#define PPC_INST_DIVWU 0x7c000396 #define PPC_INST_RLWINM 0x54000000 #define PPC_INST_RLDICR 0x78000004 #define PPC_INST_SLW 0x7c000030 -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [RESEND PATCH 2/2] ppc: bpf_jit: support MOD operation 2013-09-21 7:25 [RESEND PATCH 1/2] powerpc: net: filter: fix DIVWU instruction opcode Vladimir Murzin @ 2013-09-21 7:25 ` Vladimir Murzin 2013-09-22 15:13 ` Matt Evans 0 siblings, 1 reply; 4+ messages in thread From: Vladimir Murzin @ 2013-09-21 7:25 UTC (permalink / raw) To: linuxppc-dev Cc: netdev, davem, benh, paulus, matt, edumazet, dborkman, Vladimir Murzin commit b6069a9570 (filter: add MOD operation) added generic support for modulus operation in BPF. This patch brings JIT support for PPC64 Signed-off-by: Vladimir Murzin <murzin.v@gmail.com> Acked-by: Matt Evans <matt@ozlabs.org> --- arch/powerpc/net/bpf_jit_comp.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c index bf56e33..96f24dc 100644 --- a/arch/powerpc/net/bpf_jit_comp.c +++ b/arch/powerpc/net/bpf_jit_comp.c @@ -193,6 +193,28 @@ static int bpf_jit_build_body(struct sk_filter *fp, u32 *image, PPC_MUL(r_A, r_A, r_scratch1); } break; + case BPF_S_ALU_MOD_X: /* A %= X; */ + ctx->seen |= SEEN_XREG; + PPC_CMPWI(r_X, 0); + if (ctx->pc_ret0 != -1) { + PPC_BCC(COND_EQ, addrs[ctx->pc_ret0]); + } else { + PPC_BCC_SHORT(COND_NE, (ctx->idx*4)+12); + PPC_LI(r_ret, 0); + PPC_JMP(exit_addr); + } + PPC_DIVWU(r_scratch1, r_A, r_X); + PPC_MUL(r_scratch1, r_X, r_scratch1); + PPC_SUB(r_A, r_A, r_scratch1); + break; + case BPF_S_ALU_MOD_K: /* A %= K; */ +#define r_scratch2 (r_scratch1 + 1) + PPC_LI32(r_scratch2, K); + PPC_DIVWU(r_scratch1, r_A, r_scratch2); + PPC_MUL(r_scratch1, r_scratch2, r_scratch1); + PPC_SUB(r_A, r_A, r_scratch1); +#undef r_scratch2 + break; case BPF_S_ALU_DIV_X: /* A /= X; */ ctx->seen |= SEEN_XREG; PPC_CMPWI(r_X, 0); -- 1.8.1.5 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [RESEND PATCH 2/2] ppc: bpf_jit: support MOD operation 2013-09-21 7:25 ` [RESEND PATCH 2/2] ppc: bpf_jit: support MOD operation Vladimir Murzin @ 2013-09-22 15:13 ` Matt Evans 2013-09-22 15:35 ` Vladimir Murzin 0 siblings, 1 reply; 4+ messages in thread From: Matt Evans @ 2013-09-22 15:13 UTC (permalink / raw) To: Vladimir Murzin Cc: linuxppc-dev@lists.ozlabs.org, netdev@vger.kernel.org, davem@davemloft.net, benh@kernel.crashing.org, paulus@samba.org, edumazet@google.com, dborkman@redhat.com, Vladimir Murzin Hi Vladimir, On 21 Sep 2013, at 17:25, Vladimir Murzin <murzin.v@gmail.com> wrote: > commit b6069a9570 (filter: add MOD operation) added generic > support for modulus operation in BPF. > > This patch brings JIT support for PPC64 > > Signed-off-by: Vladimir Murzin <murzin.v@gmail.com> > Acked-by: Matt Evans <matt@ozlabs.org> Not this version, though; see below. > --- > arch/powerpc/net/bpf_jit_comp.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c > index bf56e33..96f24dc 100644 > --- a/arch/powerpc/net/bpf_jit_comp.c > +++ b/arch/powerpc/net/bpf_jit_comp.c > @@ -193,6 +193,28 @@ static int bpf_jit_build_body(struct sk_filter *fp, u32 *image, > PPC_MUL(r_A, r_A, r_scratch1); > } > break; > + case BPF_S_ALU_MOD_X: /* A %= X; */ > + ctx->seen |= SEEN_XREG; > + PPC_CMPWI(r_X, 0); > + if (ctx->pc_ret0 != -1) { > + PPC_BCC(COND_EQ, addrs[ctx->pc_ret0]); > + } else { > + PPC_BCC_SHORT(COND_NE, (ctx->idx*4)+12); > + PPC_LI(r_ret, 0); > + PPC_JMP(exit_addr); > + } > + PPC_DIVWU(r_scratch1, r_A, r_X); > + PPC_MUL(r_scratch1, r_X, r_scratch1); > + PPC_SUB(r_A, r_A, r_scratch1); > + break; > + case BPF_S_ALU_MOD_K: /* A %= K; */ > +#define r_scratch2 (r_scratch1 + 1) Old version of this patch, still? I had hoped that r_scratch2 would be defined in the header. > + PPC_LI32(r_scratch2, K); > + PPC_DIVWU(r_scratch1, r_A, r_scratch2); > + PPC_MUL(r_scratch1, r_scratch2, r_scratch1); > + PPC_SUB(r_A, r_A, r_scratch1); > +#undef r_scratch2 And remember this guy too.. :) Matt > + break; > case BPF_S_ALU_DIV_X: /* A /= X; */ > ctx->seen |= SEEN_XREG; > PPC_CMPWI(r_X, 0); > -- > 1.8.1.5 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RESEND PATCH 2/2] ppc: bpf_jit: support MOD operation 2013-09-22 15:13 ` Matt Evans @ 2013-09-22 15:35 ` Vladimir Murzin 0 siblings, 0 replies; 4+ messages in thread From: Vladimir Murzin @ 2013-09-22 15:35 UTC (permalink / raw) To: Matt Evans Cc: linuxppc-dev@lists.ozlabs.org, netdev@vger.kernel.org, davem@davemloft.net, benh@kernel.crashing.org, paulus@samba.org, edumazet@google.com, dborkman@redhat.com On Mon, Sep 23, 2013 at 01:13:45AM +1000, Matt Evans wrote: > Hi Vladimir, > > On 21 Sep 2013, at 17:25, Vladimir Murzin <murzin.v@gmail.com> wrote: > > > commit b6069a9570 (filter: add MOD operation) added generic > > support for modulus operation in BPF. > > > > This patch brings JIT support for PPC64 > > > > Signed-off-by: Vladimir Murzin <murzin.v@gmail.com> > > Acked-by: Matt Evans <matt@ozlabs.org> > > Not this version, though; see below. > > > --- > > arch/powerpc/net/bpf_jit_comp.c | 22 ++++++++++++++++++++++ > > 1 file changed, 22 insertions(+) > > > > diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c > > index bf56e33..96f24dc 100644 > > --- a/arch/powerpc/net/bpf_jit_comp.c > > +++ b/arch/powerpc/net/bpf_jit_comp.c > > @@ -193,6 +193,28 @@ static int bpf_jit_build_body(struct sk_filter *fp, u32 *image, > > PPC_MUL(r_A, r_A, r_scratch1); > > } > > break; > > + case BPF_S_ALU_MOD_X: /* A %= X; */ > > + ctx->seen |= SEEN_XREG; > > + PPC_CMPWI(r_X, 0); > > + if (ctx->pc_ret0 != -1) { > > + PPC_BCC(COND_EQ, addrs[ctx->pc_ret0]); > > + } else { > > + PPC_BCC_SHORT(COND_NE, (ctx->idx*4)+12); > > + PPC_LI(r_ret, 0); > > + PPC_JMP(exit_addr); > > + } > > + PPC_DIVWU(r_scratch1, r_A, r_X); > > + PPC_MUL(r_scratch1, r_X, r_scratch1); > > + PPC_SUB(r_A, r_A, r_scratch1); > > + break; > > + case BPF_S_ALU_MOD_K: /* A %= K; */ > > +#define r_scratch2 (r_scratch1 + 1) > > Old version of this patch, still? I had hoped that r_scratch2 would be defined in the header. Oops.. been keeping the old version.. sorry for that, Matt :( > > > + PPC_LI32(r_scratch2, K); > > + PPC_DIVWU(r_scratch1, r_A, r_scratch2); > > + PPC_MUL(r_scratch1, r_scratch2, r_scratch1); > > + PPC_SUB(r_A, r_A, r_scratch1); > > +#undef r_scratch2 > > And remember this guy too.. :) I've included the patch below. Nothing is missed this time, I hope ;) > > > Matt > > > + break; > > case BPF_S_ALU_DIV_X: /* A /= X; */ > > ctx->seen |= SEEN_XREG; > > PPC_CMPWI(r_X, 0); > > -- > > 1.8.1.5 --- From: Vladimir Murzin <murzin.v@gmail.com> Date: Wed, 28 Aug 2013 01:29:39 +0400 Subject: [PATCH 2/2] ppc: bpf_jit: support MOD operation commit b6069a9570 (filter: add MOD operation) added generic support for modulus operation in BPF. This patch brings JIT support for PPC64 Signed-off-by: Vladimir Murzin <murzin.v@gmail.com> Acked-by: Matt Evans <matt@ozlabs.org> --- arch/powerpc/net/bpf_jit.h | 1 + arch/powerpc/net/bpf_jit_comp.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/arch/powerpc/net/bpf_jit.h b/arch/powerpc/net/bpf_jit.h index 8a5dfaf..42a115a 100644 --- a/arch/powerpc/net/bpf_jit.h +++ b/arch/powerpc/net/bpf_jit.h @@ -39,6 +39,7 @@ #define r_X 5 #define r_addr 6 #define r_scratch1 7 +#define r_scratch2 8 #define r_D 14 #define r_HL 15 #define r_M 16 diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c index bf56e33..cbb2702 100644 --- a/arch/powerpc/net/bpf_jit_comp.c +++ b/arch/powerpc/net/bpf_jit_comp.c @@ -193,6 +193,26 @@ static int bpf_jit_build_body(struct sk_filter *fp, u32 *image, PPC_MUL(r_A, r_A, r_scratch1); } break; + case BPF_S_ALU_MOD_X: /* A %= X; */ + ctx->seen |= SEEN_XREG; + PPC_CMPWI(r_X, 0); + if (ctx->pc_ret0 != -1) { + PPC_BCC(COND_EQ, addrs[ctx->pc_ret0]); + } else { + PPC_BCC_SHORT(COND_NE, (ctx->idx*4)+12); + PPC_LI(r_ret, 0); + PPC_JMP(exit_addr); + } + PPC_DIVWU(r_scratch1, r_A, r_X); + PPC_MUL(r_scratch1, r_X, r_scratch1); + PPC_SUB(r_A, r_A, r_scratch1); + break; + case BPF_S_ALU_MOD_K: /* A %= K; */ + PPC_LI32(r_scratch2, K); + PPC_DIVWU(r_scratch1, r_A, r_scratch2); + PPC_MUL(r_scratch1, r_scratch2, r_scratch1); + PPC_SUB(r_A, r_A, r_scratch1); + break; case BPF_S_ALU_DIV_X: /* A /= X; */ ctx->seen |= SEEN_XREG; PPC_CMPWI(r_X, 0); -- 1.8.1.5 ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-09-22 15:36 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-09-21 7:25 [RESEND PATCH 1/2] powerpc: net: filter: fix DIVWU instruction opcode Vladimir Murzin 2013-09-21 7:25 ` [RESEND PATCH 2/2] ppc: bpf_jit: support MOD operation Vladimir Murzin 2013-09-22 15:13 ` Matt Evans 2013-09-22 15:35 ` Vladimir Murzin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).