* [PATCH v2 1/2] powerpc: net: filter: fix DIVWU instruction opcode @ 2013-09-28 8:22 Vladimir Murzin 2013-09-28 8:22 ` [PATCH v2 2/2] ppc: bpf_jit: support MOD operation Vladimir Murzin 0 siblings, 1 reply; 2+ messages in thread From: Vladimir Murzin @ 2013-09-28 8:22 UTC (permalink / raw) To: linuxppc-dev Cc: matt, netdev, Vladimir Murzin, dborkman, edumazet, paulus, davem 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. Suggested-by: Vassili Karpov <av1474@comtv.ru> Reviewed-by: Vassili Karpov <av1474@comtv.ru> Signed-off-by: Vladimir Murzin <murzin.v@gmail.com> Acked-by: Matt Evans <matt@ozlabs.org> --- Changelog v1->v2 Added credit to Vassili Karpov (malc) who kindly reviewed generated assembly [1] and highlighted usage of signed division. Note: temporary, for technical reason, he's not able to receive email. [1]http://www.mail-archive.com/linuxppc-dev@lists.ozlabs.org/msg71635.html 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 eccfc16..0a4a683 100644 --- a/arch/powerpc/include/asm/ppc-opcode.h +++ b/arch/powerpc/include/asm/ppc-opcode.h @@ -171,7 +171,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.8.1.5 ^ permalink raw reply related [flat|nested] 2+ messages in thread
* [PATCH v2 2/2] ppc: bpf_jit: support MOD operation 2013-09-28 8:22 [PATCH v2 1/2] powerpc: net: filter: fix DIVWU instruction opcode Vladimir Murzin @ 2013-09-28 8:22 ` Vladimir Murzin 0 siblings, 0 replies; 2+ messages in thread From: Vladimir Murzin @ 2013-09-28 8:22 UTC (permalink / raw) To: linuxppc-dev Cc: matt, netdev, Vladimir Murzin, dborkman, edumazet, paulus, davem 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> --- Changelog v1->v2 Definition for r_scratch2 was moved to header file. 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] 2+ messages in thread
end of thread, other threads:[~2013-09-28 8:23 UTC | newest] Thread overview: 2+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-09-28 8:22 [PATCH v2 1/2] powerpc: net: filter: fix DIVWU instruction opcode Vladimir Murzin 2013-09-28 8:22 ` [PATCH v2 2/2] ppc: bpf_jit: support MOD operation 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).