From patchwork Wed Dec 5 18:52:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiong Wang X-Patchwork-Id: 1008384 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="g/VSCVuP"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4397D81pHhz9sBZ for ; Thu, 6 Dec 2018 05:53:28 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728185AbeLESxV (ORCPT ); Wed, 5 Dec 2018 13:53:21 -0500 Received: from mail-wm1-f67.google.com ([209.85.128.67]:40595 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727349AbeLESxT (ORCPT ); Wed, 5 Dec 2018 13:53:19 -0500 Received: by mail-wm1-f67.google.com with SMTP id q26so13953825wmf.5 for ; Wed, 05 Dec 2018 10:53:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=5Yvvnv8dT2VC7tvVturrPpmwp2PQM9YZhIYQrCl231E=; b=g/VSCVuP9jCYW8+pBEgQML7k1qym8SfZ6i6OHwLi6uI/C4QNf8OjjJg0A5Pw/7pb8U MbZ3vWX7Yr4H+0ENro5xHRHhkOxC3vg72+aXPHSdmO+vybSOuP6k4XXk1AU5iAM9P06R 4xv+/Ij4EwDlGzqZ4R1dLr4SzI3qXJOnKBRZNvWLe22Qy2rven59roty7o5Wgnygfsi+ 9T7ivONsfXCtAdr/0GdipH6xZtZqqgAnpyn0ozvsaSVpT0NVW4NNowuRUCzOOGXEA9Vr pHVB7Wna/U16Ec8ft2Ve2+vx5lMgzwxUTNN7PmkioIHuuIzEJ7rykGz1hKQ9kuw20M75 Pt5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=5Yvvnv8dT2VC7tvVturrPpmwp2PQM9YZhIYQrCl231E=; b=EL8JTfzzmuirxxLaXOX65z7i5XehRpop5zB37e2sLiJLBjQfT70DBdxCMcFPzj9NY6 mL1jVpmQo61sU9IKS6ZHHZ/g0acBYCKDrKx8S66bjxRQqdhaPxRvlM7RpMfQDI3ijjJq bnHsVrJxNnjC2DYzkamkR1f/5X3P0VebbWPxzX/jERBfCmd9Py6z3RfHoqTg2fg5V6GN OF3g0VR/CzkZZ2aASwF3HbCfxkFBucezcxdKYwah9zPom1Y//uXGuSNOJ+RpZut8zXSS +66AjpyO5j+fUIsCJH9gtewzs054ZythkEZ3xtEzfcpAJLiWiCz24ggtdhFL5vio5fTI l7OQ== X-Gm-Message-State: AA+aEWbOV/s5BjuwNSh9aAmW/cciD+MTJx4gcjmRItn79sTebLO538F6 8JjpvSqnCf5LO2F4jAYWlJZ4TQ== X-Google-Smtp-Source: AFSGD/WLiAJP+S3LXat/Vc9xOJFUU7QJfsAWktGsKiRFoGJFnI8dYcdguYhPh1Raetj194IsVEd5kA== X-Received: by 2002:a1c:544f:: with SMTP id p15mr16770721wmi.37.1544035997874; Wed, 05 Dec 2018 10:53:17 -0800 (PST) Received: from cbtest28.netronome.com ([217.38.71.146]) by smtp.gmail.com with ESMTPSA id s81sm15803251wmf.14.2018.12.05.10.53.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Dec 2018 10:53:16 -0800 (PST) From: Jiong Wang To: daniel@iogearbox.net, ast@kernel.org Cc: netdev@vger.kernel.org, oss-drivers@netronome.com, Jiong Wang , "Naveen N . Rao" , Sandipan Das Subject: [PATCH v2 bpf-next 2/7] ppc: bpf: implement jitting of BPF_ALU | BPF_ARSH | BPF_* Date: Wed, 5 Dec 2018 13:52:31 -0500 Message-Id: <1544035956-12375-3-git-send-email-jiong.wang@netronome.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> References: <1544035956-12375-1-git-send-email-jiong.wang@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch implements code-gen for BPF_ALU | BPF_ARSH | BPF_*. Cc: Naveen N. Rao Cc: Sandipan Das Signed-off-by: Jiong Wang Reviewed-by: Sandipan Das --- arch/powerpc/include/asm/ppc-opcode.h | 2 ++ arch/powerpc/net/bpf_jit.h | 4 ++++ arch/powerpc/net/bpf_jit_comp64.c | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h index a6e9e31..9014592 100644 --- a/arch/powerpc/include/asm/ppc-opcode.h +++ b/arch/powerpc/include/asm/ppc-opcode.h @@ -342,6 +342,8 @@ #define PPC_INST_SLW 0x7c000030 #define PPC_INST_SLD 0x7c000036 #define PPC_INST_SRW 0x7c000430 +#define PPC_INST_SRAW 0x7c000630 +#define PPC_INST_SRAWI 0x7c000670 #define PPC_INST_SRD 0x7c000436 #define PPC_INST_SRAD 0x7c000634 #define PPC_INST_SRADI 0x7c000674 diff --git a/arch/powerpc/net/bpf_jit.h b/arch/powerpc/net/bpf_jit.h index 47fc666..c2d5192 100644 --- a/arch/powerpc/net/bpf_jit.h +++ b/arch/powerpc/net/bpf_jit.h @@ -152,6 +152,10 @@ ___PPC_RS(a) | ___PPC_RB(s)) #define PPC_SRW(d, a, s) EMIT(PPC_INST_SRW | ___PPC_RA(d) | \ ___PPC_RS(a) | ___PPC_RB(s)) +#define PPC_SRAW(d, a, s) EMIT(PPC_INST_SRAW | ___PPC_RA(d) | \ + ___PPC_RS(a) | ___PPC_RB(s)) +#define PPC_SRAWI(d, a, i) EMIT(PPC_INST_SRAWI | ___PPC_RA(d) | \ + ___PPC_RS(a) | __PPC_SH(i)) #define PPC_SRD(d, a, s) EMIT(PPC_INST_SRD | ___PPC_RA(d) | \ ___PPC_RS(a) | ___PPC_RB(s)) #define PPC_SRAD(d, a, s) EMIT(PPC_INST_SRAD | ___PPC_RA(d) | \ diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c index 17482f5..7dc8187 100644 --- a/arch/powerpc/net/bpf_jit_comp64.c +++ b/arch/powerpc/net/bpf_jit_comp64.c @@ -529,9 +529,15 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, if (imm != 0) PPC_SRDI(dst_reg, dst_reg, imm); break; + case BPF_ALU | BPF_ARSH | BPF_X: /* (s32) dst >>= src */ + PPC_SRAW(dst_reg, dst_reg, src_reg); + goto bpf_alu32_trunc; case BPF_ALU64 | BPF_ARSH | BPF_X: /* (s64) dst >>= src */ PPC_SRAD(dst_reg, dst_reg, src_reg); break; + case BPF_ALU | BPF_ARSH | BPF_K: /* (s32) dst >>= imm */ + PPC_SRAWI(dst_reg, dst_reg, imm); + goto bpf_alu32_trunc; case BPF_ALU64 | BPF_ARSH | BPF_K: /* (s64) dst >>= imm */ if (imm != 0) PPC_SRADI(dst_reg, dst_reg, imm);