From patchwork Tue Jan 12 02:19:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424945 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=TRRlmN+L; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFDsf2ZtCz9sX5 for ; Tue, 12 Jan 2021 13:24:06 +1100 (AEDT) Received: from localhost ([::1]:60188 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9Lo-0003fg-A6 for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:24:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:57696) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9IF-0000Qe-DZ for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:23 -0500 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]:32795) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9IB-0001xZ-CZ for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:23 -0500 Received: by mail-pg1-x532.google.com with SMTP id n25so437531pgb.0 for ; Mon, 11 Jan 2021 18:20:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=BgZikz4sJLs+w0Gy/WgD2VLy+0WnxAYabQZ2ZyT4YKc=; b=TRRlmN+LPde9lczbR1pRzyQNo8Ybs8E4HljzJKLtPA5Y+9yVhN+tZAmZT++4XYTIxM GsUEuFyef/1r6JnQeFwXGEb5U6wRCyQwTuRPlcFlhzd4RJyw2ymrrj8kh7PEhyWSIHgu DdoCv1FIWeQBVn23mEiLCnQAFL2tMm74er4YcPcs0X6FW9+jkSb0hN3ewsX9QM+64XLY SZABzet3sQk85V6zsGwE8cqOnlps7Eni9XGLXEqStgBrLF3404FSd5w+E8+HwaeehyCw FZkXSPfX4ekWkvVOwgRNneIa1vT7wLkWLsAyQaymOh6BGf1gnMy6QdlKP7iPJ/usm4hM 3Ugw== 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=BgZikz4sJLs+w0Gy/WgD2VLy+0WnxAYabQZ2ZyT4YKc=; b=M19voiF7zVS0Adw3EZ0jUTpc/ukykH4+Li8xzA2Py0BNvCU8OdMMDG8FEp9Q65qJNZ r3dWqPgTRPic/VJ4Isat4VFGdrAc3mBqPIcK25Q9uhZQBjqGgaMkeCz9UqzpPGRp1F75 gJGaYcJX44MkyL/RW+8MorQXs82YZRBEqlFeymylULGAxrzQL9PFLK8i7ZHL9J2SOxqS SbqDU8q3xiQi2oUXyu4UOeULl3sgYLf9buCrF4mxwbLv27qcshtE3kOqq8UH7PZJ4WSn 4iU0HyMr1D7hhRb2Y/Rn6HEFwv9PvcZ2PQ1G6Z4xH3kJ9xSUX5Ku3v9XgjEqS+zC5V/z xuzA== X-Gm-Message-State: AOAM530PDV6eHkRChcAjkn324UoeLxh50f53evGl5ZFwd2kH8JaFj4Qz CMz16gncI8m05cv2nIH2fwrY5ntxix5Rvcl8 X-Google-Smtp-Source: ABdhPJwTF/OLj3ZIUPocFw06r6Cgfk2G1VV1jPq9LHtgaOn3MN6hKG0UoU3XQgnUm80GlQdyZVnxSw== X-Received: by 2002:a63:c441:: with SMTP id m1mr2288694pgg.353.1610418017981; Mon, 11 Jan 2021 18:20:17 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.20.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:20:17 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 01/16] target/riscv: reformat @sh format encoding for B-extension Date: Tue, 12 Jan 2021 10:19:42 +0800 Message-Id: <20210112022001.20521-2-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::532; envelope-from=frank.chang@sifive.com; helo=mail-pg1-x532.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Kito Cheng Signed-off-by: Kito Cheng Signed-off-by: Frank Chang Reviewed-by: Richard Henderson --- target/riscv/insn32.decode | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 84080dd18ca..3823b3ea800 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -22,7 +22,7 @@ %rs1 15:5 %rd 7:5 -%sh10 20:10 +%sh7 20:7 %csr 20:12 %rm 12:3 %nf 29:3 !function=ex_plus_1 @@ -58,7 +58,7 @@ @u .................... ..... ....... &u imm=%imm_u %rd @j .................... ..... ....... &j imm=%imm_j %rd -@sh ...... ...... ..... ... ..... ....... &shift shamt=%sh10 %rs1 %rd +@sh ...... ...... ..... ... ..... ....... &shift shamt=%sh7 %rs1 %rd @csr ............ ..... ... ..... ....... %csr %rs1 %rd @atom_ld ..... aq:1 rl:1 ..... ........ ..... ....... &atomic rs2=0 %rs1 %rd @@ -122,9 +122,9 @@ sltiu ............ ..... 011 ..... 0010011 @i xori ............ ..... 100 ..... 0010011 @i ori ............ ..... 110 ..... 0010011 @i andi ............ ..... 111 ..... 0010011 @i -slli 00.... ...... ..... 001 ..... 0010011 @sh -srli 00.... ...... ..... 101 ..... 0010011 @sh -srai 01.... ...... ..... 101 ..... 0010011 @sh +slli 00000. ...... ..... 001 ..... 0010011 @sh +srli 00000. ...... ..... 101 ..... 0010011 @sh +srai 01000. ...... ..... 101 ..... 0010011 @sh add 0000000 ..... ..... 000 ..... 0110011 @r sub 0100000 ..... ..... 000 ..... 0110011 @r sll 0000000 ..... ..... 001 ..... 0110011 @r From patchwork Tue Jan 12 02:19:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424942 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=MnFsrxGL; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFDpZ550xz9sXN for ; Tue, 12 Jan 2021 13:21:26 +1100 (AEDT) Received: from localhost ([::1]:53112 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9JA-0000b8-NI for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:21:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:57778) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9IL-0000Y4-LU for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:29 -0500 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]:37248) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9II-00020I-6Z for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:29 -0500 Received: by mail-pl1-x62f.google.com with SMTP id be12so569931plb.4 for ; Mon, 11 Jan 2021 18:20:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=c/CcaBIobtZhsXA1lKF4+7wWbRa+XM/F56UYWiOAJSI=; b=MnFsrxGLIaAnRKYs384NAGLIzwljKrIwSE03ibZEpqrllANT0/542FqSNyCm/Ytunz OE5Sb0H6PcV8+m4Js/n0eBc59e4YuOuH9yOL4/HAXZLHReuM5vHbujDUDvSYCjwRPINj IXynIRuGgimnrgM8hC/Q7KzzSaiOT39Tq9CzweFei30xFRzJGZ4TAJpxVZIrNKvIAozb sk1iKYiZaUtXA6kS4cI7o/BJnJJ1dwhTcMyJYSfCcYYRXxec1YH+9lO6gWX7ZO1eMVZz Y2ibCtxfcspDN36aJYzCg/BGKQJRkG68ABfeD8A+sYAzGY63121H+xl4CzPiMm6t1poc 9WHQ== 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=c/CcaBIobtZhsXA1lKF4+7wWbRa+XM/F56UYWiOAJSI=; b=svJwoj4dsvNRu+zRAZ6LRZU4nYwklL6O+FSOWk+scwWTkiDYu0TLAcqsvrbCie3Loy VCvJuL8pMaNSTdzWQ3KUGwqGEzqROhzK772XDOv0IL9bcfz6P7AS5nvlm+npZThA2yVH uvI1+z2HZTvnGtjC99G7/YQdKuj3lKUA/+WJj98JGv7D0G0/XL36mBdp7iGakFL+6T8A J82Ce0IrMR4tULN1xljeUs+M8MEK9UUXc/3nsRCbnl/w/Mwt9X7OwgQLqgH4bWCOMDBO 3ppd+pgY8srndUVW8d9J3TuNFmpwIzxF/ckzX/Y/uaCd5/6qjoNUDqPPfAwTqdO1qGWf wF4A== X-Gm-Message-State: AOAM53152Egebzbpum82iLN33wdiNsa+J0dUMIP/yNRu9SAg5fmyJALU 4jfiuVnXoc9GPKwBDAK1yAZaQ9FxQJ3zb/Ox X-Google-Smtp-Source: ABdhPJxYcjP8LC9Oauf/mmy2DntoVEc08NTmaEt70YUAYPuCED24Md/xd0WehQXlXdkU+yiQHCxr8w== X-Received: by 2002:a17:902:b7cb:b029:db:c0d6:96ee with SMTP id v11-20020a170902b7cbb02900dbc0d696eemr2776383plz.21.1610418023085; Mon, 11 Jan 2021 18:20:23 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.20.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:20:22 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 02/16] target/riscv: rvb: count leading/trailing zeros Date: Tue, 12 Jan 2021 10:19:43 +0800 Message-Id: <20210112022001.20521-3-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::62f; envelope-from=frank.chang@sifive.com; helo=mail-pl1-x62f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Kito Cheng Signed-off-by: Kito Cheng Signed-off-by: Frank Chang Reviewed-by: Richard Henderson --- target/riscv/insn32-64.decode | 4 +++ target/riscv/insn32.decode | 7 +++- target/riscv/insn_trans/trans_rvb.c.inc | 47 +++++++++++++++++++++++++ target/riscv/translate.c | 42 ++++++++++++++++++++++ 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 target/riscv/insn_trans/trans_rvb.c.inc diff --git a/target/riscv/insn32-64.decode b/target/riscv/insn32-64.decode index 8157dee8b7c..f4c42720fc7 100644 --- a/target/riscv/insn32-64.decode +++ b/target/riscv/insn32-64.decode @@ -86,3 +86,7 @@ fmv_d_x 1111001 00000 ..... 000 ..... 1010011 @r2 hlv_wu 0110100 00001 ..... 100 ..... 1110011 @r2 hlv_d 0110110 00000 ..... 100 ..... 1110011 @r2 hsv_d 0110111 ..... ..... 100 00000 1110011 @r2_s + +# *** RV64B Standard Extension (in addition to RV32B) *** +clzw 0110000 00000 ..... 001 ..... 0011011 @r2 +ctzw 0110000 00001 ..... 001 ..... 0011011 @r2 diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 3823b3ea800..8fe838cf0d0 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -40,6 +40,7 @@ &i imm rs1 rd &j imm rd &r rd rs1 rs2 +&r2 rd rs1 &s imm rs1 rs2 &u imm rd &shift shamt rs1 rd @@ -67,7 +68,7 @@ @r4_rm ..... .. ..... ..... ... ..... ....... %rs3 %rs2 %rs1 %rm %rd @r_rm ....... ..... ..... ... ..... ....... %rs2 %rs1 %rm %rd @r2_rm ....... ..... ..... ... ..... ....... %rs1 %rm %rd -@r2 ....... ..... ..... ... ..... ....... %rs1 %rd +@r2 ....... ..... ..... ... ..... ....... &r2 %rs1 %rd @r2_nfvm ... ... vm:1 ..... ..... ... ..... ....... &r2nfvm %nf %rs1 %rd @r2_vm ...... vm:1 ..... ..... ... ..... ....... &rmr %rs2 %rd @r1_vm ...... vm:1 ..... ..... ... ..... ....... %rd @@ -592,3 +593,7 @@ vcompress_vm 010111 - ..... ..... 010 ..... 1010111 @r vsetvli 0 ........... ..... 111 ..... 1010111 @r2_zimm vsetvl 1000000 ..... ..... 111 ..... 1010111 @r + +# *** RV32B Standard Extension *** +clz 011000 000000 ..... 001 ..... 0010011 @r2 +ctz 011000 000001 ..... 001 ..... 0010011 @r2 diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc new file mode 100644 index 00000000000..76788c2f353 --- /dev/null +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -0,0 +1,47 @@ +/* + * RISC-V translation routines for the RVB Standard Extension. + * + * Copyright (c) 2020 Kito Cheng, kito.cheng@sifive.com + * Copyright (c) 2020 Frank Chang, frank.chang@sifive.com + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2 or later, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +static bool trans_clz(DisasContext *ctx, arg_clz *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_unary(ctx, a, gen_clz); +} + +static bool trans_ctz(DisasContext *ctx, arg_ctz *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_unary(ctx, a, gen_ctz); +} + +/* RV64-only instructions */ +#ifdef TARGET_RISCV64 + +static bool trans_clzw(DisasContext *ctx, arg_clzw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_unary(ctx, a, gen_clzw); +} + +static bool trans_ctzw(DisasContext *ctx, arg_ctzw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_unary(ctx, a, gen_ctzw); +} + +#endif diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 554d52a4be3..fac111d465c 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -711,6 +711,23 @@ static bool gen_arith_div_uw(DisasContext *ctx, arg_r *a, #endif +#ifdef TARGET_RISCV64 + +static void gen_ctzw(TCGv ret, TCGv arg1) +{ + tcg_gen_ori_i64(ret, arg1, MAKE_64BIT_MASK(32, 32)); + tcg_gen_ctzi_i64(ret, ret, 64); +} + +static void gen_clzw(TCGv ret, TCGv arg1) +{ + tcg_gen_ext32u_i64(ret, arg1); + tcg_gen_clzi_i64(ret, ret, 64); + tcg_gen_subi_i64(ret, ret, 32); +} + +#endif + static bool gen_arith(DisasContext *ctx, arg_r *a, void(*func)(TCGv, TCGv, TCGv)) { @@ -747,6 +764,30 @@ static bool gen_shift(DisasContext *ctx, arg_r *a, return true; } +static void gen_ctz(TCGv ret, TCGv arg1) +{ + tcg_gen_ctzi_tl(ret, arg1, TARGET_LONG_BITS); +} + +static void gen_clz(TCGv ret, TCGv arg1) +{ + tcg_gen_clzi_tl(ret, arg1, TARGET_LONG_BITS); +} + +static bool gen_unary(DisasContext *ctx, arg_r2 *a, + void(*func)(TCGv, TCGv)) +{ + TCGv source = tcg_temp_new(); + + gen_get_gpr(source, a->rs1); + + (*func)(source, source); + + gen_set_gpr(a->rd, source); + tcg_temp_free(source); + return true; +} + /* Include insn module translation function */ #include "insn_trans/trans_rvi.c.inc" #include "insn_trans/trans_rvm.c.inc" @@ -755,6 +796,7 @@ static bool gen_shift(DisasContext *ctx, arg_r *a, #include "insn_trans/trans_rvd.c.inc" #include "insn_trans/trans_rvh.c.inc" #include "insn_trans/trans_rvv.c.inc" +#include "insn_trans/trans_rvb.c.inc" #include "insn_trans/trans_privileged.c.inc" /* Include the auto-generated decoder for 16 bit insn */ From patchwork Tue Jan 12 02:19:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424949 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=cGWExW/7; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFDxk729Nz9sX5 for ; Tue, 12 Jan 2021 13:27:38 +1100 (AEDT) Received: from localhost ([::1]:41008 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9PE-0007Pk-1O for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:27:36 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:57788) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9IM-0000b6-Kd for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:30 -0500 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]:33074) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9IL-00023A-06 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:30 -0500 Received: by mail-pl1-x62d.google.com with SMTP id b8so581005plx.0 for ; Mon, 11 Jan 2021 18:20:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=wuNjl3EjuCZSjORBEPTCtDvkvtn3BPGc4wwp49Q4nUg=; b=cGWExW/7DtVhYtewmhfXtATJtaKUYo8IoNl/TkhyUF7vx+wjh/Y/w2dtdrJhLBkLfE GWlUtjurJZAB3JCELmC0Ri05WhUTfrJSuX6g8iW+M0mdpPGg3dHkxgQtYfFqEAsNxjpj KiMwSnxszh6+TOg2lPq90aowtSOIozec1KDcaoCiWmT/it91sx9yNIUDxnZfOxaJXLXr O5vCGXk2cw7cfkn7I798B/jen5TZv4JHsYJccGiWjW+zRbq8AJtc9fxUrZ5zStUOYMv4 GSBbDAUKqOgDk1hgCCiggBVtyxBHek5faceSUwwWRvXTOrZ3NkCyJ36rJDrGsHBx3RBM lPnQ== 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=wuNjl3EjuCZSjORBEPTCtDvkvtn3BPGc4wwp49Q4nUg=; b=ch5J2PHEDNjcYMrwgdDSXer6zXswF2HcCTwLZtxWzEZDQkNXJOvwqnao9i0lt14e4Z 5spaWsHgbGQXfycKN7nibOljKvXXjT7ozpuggAw2P/PzybPyiZTdKXgFG9wRBtc2i5bC 70+k88hrTttD2cVYGhXxOevWzW+19uupwgUBmTRT5Bydq66KunF5k7nU5hPZBoeRSaun GMF4Iskjzb45d+XQmKYV6wtT5EM6O54HUR6R5RhtCAxs5fB6Oy9gCAtlsf3DfB1Kr/90 Ns0zYtFYWqK4/XUQ8A246MEEmqO7GWLkL1TB0K7jwMaaIUn16/UbDe71lvaM5RyCHq1Y F0QA== X-Gm-Message-State: AOAM533JDCfJKxxZyDuo8Krr2RT+K7unzaUxra38tV6Mnjsl2SByb3XM 7YQlJwdwdpjfBNbetdlF4G4pmoa+m2WNLbNV X-Google-Smtp-Source: ABdhPJxdzl54RRs7ISSg2tNuPVNWnYLaNyh2EymrT5o5ce7D6JnI/BmhGYG/FaEbmQEWocaUmatXqQ== X-Received: by 2002:a17:90a:4887:: with SMTP id b7mr1929860pjh.40.1610418027492; Mon, 11 Jan 2021 18:20:27 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.20.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:20:27 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 03/16] target/riscv: rvb: count bits set Date: Tue, 12 Jan 2021 10:19:44 +0800 Message-Id: <20210112022001.20521-4-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=frank.chang@sifive.com; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Frank Chang Signed-off-by: Kito Cheng Reviewed-by: Richard Henderson Signed-off-by: Frank Chang --- target/riscv/insn32-64.decode | 1 + target/riscv/insn32.decode | 1 + target/riscv/insn_trans/trans_rvb.c.inc | 12 ++++++++++++ target/riscv/translate.c | 6 ++++++ 4 files changed, 20 insertions(+) diff --git a/target/riscv/insn32-64.decode b/target/riscv/insn32-64.decode index f4c42720fc7..89498a9a28a 100644 --- a/target/riscv/insn32-64.decode +++ b/target/riscv/insn32-64.decode @@ -90,3 +90,4 @@ hsv_d 0110111 ..... ..... 100 00000 1110011 @r2_s # *** RV64B Standard Extension (in addition to RV32B) *** clzw 0110000 00000 ..... 001 ..... 0011011 @r2 ctzw 0110000 00001 ..... 001 ..... 0011011 @r2 +cpopw 0110000 00010 ..... 001 ..... 0011011 @r2 diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 8fe838cf0d0..0e321da37f4 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -597,3 +597,4 @@ vsetvl 1000000 ..... ..... 111 ..... 1010111 @r # *** RV32B Standard Extension *** clz 011000 000000 ..... 001 ..... 0010011 @r2 ctz 011000 000001 ..... 001 ..... 0010011 @r2 +cpop 011000 000010 ..... 001 ..... 0010011 @r2 diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc index 76788c2f353..dbbd94e1015 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -29,6 +29,12 @@ static bool trans_ctz(DisasContext *ctx, arg_ctz *a) return gen_unary(ctx, a, gen_ctz); } +static bool trans_cpop(DisasContext *ctx, arg_cpop *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_unary(ctx, a, tcg_gen_ctpop_tl); +} + /* RV64-only instructions */ #ifdef TARGET_RISCV64 @@ -44,4 +50,10 @@ static bool trans_ctzw(DisasContext *ctx, arg_ctzw *a) return gen_unary(ctx, a, gen_ctzw); } +static bool trans_cpopw(DisasContext *ctx, arg_cpopw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_unary(ctx, a, gen_cpopw); +} + #endif diff --git a/target/riscv/translate.c b/target/riscv/translate.c index fac111d465c..3a14bdba194 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -726,6 +726,12 @@ static void gen_clzw(TCGv ret, TCGv arg1) tcg_gen_subi_i64(ret, ret, 32); } +static void gen_cpopw(TCGv ret, TCGv arg1) +{ + tcg_gen_ext32u_tl(arg1, arg1); + tcg_gen_ctpop_tl(ret, arg1); +} + #endif static bool gen_arith(DisasContext *ctx, arg_r *a, From patchwork Tue Jan 12 02:19:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424946 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=iSmshtd/; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFDtX2Hphz9sX5 for ; Tue, 12 Jan 2021 13:24:51 +1100 (AEDT) Received: from localhost ([::1]:33570 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9MX-0004Kn-K6 for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:24:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:57828) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9IQ-0000jz-OY for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:34 -0500 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]:44401) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9IP-00025j-6b for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:34 -0500 Received: by mail-pg1-x52d.google.com with SMTP id p18so402165pgm.11 for ; Mon, 11 Jan 2021 18:20:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=LYFX1Fk92ZBhuAVoO34Iqpx/R5IXhMUMVKbqKlhMECA=; b=iSmshtd/0Ug29YyGo3uB/iZo6rP32JroydKHJEMFRkuIk68Kb10kCsc/vSxNfcPseo +5OkLUG6U/dWBkKL3SewGeJ+qQc+/9XBicozjD/dU+3UpLCKXtgXL3ErW8cowBWWLjpu 8r5pckwdeeTfOKRtgsoo0ipvDyiDXU+lqI6V5rSzhtYtfOQMmlHchLHBJS/5a+iWCud2 zJb2vM3IKg42HL7z+zuLoVLxzq6+q4v3vfSpVElbF+GiUR4VIxnqWIKS+g8++bhL57p6 ZHvMBXOQFotxnU463/YHpKyzVZleQ5M7B+VbYQDWLII3Rr/nZAGlRYhITt06ORUp4/86 EVsw== 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=LYFX1Fk92ZBhuAVoO34Iqpx/R5IXhMUMVKbqKlhMECA=; b=dbQsVFnOma+qzaezN2jhKte1+pVppVq4iyUwIewLaiw7Zvp1gKlfGe6jVbUgcWUSKh 0TBAsn/yg1Xpw75alJw3CXSuBxYCfMXCFjfHCgHplLltVTv3m3fBPF4fVP5zZEwxMx0U jOGXG+rnZ2f3y1tiCdPdY5Vi2JuSMFjRn90URKA8/8arxX9WDHnX0I267Y8KVhDHs5tR wXZfvqlGl6nSsnYhyU97JFju1S/S4YYabHlo/tGxRkweyxisY0NUSluR4sAyceiAUDpA JyGLSaFr13BhCGVC7rqjO/x2quC9rcVBLbZjrqgD2stCBZ0iFx9AUn0qMG/gntNZVLAe cinA== X-Gm-Message-State: AOAM5329eJSaAWrTs6xYx5G33wlKjVSQJtZtDnbZJsReYByxHCSaVzU7 HTv9DpzRVndBmff0BhXqGHOcfusXXyOl8Yx/ X-Google-Smtp-Source: ABdhPJysnS0BQWfzFVulSdKHBRQxcjp1h6kLgIyeJW5iIs/c/2NRxA9hTIRoQwEcZeD6bLRAbbU8UA== X-Received: by 2002:a63:4346:: with SMTP id q67mr2341844pga.223.1610418031747; Mon, 11 Jan 2021 18:20:31 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.20.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:20:31 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 04/16] target/riscv: rvb: logic-with-negate Date: Tue, 12 Jan 2021 10:19:45 +0800 Message-Id: <20210112022001.20521-5-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::52d; envelope-from=frank.chang@sifive.com; helo=mail-pg1-x52d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Kito Cheng Signed-off-by: Kito Cheng Signed-off-by: Frank Chang Reviewed-by: Richard Henderson --- target/riscv/insn32.decode | 4 ++++ target/riscv/insn_trans/trans_rvb.c.inc | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 0e321da37f4..d0b3f109b4e 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -598,3 +598,7 @@ vsetvl 1000000 ..... ..... 111 ..... 1010111 @r clz 011000 000000 ..... 001 ..... 0010011 @r2 ctz 011000 000001 ..... 001 ..... 0010011 @r2 cpop 011000 000010 ..... 001 ..... 0010011 @r2 + +andn 0100000 .......... 111 ..... 0110011 @r +orn 0100000 .......... 110 ..... 0110011 @r +xnor 0100000 .......... 100 ..... 0110011 @r diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc index dbbd94e1015..73c4693a263 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -35,6 +35,24 @@ static bool trans_cpop(DisasContext *ctx, arg_cpop *a) return gen_unary(ctx, a, tcg_gen_ctpop_tl); } +static bool trans_andn(DisasContext *ctx, arg_andn *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, tcg_gen_andc_tl); +} + +static bool trans_orn(DisasContext *ctx, arg_orn *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, tcg_gen_orc_tl); +} + +static bool trans_xnor(DisasContext *ctx, arg_xnor *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, tcg_gen_eqv_tl); +} + /* RV64-only instructions */ #ifdef TARGET_RISCV64 From patchwork Tue Jan 12 02:19:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424953 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=AI2tPDFp; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFF1J1DJVz9sX5 for ; Tue, 12 Jan 2021 13:30:44 +1100 (AEDT) Received: from localhost ([::1]:50098 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9SE-0002jX-4r for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:30:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:57894) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9IV-0000v7-PR for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:39 -0500 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:33747) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9IU-00026S-0u for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:39 -0500 Received: by mail-pj1-x1031.google.com with SMTP id w1so807926pjc.0 for ; Mon, 11 Jan 2021 18:20:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vI4PT95qFC5cOpQqvpiMt5k7T9r484Z0BZTxnN6cUx8=; b=AI2tPDFp/PPL3n7P7whv0Ihmp91v8XAFFZG18nhjYk7hrzl0Qp/bqukGMc1NXt7ouN /Go/dfXl/IYWp80U0MWVWsDZ4++/X/6kwGidWuFIff1A2plRrcAXE6haxjqe0QCgMM/z sr3NbY7vncBwFA5W79wSSHZ14nJSYswQvuSOsYKvq+RV07v9nMO7EIw1b1mBf9AskSHg MhkrKfnPh0CO19oXsoNVBDc0DcGPPhdwjhABiae0uIbcAotaD9QR4srCuWN75Vqm/WTe sUg9TmhxLj7sQL4nLljkJ2HKyDHi6hPVbguMy9qAgqL8q8jWT3GUTMkLosj+ITw5i0XF JLrQ== 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=vI4PT95qFC5cOpQqvpiMt5k7T9r484Z0BZTxnN6cUx8=; b=FVjl9iNB1C03UKXYqmGO9K+GkmjRU8vkC9UbRfyDnDTd+z1gCIQDIv1fIbuOJxh2MZ NWof/iSyALd6UYPeuXLXpxZ0gLe4tXXKHwwXuPrU/tr4VwqK6b+4W1QLb+0v37D2u1Pl ZXfCbgsNFVgRQwztyfhxQylMsUSkc4c1ooYrSuoxIfSW46MlPc3p29ScRHYXss25X25S kOWdn1BEUsJKd3FILYh9FBCjFaaM/VRJFK40TpTS6m3Rn5XC2R1S3fSZr11zC4ujHF8q 77k7dJWeCxr9xVXxeu9z464/v0ylSmGWPBPbCJmH0dC3gnI9f4PDeD7N4axBj0MI8dbo UvVQ== X-Gm-Message-State: AOAM530PXsRX+q+vo5MZNlZ7D0WJv2S3pos3xU4daUoNN6I+VTL7ieSw CC8K4VgEuuAm1/sMd9BWb1YiH9/DdghqeEU+ X-Google-Smtp-Source: ABdhPJyYfVOzM1avGrJ9ent9jfeAIn22bGm+qVeKCHbb2nKx6VvntON9UnZWvIeqJeY0TqELcTzt8w== X-Received: by 2002:a17:90a:c084:: with SMTP id o4mr1920727pjs.165.1610418036470; Mon, 11 Jan 2021 18:20:36 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.20.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:20:35 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 05/16] target/riscv: rvb: pack two words into one register Date: Tue, 12 Jan 2021 10:19:46 +0800 Message-Id: <20210112022001.20521-6-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=frank.chang@sifive.com; helo=mail-pj1-x1031.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Kito Cheng Signed-off-by: Kito Cheng Signed-off-by: Frank Chang Reviewed-by: Richard Henderson --- target/riscv/insn32-64.decode | 3 ++ target/riscv/insn32.decode | 3 ++ target/riscv/insn_trans/trans_rvb.c.inc | 30 +++++++++++++++++++ target/riscv/translate.c | 40 +++++++++++++++++++++++++ 4 files changed, 76 insertions(+) diff --git a/target/riscv/insn32-64.decode b/target/riscv/insn32-64.decode index 89498a9a28a..d28c0bcf2c1 100644 --- a/target/riscv/insn32-64.decode +++ b/target/riscv/insn32-64.decode @@ -91,3 +91,6 @@ hsv_d 0110111 ..... ..... 100 00000 1110011 @r2_s clzw 0110000 00000 ..... 001 ..... 0011011 @r2 ctzw 0110000 00001 ..... 001 ..... 0011011 @r2 cpopw 0110000 00010 ..... 001 ..... 0011011 @r2 + +packw 0000100 .......... 100 ..... 0111011 @r +packuw 0100100 .......... 100 ..... 0111011 @r diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index d0b3f109b4e..7f32b8c6d15 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -602,3 +602,6 @@ cpop 011000 000010 ..... 001 ..... 0010011 @r2 andn 0100000 .......... 111 ..... 0110011 @r orn 0100000 .......... 110 ..... 0110011 @r xnor 0100000 .......... 100 ..... 0110011 @r +pack 0000100 .......... 100 ..... 0110011 @r +packu 0100100 .......... 100 ..... 0110011 @r +packh 0000100 .......... 111 ..... 0110011 @r diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc index 73c4693a263..2d24dafac09 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -53,6 +53,24 @@ static bool trans_xnor(DisasContext *ctx, arg_xnor *a) return gen_arith(ctx, a, tcg_gen_eqv_tl); } +static bool trans_pack(DisasContext *ctx, arg_pack *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, gen_pack); +} + +static bool trans_packu(DisasContext *ctx, arg_packu *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, gen_packu); +} + +static bool trans_packh(DisasContext *ctx, arg_packh *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, gen_packh); +} + /* RV64-only instructions */ #ifdef TARGET_RISCV64 @@ -74,4 +92,16 @@ static bool trans_cpopw(DisasContext *ctx, arg_cpopw *a) return gen_unary(ctx, a, gen_cpopw); } +static bool trans_packw(DisasContext *ctx, arg_packw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, gen_packw); +} + +static bool trans_packuw(DisasContext *ctx, arg_packuw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, gen_packuw); +} + #endif diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 3a14bdba194..53c0c34ce16 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -711,6 +711,29 @@ static bool gen_arith_div_uw(DisasContext *ctx, arg_r *a, #endif +static void gen_pack(TCGv ret, TCGv arg1, TCGv arg2) +{ + tcg_gen_deposit_tl(ret, arg1, arg2, + TARGET_LONG_BITS / 2, + TARGET_LONG_BITS / 2); +} + +static void gen_packu(TCGv ret, TCGv arg1, TCGv arg2) +{ + TCGv t = tcg_temp_new(); + tcg_gen_shri_tl(t, arg1, TARGET_LONG_BITS / 2); + tcg_gen_deposit_tl(ret, arg2, t, 0, TARGET_LONG_BITS / 2); + tcg_temp_free(t); +} + +static void gen_packh(TCGv ret, TCGv arg1, TCGv arg2) +{ + TCGv t = tcg_temp_new(); + tcg_gen_ext8u_tl(t, arg2); + tcg_gen_deposit_tl(ret, arg1, t, 8, TARGET_LONG_BITS - 8); + tcg_temp_free(t); +} + #ifdef TARGET_RISCV64 static void gen_ctzw(TCGv ret, TCGv arg1) @@ -732,6 +755,23 @@ static void gen_cpopw(TCGv ret, TCGv arg1) tcg_gen_ctpop_tl(ret, arg1); } +static void gen_packw(TCGv ret, TCGv arg1, TCGv arg2) +{ + TCGv t = tcg_temp_new(); + tcg_gen_ext16s_i64(t, arg2); + tcg_gen_deposit_i64(ret, arg1, t, 16, 48); + tcg_temp_free(t); +} + +static void gen_packuw(TCGv ret, TCGv arg1, TCGv arg2) +{ + TCGv t = tcg_temp_new(); + tcg_gen_shri_i64(t, arg1, 16); + tcg_gen_deposit_i64(ret, arg2, t, 0, 16); + tcg_gen_ext32s_i64(ret, ret); + tcg_temp_free(t); +} + #endif static bool gen_arith(DisasContext *ctx, arg_r *a, From patchwork Tue Jan 12 02:19:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424943 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=GJZ8Uph0; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFDqC3sr3z9sX5 for ; Tue, 12 Jan 2021 13:21:59 +1100 (AEDT) Received: from localhost ([::1]:53914 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9Jl-00012B-Hc for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:21:57 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:57946) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9If-0000yT-E2 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:52 -0500 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]:33073) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9IY-000277-FQ for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:44 -0500 Received: by mail-pl1-x62b.google.com with SMTP id b8so581251plx.0 for ; Mon, 11 Jan 2021 18:20:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=RraFfTNt+SH5tIi672hGt9gZVL+nLzbf3TvbyQmG2ss=; b=GJZ8Uph0uvMvprkuNJHQT9mmvXL+NmackZN5+SBO6Gp4oUg81+tjequm/k18V7TNUi IReLapVoWA/kFpzGyjQta6Mdrfg3w1kI3P2fsaJlHxDhzrh1cbSLKz7cqFWJYCXn8/bF wOFDR/WTphWcxQ3wB96w2XXfnaVVVOKEw8/CP32d2Og2j+qvTXk4/41R2uOZ3MvSxaUQ p5clnHixQPCLMiX+xqsI/982smZOQuIaM/fZTT9Av4CTtcKfOvegwb9AEnGlPS+EJEt4 TlaACKDsTxVFHSxpuCOlASayS9n9GPt/FH8P+8bMQldFDhlnSUVkXegIqlKfCYl4EU0w 3hWw== 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=RraFfTNt+SH5tIi672hGt9gZVL+nLzbf3TvbyQmG2ss=; b=WTbT32fUfP5gVDNpH5ufA5f8vA0khwulbEjrOaP+QG4yi4ShCorYKNuVTCGv/dBauD Ce8dKoQpoL7VwxXq4mYWoP6B2bf550CQvMVbAapQRbIlaZfjXejdURuTnFdjejxf37UR /FeMp+RjZHuWv2b56BPU6OuUxNIuX/T02hdWa3VMf7I6yObwU62uzdHfowoi+06bcZda 1kGOUYDPnWl8IFTdal34PrupJQCW2MPjWzks7AlZNnVy+CQ0KahR/ih2RLB+6l0CWoDK S3xhwj5XPkWeAmxbVUraYc1wMhb6+XH9NuII3woTzILlqbA1yhJXMVY9yI+djg77+07T da2g== X-Gm-Message-State: AOAM5320FYiq1yMTVtKAZm6RJJfVD2rCQCGwUTHhoEyHsSyUhuOcyA58 HljOQ8TmqGID+k6fF1jfbYA+sFZu0cFXr7R/ X-Google-Smtp-Source: ABdhPJxpJVJ6x2FB5FoPXUB2CXIvRwZUJEG1IEXpiZwkhX8w7h/diaWNb6sLea9Ph0KzjDDuBke8ug== X-Received: by 2002:a17:90a:7085:: with SMTP id g5mr1932677pjk.132.1610418041008; Mon, 11 Jan 2021 18:20:41 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.20.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:20:40 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 06/16] target/riscv: rvb: min/max instructions Date: Tue, 12 Jan 2021 10:19:47 +0800 Message-Id: <20210112022001.20521-7-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=frank.chang@sifive.com; helo=mail-pl1-x62b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Kito Cheng Signed-off-by: Kito Cheng Reviewed-by: Richard Henderson Signed-off-by: Frank Chang --- target/riscv/insn32.decode | 4 ++++ target/riscv/insn_trans/trans_rvb.c.inc | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 7f32b8c6d15..d64326fd864 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -605,3 +605,7 @@ xnor 0100000 .......... 100 ..... 0110011 @r pack 0000100 .......... 100 ..... 0110011 @r packu 0100100 .......... 100 ..... 0110011 @r packh 0000100 .......... 111 ..... 0110011 @r +min 0000101 .......... 100 ..... 0110011 @r +minu 0000101 .......... 101 ..... 0110011 @r +max 0000101 .......... 110 ..... 0110011 @r +maxu 0000101 .......... 111 ..... 0110011 @r diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc index 2d24dafac09..2aa4515fe31 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -71,6 +71,30 @@ static bool trans_packh(DisasContext *ctx, arg_packh *a) return gen_arith(ctx, a, gen_packh); } +static bool trans_min(DisasContext *ctx, arg_min *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, tcg_gen_smin_tl); +} + +static bool trans_max(DisasContext *ctx, arg_max *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, tcg_gen_smax_tl); +} + +static bool trans_minu(DisasContext *ctx, arg_minu *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, tcg_gen_umin_tl); +} + +static bool trans_maxu(DisasContext *ctx, arg_maxu *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, tcg_gen_umax_tl); +} + /* RV64-only instructions */ #ifdef TARGET_RISCV64 From patchwork Tue Jan 12 02:19:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424950 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=Zgk5gKtL; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFDyC3xh3z9sXV for ; Tue, 12 Jan 2021 13:28:03 +1100 (AEDT) Received: from localhost ([::1]:43100 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9Pd-0008J1-HH for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:28:01 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58050) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9Io-0000yv-Rb for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:00 -0500 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]:38274) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9Ie-00029v-Hp for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:20:56 -0500 Received: by mail-pg1-x52d.google.com with SMTP id q7so423555pgm.5 for ; Mon, 11 Jan 2021 18:20:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0zrnOavVe6XnQO96zzyHm13OUa7JpL0pUTrhRmvRqro=; b=Zgk5gKtL9E6rrgTfbk/2B9Bisx7I4g5EDyoeHjEDYvzSAc5tcr9sBzi4FuzT2gqffd xLk6iqJFjHqmN7RgjhX8j0pnGsu4Ii3SBHNU6voopgKM9XXYPoyPwkg2kYTGwBZXj+5A PDH3xRaPZP5GuqTGSTXIOV0jJk1o2CmJX6Ov/mYox8OtznKCIGcbmZIhJYwm+HYhC5+I mWtnEjDW912ETrDdeE4ZngPT6VZMYme7QoXBp2ZJvKKc1oy9QdewBxwLDxjdnyV6D5Va s/XsUPipQJDTNUSASiGZVWI2n3A/7Fft5LW7b3goS7XJ71ByDDGmsjlUYwmI9ROu9rpt MqOA== 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=0zrnOavVe6XnQO96zzyHm13OUa7JpL0pUTrhRmvRqro=; b=QIRHlc174Ib5Z1JJ3pP9HJqQPhYEwfZkGQylzS0kG9WBJPsl/8QCyxmlHeLvhWMh+T ULZUcG++iy79GJ/qaZ7YfzUr2WaFzP+hdXqheV0caY/YCbGCdYFLD+b/PA+5vgi7hWu9 aTR7jGZ9NCrUZoR1JjEJbqFspvGXNstb++2ESU3vvr5KnYg6a9zY31iH3miXEbEDTdEe elW0MNaCQ51ZdWC4mRI5b3qmGfvoGQ20PfD7Y/9ntdgUgr1J8iYncHvHZFdwcRvnxLoR 62zGzwpDELgf5CsETOfiuFNDUMR9PmPq/lZD/8RQ05ILyl5qH7Qcn16GuUtl7cnnc+/n XNfA== X-Gm-Message-State: AOAM530OhXaEbYT0sSdE0+0dPqPvDXz4duyn+Lg7YvEN0d9Jo6O6VeDg PYX57dFqQ9/Kctl4JknTHvWQ2CIrOO49C0iL X-Google-Smtp-Source: ABdhPJyvobBozlydY7fRYp+1Du7jq5hU00dgajEyOpbT9dq7uqBfE2K+dbOWwnBjlj5HX0PGVJ0vnw== X-Received: by 2002:a05:6a00:44:b029:19d:e250:1355 with SMTP id i4-20020a056a000044b029019de2501355mr2313984pfk.36.1610418045186; Mon, 11 Jan 2021 18:20:45 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.20.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:20:44 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 07/16] target/riscv: rvb: sign-extend instructions Date: Tue, 12 Jan 2021 10:19:48 +0800 Message-Id: <20210112022001.20521-8-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::52d; envelope-from=frank.chang@sifive.com; helo=mail-pg1-x52d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Kito Cheng Signed-off-by: Kito Cheng Reviewed-by: Richard Henderson Signed-off-by: Frank Chang --- target/riscv/insn32.decode | 2 ++ target/riscv/insn_trans/trans_rvb.c.inc | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index d64326fd864..938c23088eb 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -598,6 +598,8 @@ vsetvl 1000000 ..... ..... 111 ..... 1010111 @r clz 011000 000000 ..... 001 ..... 0010011 @r2 ctz 011000 000001 ..... 001 ..... 0010011 @r2 cpop 011000 000010 ..... 001 ..... 0010011 @r2 +sext_b 011000 000100 ..... 001 ..... 0010011 @r2 +sext_h 011000 000101 ..... 001 ..... 0010011 @r2 andn 0100000 .......... 111 ..... 0110011 @r orn 0100000 .......... 110 ..... 0110011 @r diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc index 2aa4515fe31..1496996a660 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -95,6 +95,18 @@ static bool trans_maxu(DisasContext *ctx, arg_maxu *a) return gen_arith(ctx, a, tcg_gen_umax_tl); } +static bool trans_sext_b(DisasContext *ctx, arg_sext_b *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_unary(ctx, a, tcg_gen_ext8s_tl); +} + +static bool trans_sext_h(DisasContext *ctx, arg_sext_h *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_unary(ctx, a, tcg_gen_ext16s_tl); +} + /* RV64-only instructions */ #ifdef TARGET_RISCV64 From patchwork Tue Jan 12 02:19:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424944 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=egI5yo2F; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFDqk4vdlz9sX5 for ; Tue, 12 Jan 2021 13:22:26 +1100 (AEDT) Received: from localhost ([::1]:54406 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9KC-0001G2-Bz for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:22:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58102) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9It-000119-Ae for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:03 -0500 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:42186) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9Ij-0002Cb-Fr for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:03 -0500 Received: by mail-pf1-x433.google.com with SMTP id h10so448404pfo.9 for ; Mon, 11 Jan 2021 18:20:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=J88EfHnkgaDqglpHzFIx/TsUyRcYxAOR3TBWd0dXw+s=; b=egI5yo2FwWpA4s2ZeCzcfFA0N68ATeDddI2TtHH45gvFXKvcoHwVmo3ZuhbUqMUWq/ wjDQWfU53WsJAEydNvLB7ekPm/yodKy2Bz+oH/Nc2n6D7VFbCVOecgPPeOiqotPz7H9C bafcL0BOAopP4NdPtLwYhM2Ukv8VvyE4eDDkdiLp8telqjnOINfKW4dpIBi9Wwxbk1qm SBs3bLDsMtkbnUfl7/TDNYZp8JYkKLz7i6kv3qVa8YIKTL89MHwMFZgBUUEaUNa4XBGp z4m4c7FXPelhLm8hE4gT/3FRu6uuTUW9x6pCe667+GyJgrDocWc3R5gm7dnITiyD/18j OyfA== 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=J88EfHnkgaDqglpHzFIx/TsUyRcYxAOR3TBWd0dXw+s=; b=oYDySGYFvlpk5mJRl5YnJWtW8bkB+dgg3VCdwdx/b+cdLMQoQueEATJRuqm2VSiEwz bOR4tApL16GjWmVWLAlxmJ8Igt+eT85fGURjZW+L7B8fjTfiLcooLhap13BScssWcf3c zQkoni7lxnFrzZ3AkGDrvPeTNH9vYcI3SAm6w/cPBW2+3HXXzndw92ECoh0X4ob5Moi8 poUn2eFcOj7cjxrRseJ0iDEA59nyJKsPHfYxms8v43hiwqQeJyU07iqXdCvNJ3M3rMH4 jhAqnXjlaUpB/LIxpeu3u8CENzqU4yH/bovv1pewDByGqs/ydZ5hXiMTRSAd2rfU2qD/ oGrw== X-Gm-Message-State: AOAM531SQOJpe1sBQIMZbJS6BLdOPBUuJelOxy4rK/qtqqV8EtRZWnlG I92Arh/eSFRsaRGx6ImEvITFOwauOX/4Q/FR X-Google-Smtp-Source: ABdhPJy1okOLoEzI7i3Cz2yCZg+LU1eIWKiY/cjQ6TErSUXNvlHs4e8PEsKYZK/ty+74ilnv+y3xvw== X-Received: by 2002:a62:25c7:0:b029:156:72a3:b0c0 with SMTP id l190-20020a6225c70000b029015672a3b0c0mr2226677pfl.59.1610418049401; Mon, 11 Jan 2021 18:20:49 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.20.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:20:48 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 08/16] target/riscv: add gen_shifti() and gen_shiftiw() helper functions Date: Tue, 12 Jan 2021 10:19:49 +0800 Message-Id: <20210112022001.20521-9-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::433; envelope-from=frank.chang@sifive.com; helo=mail-pf1-x433.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Alistair Francis , Paolo Bonzini , Palmer Dabbelt Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Frank Chang Add gen_shifti() and gen_shiftiw() helper functions to reuse the same interfaces for immediate shift instructions. Signed-off-by: Frank Chang --- target/riscv/insn_trans/trans_rvi.c.inc | 45 +++---------------------- target/riscv/translate.c | 43 +++++++++++++++++++++++ 2 files changed, 47 insertions(+), 41 deletions(-) diff --git a/target/riscv/insn_trans/trans_rvi.c.inc b/target/riscv/insn_trans/trans_rvi.c.inc index d04ca0394cf..678c8f07238 100644 --- a/target/riscv/insn_trans/trans_rvi.c.inc +++ b/target/riscv/insn_trans/trans_rvi.c.inc @@ -261,52 +261,24 @@ static bool trans_andi(DisasContext *ctx, arg_andi *a) } static bool trans_slli(DisasContext *ctx, arg_slli *a) { - if (a->shamt >= TARGET_LONG_BITS) { - return false; - } - if (a->rd != 0) { - TCGv t = tcg_temp_new(); - gen_get_gpr(t, a->rs1); - - tcg_gen_shli_tl(t, t, a->shamt); - - gen_set_gpr(a->rd, t); - tcg_temp_free(t); + return gen_shifti(ctx, a, tcg_gen_shl_tl); } /* NOP otherwise */ return true; } static bool trans_srli(DisasContext *ctx, arg_srli *a) { - if (a->shamt >= TARGET_LONG_BITS) { - return false; - } - if (a->rd != 0) { - TCGv t = tcg_temp_new(); - gen_get_gpr(t, a->rs1); - - tcg_gen_shri_tl(t, t, a->shamt); - gen_set_gpr(a->rd, t); - tcg_temp_free(t); + return gen_shifti(ctx, a, tcg_gen_shr_tl); } /* NOP otherwise */ return true; } static bool trans_srai(DisasContext *ctx, arg_srai *a) { - if (a->shamt >= TARGET_LONG_BITS) { - return false; - } - if (a->rd != 0) { - TCGv t = tcg_temp_new(); - gen_get_gpr(t, a->rs1); - - tcg_gen_sari_tl(t, t, a->shamt); - gen_set_gpr(a->rd, t); - tcg_temp_free(t); + return gen_shifti(ctx, a, tcg_gen_sar_tl); } /* NOP otherwise */ return true; } @@ -369,16 +341,7 @@ static bool trans_addiw(DisasContext *ctx, arg_addiw *a) static bool trans_slliw(DisasContext *ctx, arg_slliw *a) { - TCGv source1; - source1 = tcg_temp_new(); - gen_get_gpr(source1, a->rs1); - - tcg_gen_shli_tl(source1, source1, a->shamt); - tcg_gen_ext32s_tl(source1, source1); - gen_set_gpr(a->rd, source1); - - tcg_temp_free(source1); - return true; + return gen_shiftiw(ctx, a, tcg_gen_shl_tl); } static bool trans_srliw(DisasContext *ctx, arg_srliw *a) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 53c0c34ce16..8459b6bcf54 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -810,6 +810,49 @@ static bool gen_shift(DisasContext *ctx, arg_r *a, return true; } +static bool gen_shifti(DisasContext *ctx, arg_shift *a, + void(*func)(TCGv, TCGv, TCGv)) +{ + if (a->shamt >= TARGET_LONG_BITS) { + return false; + } + + TCGv source1 = tcg_temp_new(); + TCGv source2 = tcg_temp_new(); + + gen_get_gpr(source1, a->rs1); + + tcg_gen_movi_tl(source2, a->shamt); + (*func)(source1, source1, source2); + + gen_set_gpr(a->rd, source1); + tcg_temp_free(source1); + tcg_temp_free(source2); + return true; +} + +#ifdef TARGET_RISCV64 + +static bool gen_shiftiw(DisasContext *ctx, arg_shift *a, + void(*func)(TCGv, TCGv, TCGv)) +{ + TCGv source1 = tcg_temp_new(); + TCGv source2 = tcg_temp_new(); + + gen_get_gpr(source1, a->rs1); + tcg_gen_movi_tl(source2, a->shamt); + + (*func)(source1, source1, source2); + tcg_gen_ext32s_tl(source1, source1); + + gen_set_gpr(a->rd, source1); + tcg_temp_free(source1); + tcg_temp_free(source2); + return true; +} + +#endif + static void gen_ctz(TCGv ret, TCGv arg1) { tcg_gen_ctzi_tl(ret, arg1, TARGET_LONG_BITS); From patchwork Tue Jan 12 02:19:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424954 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=imdqP5NM; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFF271yHGz9sXN for ; Tue, 12 Jan 2021 13:31:25 +1100 (AEDT) Received: from localhost ([::1]:51572 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9Ss-0003L4-6x for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:31:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58100) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9Is-00010E-RI for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:02 -0500 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]:35199) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9Im-0002DI-2v for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:01 -0500 Received: by mail-pf1-x435.google.com with SMTP id c79so467764pfc.2 for ; Mon, 11 Jan 2021 18:20:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=XsEEF3QSfQ82F3+3Tm9lvYmtLrlTq3rt/jF6UEMZ7VE=; b=imdqP5NMGxdJpzihxz+m0ukYR5fID+kQhTVqN2ibEax+Z2VExXBdbNQsNEWSdjzdhP 9TLh8tOLbL1wPADDWbwn6O1MEj2ot0MLG+pSNY8waYTsBRTw9CW+SiwJXmQFDsSdtAVD /+2PN33XIJRcvdwOHzlhKyW9+pnTTGSj9p6u8tHRdMcGuxY1CQ9+/ZWhgnanbuFo8gZh XWjxOgEpRARLPktHxDW8FDtDhU0ZoQnm22nkkqG1uEHHgak/t2hy0EyjRexUxoNWAp7w 97Y97qeME/ppWmalVao+oM1bdOb3umBnj+TjOjx9Sv6OD9aNzj/RAbjkg7o7VDZ1rbWb oxCw== 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=XsEEF3QSfQ82F3+3Tm9lvYmtLrlTq3rt/jF6UEMZ7VE=; b=h0Pw4JB1owXHqfFsJYiHaHzEOBqv9+NUdbbD4q7FUfLd8MwMnJBN+vu6c/gC6hPdag RP8De32pVTZBSSNHw8F5zs0JmPMS27UzSLCDdFS6SnAzz/qYqvmcy5LxwRArkC3oLUJV rqQzmKs2cn/kNfUH/sgMKOrhEwXfYDUL9IK3DzFZj1ho1gPqQMkwoMDsamvjj+fh74iu 7j2RrAfdQJx0ALtBvF9gTQlPBNe0R5yr9SFRFxuRwQHk+sqWgea0vsv+W2vnbxBB5wOD RWf7BLPzk0JtHjYUlI7JrhZ23tsuAFlsXTm4da6QFEYt2+KgRuE/r5wbUfbHgW/MfR/F 3pnQ== X-Gm-Message-State: AOAM531DbDH5Y0Z+gAd/J9jdk0Ot8zQ+C+pTKczRntf+7he8VwbKFmb1 P6p0PTXCdAT30Ur8XpvL3AcIHTSqsi4UBqyI X-Google-Smtp-Source: ABdhPJycdT255Et//V50ajVjG2tnYL5pbTukSOiPjNklP9dvnhLcNlrs13wXkEhVoh5ABTmE7dcgBQ== X-Received: by 2002:a62:8205:0:b029:19e:717c:d647 with SMTP id w5-20020a6282050000b029019e717cd647mr2308636pfd.50.1610418053863; Mon, 11 Jan 2021 18:20:53 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.20.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:20:53 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 09/16] target/riscv: rvb: single-bit instructions Date: Tue, 12 Jan 2021 10:19:50 +0800 Message-Id: <20210112022001.20521-10-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::435; envelope-from=frank.chang@sifive.com; helo=mail-pf1-x435.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Kito Cheng Signed-off-by: Kito Cheng Signed-off-by: Frank Chang Reviewed-by: Richard Henderson --- target/riscv/insn32-64.decode | 8 +++ target/riscv/insn32.decode | 9 +++ target/riscv/insn_trans/trans_rvb.c.inc | 90 +++++++++++++++++++++++++ target/riscv/translate.c | 61 +++++++++++++++++ 4 files changed, 168 insertions(+) diff --git a/target/riscv/insn32-64.decode b/target/riscv/insn32-64.decode index d28c0bcf2c1..f6c63c31b03 100644 --- a/target/riscv/insn32-64.decode +++ b/target/riscv/insn32-64.decode @@ -94,3 +94,11 @@ cpopw 0110000 00010 ..... 001 ..... 0011011 @r2 packw 0000100 .......... 100 ..... 0111011 @r packuw 0100100 .......... 100 ..... 0111011 @r +bsetw 0010100 .......... 001 ..... 0111011 @r +bclrw 0100100 .......... 001 ..... 0111011 @r +binvw 0110100 .......... 001 ..... 0111011 @r +bextw 0100100 .......... 101 ..... 0111011 @r + +bsetiw 0010100 .......... 001 ..... 0011011 @sh5 +bclriw 0100100 .......... 001 ..... 0011011 @sh5 +binviw 0110100 .......... 001 ..... 0011011 @sh5 diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 938c23088eb..64d2b057764 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -611,3 +611,12 @@ min 0000101 .......... 100 ..... 0110011 @r minu 0000101 .......... 101 ..... 0110011 @r max 0000101 .......... 110 ..... 0110011 @r maxu 0000101 .......... 111 ..... 0110011 @r +bset 0010100 .......... 001 ..... 0110011 @r +bclr 0100100 .......... 001 ..... 0110011 @r +binv 0110100 .......... 001 ..... 0110011 @r +bext 0100100 .......... 101 ..... 0110011 @r + +bseti 00101. ........... 001 ..... 0010011 @sh +bclri 01001. ........... 001 ..... 0010011 @sh +binvi 01101. ........... 001 ..... 0010011 @sh +bexti 01001. ........... 101 ..... 0010011 @sh diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc index 1496996a660..0c41f135dc6 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -107,6 +107,54 @@ static bool trans_sext_h(DisasContext *ctx, arg_sext_h *a) return gen_unary(ctx, a, tcg_gen_ext16s_tl); } +static bool trans_bset(DisasContext *ctx, arg_bset *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shift(ctx, a, gen_bset); +} + +static bool trans_bseti(DisasContext *ctx, arg_bseti *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shifti(ctx, a, gen_bset); +} + +static bool trans_bclr(DisasContext *ctx, arg_bclr *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shift(ctx, a, gen_bclr); +} + +static bool trans_bclri(DisasContext *ctx, arg_bclri *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shifti(ctx, a, gen_bclr); +} + +static bool trans_binv(DisasContext *ctx, arg_binv *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shift(ctx, a, gen_binv); +} + +static bool trans_binvi(DisasContext *ctx, arg_binvi *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shifti(ctx, a, gen_binv); +} + +static bool trans_bext(DisasContext *ctx, arg_bext *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shift(ctx, a, gen_bext); +} + +static bool trans_bexti(DisasContext *ctx, arg_bexti *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shifti(ctx, a, gen_bext); +} + /* RV64-only instructions */ #ifdef TARGET_RISCV64 @@ -140,4 +188,46 @@ static bool trans_packuw(DisasContext *ctx, arg_packuw *a) return gen_arith(ctx, a, gen_packuw); } +static bool trans_bsetw(DisasContext *ctx, arg_bsetw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftw(ctx, a, gen_bset); +} + +static bool trans_bsetiw(DisasContext *ctx, arg_bsetiw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftiw(ctx, a, gen_bset); +} + +static bool trans_bclrw(DisasContext *ctx, arg_bclrw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftw(ctx, a, gen_bclr); +} + +static bool trans_bclriw(DisasContext *ctx, arg_bclriw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftiw(ctx, a, gen_bclr); +} + +static bool trans_binvw(DisasContext *ctx, arg_binvw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftw(ctx, a, gen_binv); +} + +static bool trans_binviw(DisasContext *ctx, arg_binviw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftiw(ctx, a, gen_binv); +} + +static bool trans_bextw(DisasContext *ctx, arg_bextw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftw(ctx, a, gen_bext); +} + #endif diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 8459b6bcf54..7ea434ffa8d 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -734,6 +734,48 @@ static void gen_packh(TCGv ret, TCGv arg1, TCGv arg2) tcg_temp_free(t); } +static void gen_sbop_mask(TCGv ret, TCGv shamt) +{ + tcg_gen_movi_tl(ret, 1); + tcg_gen_shl_tl(ret, ret, shamt); +} + +static void gen_bset(TCGv ret, TCGv arg1, TCGv shamt) +{ + TCGv t = tcg_temp_new(); + + gen_sbop_mask(t, shamt); + tcg_gen_or_tl(ret, arg1, t); + + tcg_temp_free(t); +} + +static void gen_bclr(TCGv ret, TCGv arg1, TCGv shamt) +{ + TCGv t = tcg_temp_new(); + + gen_sbop_mask(t, shamt); + tcg_gen_andc_tl(ret, arg1, t); + + tcg_temp_free(t); +} + +static void gen_binv(TCGv ret, TCGv arg1, TCGv shamt) +{ + TCGv t = tcg_temp_new(); + + gen_sbop_mask(t, shamt); + tcg_gen_xor_tl(ret, arg1, t); + + tcg_temp_free(t); +} + +static void gen_bext(TCGv ret, TCGv arg1, TCGv shamt) +{ + tcg_gen_shr_tl(ret, arg1, shamt); + tcg_gen_andi_tl(ret, ret, 1); +} + #ifdef TARGET_RISCV64 static void gen_ctzw(TCGv ret, TCGv arg1) @@ -833,6 +875,25 @@ static bool gen_shifti(DisasContext *ctx, arg_shift *a, #ifdef TARGET_RISCV64 +static bool gen_shiftw(DisasContext *ctx, arg_r *a, + void(*func)(TCGv, TCGv, TCGv)) +{ + TCGv source1 = tcg_temp_new(); + TCGv source2 = tcg_temp_new(); + + gen_get_gpr(source1, a->rs1); + gen_get_gpr(source2, a->rs2); + + tcg_gen_andi_tl(source2, source2, 31); + (*func)(source1, source1, source2); + tcg_gen_ext32s_tl(source1, source1); + + gen_set_gpr(a->rd, source1); + tcg_temp_free(source1); + tcg_temp_free(source2); + return true; +} + static bool gen_shiftiw(DisasContext *ctx, arg_shift *a, void(*func)(TCGv, TCGv, TCGv)) { From patchwork Tue Jan 12 02:19:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424956 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=Sl7y/pTE; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFF5g02DZz9sX5 for ; Tue, 12 Jan 2021 13:34:31 +1100 (AEDT) Received: from localhost ([::1]:57752 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9Vt-00062C-0b for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:34:29 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58156) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9Iu-00014E-Ep for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:04 -0500 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:40729) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9Ip-0002Dn-PZ for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:04 -0500 Received: by mail-pj1-x102a.google.com with SMTP id m5so703271pjv.5 for ; Mon, 11 Jan 2021 18:20:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+veWa2+gUSeuM0qwhIL58trHSNg04F73bO4068dp1Ko=; b=Sl7y/pTEZobg45d0Uxthygr3h7XPbkb+FLgkaysYjStdEPrxVFnXsR09mHXFJ3zT5K 0h+P4HWRLhlRG9CGEX4DUtRCvw0DkHQ3ML/QgcOIaum/WQBtPqgzqKCk8tIGS46l4jo1 VQJRl2uu/OVwaBA2qsNIdrMuvmZbwucdm1v8cJ8ZATri0V/33QtwfCB0Un2w3Pvp6oWR vrg3/LMDAHjoPO6hUqTUdfVG21QeV26V8USbfX5avh80yuY+cWsihNf4cXvoSa6/iX2L SmF1HvOQArfv3DRQ73T7gomlwnQ+kbXjAwdVD7UvRbPUjCAfiSdBBOYz0EffXh16QjD0 TBeg== 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=+veWa2+gUSeuM0qwhIL58trHSNg04F73bO4068dp1Ko=; b=KHlpFDjEV0CRmuyC8HR5iT1BVdMAVzIG73dPJYNFeV52bp7DmJqd44Tf3GUcdAOlz0 KNyuVidiIgN3YVD8wMIgJrYPZaiKqIbK8ryQ+slDO+y4jXl+Qma88eudsCp2YKXDnPuu ShTBmhnZJVy0NkN5I51hhGcnOc2gO4Tp6LPU2mZFbbXZ9HIcYO1yOC9pLD87sl8+7God ClNb5EdWFzgA8H+VLbOYSXB+C7QiKb3det1lqra7/lKnKB6uJixUyYkQYB42qIvR/xoS NEVuNQIuqXJtYB/Jg0F+Z2/fWoHn5eXXkUsr+nEG4a8p2jSFiyS3vfRqo8drjmKlgdBB TshA== X-Gm-Message-State: AOAM5339ulfQDykJFECqVhnE7yfjMzluezhdfT56Jxt3buOwQnlbBduT g4CoyXVOcz6k53Trz4hKT+oA6eXMocpcfdve X-Google-Smtp-Source: ABdhPJyAR+U4culBWq4jdwZo3IUjbiHyS1tvwqHEmgs3B//u0lNo4ylduCxO3JOunoQv5mIXGZUg7g== X-Received: by 2002:a17:90a:5897:: with SMTP id j23mr994513pji.148.1610418058189; Mon, 11 Jan 2021 18:20:58 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.20.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:20:57 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 10/16] target/riscv: rvb: shift ones Date: Tue, 12 Jan 2021 10:19:51 +0800 Message-Id: <20210112022001.20521-11-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=frank.chang@sifive.com; helo=mail-pj1-x102a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Kito Cheng Signed-off-by: Kito Cheng Signed-off-by: Frank Chang Reviewed-by: Richard Henderson --- target/riscv/insn32-64.decode | 4 +++ target/riscv/insn32.decode | 4 +++ target/riscv/insn_trans/trans_rvb.c.inc | 48 +++++++++++++++++++++++++ target/riscv/translate.c | 14 ++++++++ 4 files changed, 70 insertions(+) diff --git a/target/riscv/insn32-64.decode b/target/riscv/insn32-64.decode index f6c63c31b03..8c3ed33077e 100644 --- a/target/riscv/insn32-64.decode +++ b/target/riscv/insn32-64.decode @@ -98,7 +98,11 @@ bsetw 0010100 .......... 001 ..... 0111011 @r bclrw 0100100 .......... 001 ..... 0111011 @r binvw 0110100 .......... 001 ..... 0111011 @r bextw 0100100 .......... 101 ..... 0111011 @r +slow 0010000 .......... 001 ..... 0111011 @r +srow 0010000 .......... 101 ..... 0111011 @r bsetiw 0010100 .......... 001 ..... 0011011 @sh5 bclriw 0100100 .......... 001 ..... 0011011 @sh5 binviw 0110100 .......... 001 ..... 0011011 @sh5 +sloiw 0010000 .......... 001 ..... 0011011 @sh5 +sroiw 0010000 .......... 101 ..... 0011011 @sh5 diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 64d2b057764..0ea92312372 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -615,8 +615,12 @@ bset 0010100 .......... 001 ..... 0110011 @r bclr 0100100 .......... 001 ..... 0110011 @r binv 0110100 .......... 001 ..... 0110011 @r bext 0100100 .......... 101 ..... 0110011 @r +slo 0010000 .......... 001 ..... 0110011 @r +sro 0010000 .......... 101 ..... 0110011 @r bseti 00101. ........... 001 ..... 0010011 @sh bclri 01001. ........... 001 ..... 0010011 @sh binvi 01101. ........... 001 ..... 0010011 @sh bexti 01001. ........... 101 ..... 0010011 @sh +sloi 00100. ........... 001 ..... 0010011 @sh +sroi 00100. ........... 101 ..... 0010011 @sh diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc index 0c41f135dc6..44f9f639240 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -155,6 +155,30 @@ static bool trans_bexti(DisasContext *ctx, arg_bexti *a) return gen_shifti(ctx, a, gen_bext); } +static bool trans_slo(DisasContext *ctx, arg_slo *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shift(ctx, a, gen_slo); +} + +static bool trans_sloi(DisasContext *ctx, arg_sloi *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shifti(ctx, a, gen_slo); +} + +static bool trans_sro(DisasContext *ctx, arg_sro *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shift(ctx, a, gen_sro); +} + +static bool trans_sroi(DisasContext *ctx, arg_sroi *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shifti(ctx, a, gen_sro); +} + /* RV64-only instructions */ #ifdef TARGET_RISCV64 @@ -230,4 +254,28 @@ static bool trans_bextw(DisasContext *ctx, arg_bextw *a) return gen_shiftw(ctx, a, gen_bext); } +static bool trans_slow(DisasContext *ctx, arg_slow *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftw(ctx, a, gen_slo); +} + +static bool trans_sloiw(DisasContext *ctx, arg_sloiw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftiw(ctx, a, gen_slo); +} + +static bool trans_srow(DisasContext *ctx, arg_srow *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftw(ctx, a, gen_sro); +} + +static bool trans_sroiw(DisasContext *ctx, arg_sroiw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftiw(ctx, a, gen_sro); +} + #endif diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 7ea434ffa8d..678c3dca81f 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -776,6 +776,20 @@ static void gen_bext(TCGv ret, TCGv arg1, TCGv shamt) tcg_gen_andi_tl(ret, ret, 1); } +static void gen_slo(TCGv ret, TCGv arg1, TCGv arg2) +{ + tcg_gen_not_tl(ret, arg1); + tcg_gen_shl_tl(ret, ret, arg2); + tcg_gen_not_tl(ret, ret); +} + +static void gen_sro(TCGv ret, TCGv arg1, TCGv arg2) +{ + tcg_gen_not_tl(ret, arg1); + tcg_gen_shr_tl(ret, ret, arg2); + tcg_gen_not_tl(ret, ret); +} + #ifdef TARGET_RISCV64 static void gen_ctzw(TCGv ret, TCGv arg1) From patchwork Tue Jan 12 02:19:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424947 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=YJF7EA4D; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFDv91MTLz9sX5 for ; Tue, 12 Jan 2021 13:25:25 +1100 (AEDT) Received: from localhost ([::1]:35804 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9N5-0005DE-6Z for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:25:23 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58198) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9Iw-0001An-V9 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:07 -0500 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:54346) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9It-0002EP-UK for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:06 -0500 Received: by mail-pj1-x1034.google.com with SMTP id cq1so484690pjb.4 for ; Mon, 11 Jan 2021 18:21:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=9102JJGn5s0jPf0QgEtHstboWaDBY9brqgO7As23bC4=; b=YJF7EA4Drm6YSRYCXnxvoMq28wOJLX/xIELn1lW3VIMGVPR6BMq0K/Oons4D0K3pO3 em2Ao+RrfLt1yeyyaSGdcBbF9nLJArhEGU33u/1otfecAT80CX9ZKkWl9w70zDHCFldj MzhN8HuQh+3RNJQzRBmVh28prSMDGE6OqhBo5VVE3lEfX1Ueso/eG7auuSEoSle+5hag iFRNhhlmq6AsrqJCZiMrbu9MqLwiLZepeNtxoKTHGM/knGuJW3jKAKlQEDWRjMDAZTJv OckMRzq7ce8m/F8ntu4P+1fc6VwwlfIOoIeqqyhIBFP7vQxwg7ijipQghlLp0bnST8VH g7Nw== 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=9102JJGn5s0jPf0QgEtHstboWaDBY9brqgO7As23bC4=; b=LcHQY8GZtpvU4Hxueu6wiGqiJrm49TJDYBCKnAlQvNnLb4+QqsyUZtFNhxvSVIZpXL kCcC9nIFa+49HoBflBFuVKm3F9VmI4Fc4K3AE2o4u7VcoX1Yel585j1ouHhgAMMO+nti 3IelB3UoCuvUe5628I6vyYBSFPu7IVJmh/Errpn4GQgsHms4GYFVgkO/nw6ed2GlxpJ9 362pk5Ym4Jr7Ul5VvH/zSxRHay/ep3O5St0IwF9ZuLiSBi1mT4dDitoRX3y7ySnjhs9A QXpbgz3FvzqZ+rpeagjkW07bW9lgnQgAfVrR540BdJBCeyyllPcMF9LibvyCiuppQcST 3Rsw== X-Gm-Message-State: AOAM530ovwmJmBwnYoXhR+tTHi0l3aKV5MAFrL3Sn0vy2/k5lCzArvIH liIbVWeKBB32XOBhspIIybPW1cPgecUaozye X-Google-Smtp-Source: ABdhPJymAtleudeSZoKbjgO8qffqXfBADzlpDT3d7IQYdLqAOln0BUy9TKlD1LtNK4MGsp1vLGOFHg== X-Received: by 2002:a17:90a:f288:: with SMTP id fs8mr1889985pjb.184.1610418062386; Mon, 11 Jan 2021 18:21:02 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.21.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:21:01 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 11/16] target/riscv: rvb: rotate (left/right) Date: Tue, 12 Jan 2021 10:19:52 +0800 Message-Id: <20210112022001.20521-12-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=frank.chang@sifive.com; helo=mail-pj1-x1034.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Kito Cheng Signed-off-by: Kito Cheng Signed-off-by: Frank Chang Reviewed-by: Richard Henderson --- target/riscv/insn32-64.decode | 3 +++ target/riscv/insn32.decode | 3 +++ target/riscv/insn_trans/trans_rvb.c.inc | 36 +++++++++++++++++++++++++ target/riscv/translate.c | 36 +++++++++++++++++++++++++ 4 files changed, 78 insertions(+) diff --git a/target/riscv/insn32-64.decode b/target/riscv/insn32-64.decode index 8c3ed33077e..8f9ba21b352 100644 --- a/target/riscv/insn32-64.decode +++ b/target/riscv/insn32-64.decode @@ -100,9 +100,12 @@ binvw 0110100 .......... 001 ..... 0111011 @r bextw 0100100 .......... 101 ..... 0111011 @r slow 0010000 .......... 001 ..... 0111011 @r srow 0010000 .......... 101 ..... 0111011 @r +rorw 0110000 .......... 101 ..... 0111011 @r +rolw 0110000 .......... 001 ..... 0111011 @r bsetiw 0010100 .......... 001 ..... 0011011 @sh5 bclriw 0100100 .......... 001 ..... 0011011 @sh5 binviw 0110100 .......... 001 ..... 0011011 @sh5 sloiw 0010000 .......... 001 ..... 0011011 @sh5 sroiw 0010000 .......... 101 ..... 0011011 @sh5 +roriw 0110000 .......... 101 ..... 0011011 @sh5 diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 0ea92312372..6d1b604c800 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -617,6 +617,8 @@ binv 0110100 .......... 001 ..... 0110011 @r bext 0100100 .......... 101 ..... 0110011 @r slo 0010000 .......... 001 ..... 0110011 @r sro 0010000 .......... 101 ..... 0110011 @r +ror 0110000 .......... 101 ..... 0110011 @r +rol 0110000 .......... 001 ..... 0110011 @r bseti 00101. ........... 001 ..... 0010011 @sh bclri 01001. ........... 001 ..... 0010011 @sh @@ -624,3 +626,4 @@ binvi 01101. ........... 001 ..... 0010011 @sh bexti 01001. ........... 101 ..... 0010011 @sh sloi 00100. ........... 001 ..... 0010011 @sh sroi 00100. ........... 101 ..... 0010011 @sh +rori 01100. ........... 101 ..... 0010011 @sh diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc index 44f9f639240..8a46fde4767 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -179,6 +179,24 @@ static bool trans_sroi(DisasContext *ctx, arg_sroi *a) return gen_shifti(ctx, a, gen_sro); } +static bool trans_ror(DisasContext *ctx, arg_ror *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shift(ctx, a, tcg_gen_rotr_tl); +} + +static bool trans_rori(DisasContext *ctx, arg_rori *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shifti(ctx, a, tcg_gen_rotr_tl); +} + +static bool trans_rol(DisasContext *ctx, arg_rol *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shift(ctx, a, tcg_gen_rotl_tl); +} + /* RV64-only instructions */ #ifdef TARGET_RISCV64 @@ -278,4 +296,22 @@ static bool trans_sroiw(DisasContext *ctx, arg_sroiw *a) return gen_shiftiw(ctx, a, gen_sro); } +static bool trans_rorw(DisasContext *ctx, arg_rorw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftw(ctx, a, gen_rorw); +} + +static bool trans_roriw(DisasContext *ctx, arg_roriw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftiw(ctx, a, gen_rorw); +} + +static bool trans_rolw(DisasContext *ctx, arg_rolw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftw(ctx, a, gen_rolw); +} + #endif diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 678c3dca81f..eee69e6bba9 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -828,6 +828,42 @@ static void gen_packuw(TCGv ret, TCGv arg1, TCGv arg2) tcg_temp_free(t); } +static void gen_rorw(TCGv ret, TCGv arg1, TCGv arg2) +{ + TCGv_i32 t1 = tcg_temp_new_i32(); + TCGv_i32 t2 = tcg_temp_new_i32(); + + /* truncate to 32-bits */ + tcg_gen_trunc_tl_i32(t1, arg1); + tcg_gen_trunc_tl_i32(t2, arg2); + + tcg_gen_rotr_i32(t1, t1, t2); + + /* sign-extend 64-bits */ + tcg_gen_ext_i32_tl(ret, t1); + + tcg_temp_free_i32(t1); + tcg_temp_free_i32(t2); +} + +static void gen_rolw(TCGv ret, TCGv arg1, TCGv arg2) +{ + TCGv_i32 t1 = tcg_temp_new_i32(); + TCGv_i32 t2 = tcg_temp_new_i32(); + + /* truncate to 32-bits */ + tcg_gen_trunc_tl_i32(t1, arg1); + tcg_gen_trunc_tl_i32(t2, arg2); + + tcg_gen_rotl_i32(t1, t1, t2); + + /* sign-extend 64-bits */ + tcg_gen_ext_i32_tl(ret, t1); + + tcg_temp_free_i32(t1); + tcg_temp_free_i32(t2); +} + #endif static bool gen_arith(DisasContext *ctx, arg_r *a, From patchwork Tue Jan 12 02:19:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424958 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=LgAFhvxn; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFF9N33T1z9sX5 for ; Tue, 12 Jan 2021 13:37:42 +1100 (AEDT) Received: from localhost ([::1]:35066 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9Yx-0008Qt-BK for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:37:39 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58244) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9J0-0001Jx-S0 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:10 -0500 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]:33192) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9Iy-0002Fp-Ly for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:10 -0500 Received: by mail-pf1-x430.google.com with SMTP id h186so474489pfe.0 for ; Mon, 11 Jan 2021 18:21:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=o6jBffw8LGw/Q75MpbwT6lKMgWQdCtDLpTWuA0bVkUY=; b=LgAFhvxnooxK/YqOghiunyzYhrrIqeEmH2teDNFSbxZxyVYkSyF3xgbN9C7Zlja2rL qNgoOnNiD5rhqE5xKoDBC9rx9eHFXIywN5+9uiDPmBck41SEf14EocJIUhDY4Z8en5/9 XmDDK8sBC2n9+x0vCHP5LyhGlpMqUJfT+e54kNdc/aMD8wSoM7GoBAgaIbKU16NZhNYb OG9Taoyh1Uf67yoAyN8vYodhHdqX7vSOm2rsDsagU2lDsOCF6sfH5p0GTQFa7RgMHBN0 HjVj6UtTLuhQIyPOT2UM0M5EqbReMKPS3zuGXBMyNAXie2TH3L8bwUOnA0Phim704IKq 9+BA== 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=o6jBffw8LGw/Q75MpbwT6lKMgWQdCtDLpTWuA0bVkUY=; b=VxKXPEkXyyuo6uRYzqzhmB4JXL20XHxJuSNSU5DkuOj5CXVTImhg/OrlT/s6vUkTu7 PNf8RsxYpXFyeObpO+bcl6mE/y7Im2kJI2k/uLqcG8FEy3glV6zfCqdjJnpPSBcPs8Fu R2pPTpIU8B8VogMtbL2SwjRdLxx9G5l9zn0KRkzdGoZtYg3ecwe3tEhiwhlUTNMIafSV AfyMVBUlrzPTwmbKRSUJt6dK8elofn24K4x33lnceJZ+xW3QXkh7jdZxTTtkfwPQIdOa +JLZAD6ebCkMgeX0JrQP6qNpS8GmgFk9LYdMNV44CsujZyNGDmXYbhvNM+1YFUZKxep2 n0gA== X-Gm-Message-State: AOAM530tAlbH9tlb4TCLk+jpUqRQmhU72HEmySUeapiNtSBDia+rcWDT tK7BqLi6rACXQCxYK/f3Ix4aDmJz9ELFX0n9 X-Google-Smtp-Source: ABdhPJwrqZiFA/R1KWOU+HEwf/kxI/TEQ8+WBsGKi0O53nRgjJE64nv65WeUpiQmlu/qGEIOhiy8Lg== X-Received: by 2002:a63:5e01:: with SMTP id s1mr2367544pgb.201.1610418067023; Mon, 11 Jan 2021 18:21:07 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.21.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:21:06 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 12/16] target/riscv: rvb: generalized reverse Date: Tue, 12 Jan 2021 10:19:53 +0800 Message-Id: <20210112022001.20521-13-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::430; envelope-from=frank.chang@sifive.com; helo=mail-pf1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Frank Chang Signed-off-by: Frank Chang Reviewed-by: Richard Henderson --- target/riscv/bitmanip_helper.c | 71 +++++++++++++++++++++++++ target/riscv/helper.h | 7 +++ target/riscv/insn32-64.decode | 2 + target/riscv/insn32.decode | 2 + target/riscv/insn_trans/trans_rvb.c.inc | 29 ++++++++++ target/riscv/meson.build | 1 + target/riscv/translate.c | 28 ++++++++++ 7 files changed, 140 insertions(+) create mode 100644 target/riscv/bitmanip_helper.c diff --git a/target/riscv/bitmanip_helper.c b/target/riscv/bitmanip_helper.c new file mode 100644 index 00000000000..1d3235bc0d6 --- /dev/null +++ b/target/riscv/bitmanip_helper.c @@ -0,0 +1,71 @@ +/* + * RISC-V Bitmanip Extension Helpers for QEMU. + * + * Copyright (c) 2020 Kito Cheng, kito.cheng@sifive.com + * Copyright (c) 2020 Frank Chang, frank.chang@sifive.com + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2 or later, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#include "qemu/osdep.h" +#include "qemu/host-utils.h" +#include "exec/exec-all.h" +#include "exec/helper-proto.h" +#include "tcg/tcg.h" + +static const uint64_t adjacent_masks[] = { + dup_const(MO_8, 0x55), + dup_const(MO_8, 0x33), + dup_const(MO_8, 0x0f), + dup_const(MO_16, 0xff), + dup_const(MO_32, 0xffff), +#ifdef TARGET_RISCV64 + UINT32_MAX +#endif +}; + +static inline target_ulong do_swap(target_ulong x, uint64_t mask, int shift) +{ + return ((x & mask) << shift) | ((x & ~mask) >> shift); +} + +static target_ulong do_grev(target_ulong rs1, + target_ulong rs2, + int bits) +{ + target_ulong x = rs1; + int i, shift; + + for (i = 0, shift = 1; shift < bits; i++, shift <<= 1) { + if (rs2 & shift) { + x = do_swap(x, adjacent_masks[i], shift); + } + } + + return x; +} + +target_ulong HELPER(grev)(target_ulong rs1, target_ulong rs2) +{ + return do_grev(rs1, rs2, TARGET_LONG_BITS); +} + +/* RV64-only instruction */ +#ifdef TARGET_RISCV64 + +target_ulong HELPER(grevw)(target_ulong rs1, target_ulong rs2) +{ + return do_grev(rs1, rs2, 32); +} + +#endif diff --git a/target/riscv/helper.h b/target/riscv/helper.h index e3f3f41e891..db8b770f1aa 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -58,6 +58,13 @@ DEF_HELPER_FLAGS_2(fcvt_d_l, TCG_CALL_NO_RWG, i64, env, i64) DEF_HELPER_FLAGS_2(fcvt_d_lu, TCG_CALL_NO_RWG, i64, env, i64) DEF_HELPER_FLAGS_1(fclass_d, TCG_CALL_NO_RWG_SE, tl, i64) +/* Bitmanip */ +DEF_HELPER_FLAGS_2(grev, TCG_CALL_NO_RWG_SE, tl, tl, tl) + +#if defined(TARGET_RISCV64) +DEF_HELPER_FLAGS_2(grevw, TCG_CALL_NO_RWG_SE, tl, tl, tl) +#endif + /* Special functions */ DEF_HELPER_3(csrrw, tl, env, tl, tl) DEF_HELPER_4(csrrs, tl, env, tl, tl, tl) diff --git a/target/riscv/insn32-64.decode b/target/riscv/insn32-64.decode index 8f9ba21b352..38ceadd4553 100644 --- a/target/riscv/insn32-64.decode +++ b/target/riscv/insn32-64.decode @@ -102,6 +102,7 @@ slow 0010000 .......... 001 ..... 0111011 @r srow 0010000 .......... 101 ..... 0111011 @r rorw 0110000 .......... 101 ..... 0111011 @r rolw 0110000 .......... 001 ..... 0111011 @r +grevw 0110100 .......... 101 ..... 0111011 @r bsetiw 0010100 .......... 001 ..... 0011011 @sh5 bclriw 0100100 .......... 001 ..... 0011011 @sh5 @@ -109,3 +110,4 @@ binviw 0110100 .......... 001 ..... 0011011 @sh5 sloiw 0010000 .......... 001 ..... 0011011 @sh5 sroiw 0010000 .......... 101 ..... 0011011 @sh5 roriw 0110000 .......... 101 ..... 0011011 @sh5 +greviw 0110100 .......... 101 ..... 0011011 @sh5 diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 6d1b604c800..fa4bba4f0ee 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -619,6 +619,7 @@ slo 0010000 .......... 001 ..... 0110011 @r sro 0010000 .......... 101 ..... 0110011 @r ror 0110000 .......... 101 ..... 0110011 @r rol 0110000 .......... 001 ..... 0110011 @r +grev 0110100 .......... 101 ..... 0110011 @r bseti 00101. ........... 001 ..... 0010011 @sh bclri 01001. ........... 001 ..... 0010011 @sh @@ -627,3 +628,4 @@ bexti 01001. ........... 101 ..... 0010011 @sh sloi 00100. ........... 001 ..... 0010011 @sh sroi 00100. ........... 101 ..... 0010011 @sh rori 01100. ........... 101 ..... 0010011 @sh +grevi 01101. ........... 101 ..... 0010011 @sh diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc index 8a46fde4767..286643cd183 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -197,6 +197,23 @@ static bool trans_rol(DisasContext *ctx, arg_rol *a) return gen_shift(ctx, a, tcg_gen_rotl_tl); } +static bool trans_grev(DisasContext *ctx, arg_grev *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shift(ctx, a, gen_helper_grev); +} + +static bool trans_grevi(DisasContext *ctx, arg_grevi *a) +{ + REQUIRE_EXT(ctx, RVB); + + if (a->shamt >= TARGET_LONG_BITS) { + return false; + } + + return gen_grevi(ctx, a); +} + /* RV64-only instructions */ #ifdef TARGET_RISCV64 @@ -314,4 +331,16 @@ static bool trans_rolw(DisasContext *ctx, arg_rolw *a) return gen_shiftw(ctx, a, gen_rolw); } +static bool trans_grevw(DisasContext *ctx, arg_grevw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftw(ctx, a, gen_grevw); +} + +static bool trans_greviw(DisasContext *ctx, arg_greviw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftiw(ctx, a, gen_grevw); +} + #endif diff --git a/target/riscv/meson.build b/target/riscv/meson.build index 14a5c62dace..de530298454 100644 --- a/target/riscv/meson.build +++ b/target/riscv/meson.build @@ -21,6 +21,7 @@ riscv_ss.add(files( 'gdbstub.c', 'op_helper.c', 'vector_helper.c', + 'bitmanip_helper.c', 'translate.c', )) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index eee69e6bba9..cb040a15003 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -790,6 +790,28 @@ static void gen_sro(TCGv ret, TCGv arg1, TCGv arg2) tcg_gen_not_tl(ret, ret); } +static bool gen_grevi(DisasContext *ctx, arg_grevi *a) +{ + TCGv source1 = tcg_temp_new(); + TCGv source2; + + gen_get_gpr(source1, a->rs1); + + if (a->shamt == (TARGET_LONG_BITS - 8)) { + /* rev8, byte swaps */ + tcg_gen_bswap_tl(source1, source1); + } else { + source2 = tcg_temp_new(); + tcg_gen_movi_tl(source2, a->shamt); + gen_helper_grev(source1, source1, source2); + tcg_temp_free(source2); + } + + gen_set_gpr(a->rd, source1); + tcg_temp_free(source1); + return true; +} + #ifdef TARGET_RISCV64 static void gen_ctzw(TCGv ret, TCGv arg1) @@ -864,6 +886,12 @@ static void gen_rolw(TCGv ret, TCGv arg1, TCGv arg2) tcg_temp_free_i32(t2); } +static void gen_grevw(TCGv ret, TCGv arg1, TCGv arg2) +{ + tcg_gen_ext32u_tl(arg1, arg1); + gen_helper_grev(ret, arg1, arg2); +} + #endif static bool gen_arith(DisasContext *ctx, arg_r *a, From patchwork Tue Jan 12 02:19:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424951 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=P1l+rA0O; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFDz15XbDz9sX5 for ; Tue, 12 Jan 2021 13:28:45 +1100 (AEDT) Received: from localhost ([::1]:44412 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9QJ-0000Pt-QR for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:28:43 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58292) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9J4-0001Tq-T9 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:15 -0500 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:55756) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9J2-0002GP-Ue for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:14 -0500 Received: by mail-pj1-x102a.google.com with SMTP id p12so661682pju.5 for ; Mon, 11 Jan 2021 18:21:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=iOA7gN5gq/kVFwab+OoJTv057ca/FilWJ4YkVqkzPFw=; b=P1l+rA0Ol82YgPSu9ZzK0BDcqFApxFASC+SSdNdRS8hRGME5as7N3jzSAlWKTpNxQE uL4p7a7c4hKAz5PV72k+MLeNium3r+mh/ccG6KX54KsEePCZ3zz0z1CT8dfNz9Xnw4EM yO8tCDINYrXiv8fH+Rg8vLFW3KF6l4NVP6EkuY4ia7xJChz/YjHa7OKAC+0/FOvWDG8S BPY0j/Gse/Hk9/HxLWZfCgSmmOZ3+IhvRK8TmU8qG542zlyphPOukZ7R93ZFJTv1Lzvo Ux/KqU8HcIeuttlUdnGVSR1o953cKCBjCfT/MjgNxDzG1iFo9QJDjM7rUITGnNcRpe36 byeQ== 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=iOA7gN5gq/kVFwab+OoJTv057ca/FilWJ4YkVqkzPFw=; b=FCf3NAfBY8OrDofnCnS2NQj7Zc0Ro8ygga4pziKbiLUunJI5z0yc6S0d8O5vqu3lz7 Xf1w2xJ6RSK5EHtGSt+zJ3ls5Lqf78qT8v40+K8JM4Gx+Bu8CSTxJG8cZcNXIUVEfnWH 3NWZU8TegoobkS7oYbQlw9UlULq+HJj42CuwEWld3snFXJ+jYaCNHrp/gFQclVgwWu3a WUFLKILm5SzY7uOroSWMeY4FRlQnQBieMmaQAtU1SPrP7Q6J+D6/WUhMFiz9Ja63AHxd oe1L0ThX+0ueRJfwyaVvQ5kJYwOfCTv+tOKKHB4bda+ZakMdArXCRVSYyejoaS4UA9R8 NKAA== X-Gm-Message-State: AOAM531ycv9qivFR2vbwbI499LleWh+se1n4WxeMexXvQAIN8WfOEfyN cxIpaDfYRrK4FNC89YqFklXrojzYXbBCh1Bv X-Google-Smtp-Source: ABdhPJzdyccD0xDgZcYLQB9MAzGKe3pvXFVNS5gWpWvx/sqb9fWDv99n9csh+Afl4kSwjXdHbUQByw== X-Received: by 2002:a17:90a:fa84:: with SMTP id cu4mr713895pjb.0.1610418071499; Mon, 11 Jan 2021 18:21:11 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.21.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:21:11 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 13/16] target/riscv: rvb: generalized or-combine Date: Tue, 12 Jan 2021 10:19:54 +0800 Message-Id: <20210112022001.20521-14-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=frank.chang@sifive.com; helo=mail-pj1-x102a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Frank Chang Signed-off-by: Frank Chang Reviewed-by: Richard Henderson --- target/riscv/bitmanip_helper.c | 31 +++++++++++++++++++++++++ target/riscv/helper.h | 2 ++ target/riscv/insn32-64.decode | 2 ++ target/riscv/insn32.decode | 2 ++ target/riscv/insn_trans/trans_rvb.c.inc | 24 +++++++++++++++++++ target/riscv/translate.c | 6 +++++ 6 files changed, 67 insertions(+) diff --git a/target/riscv/bitmanip_helper.c b/target/riscv/bitmanip_helper.c index 1d3235bc0d6..389b52eccd9 100644 --- a/target/riscv/bitmanip_helper.c +++ b/target/riscv/bitmanip_helper.c @@ -69,3 +69,34 @@ target_ulong HELPER(grevw)(target_ulong rs1, target_ulong rs2) } #endif + +static target_ulong do_gorc(target_ulong rs1, + target_ulong rs2, + int bits) +{ + target_ulong x = rs1; + int i, shift; + + for (i = 0, shift = 1; shift < bits; i++, shift <<= 1) { + if (rs2 & shift) { + x |= do_swap(x, adjacent_masks[i], shift); + } + } + + return x; +} + +target_ulong HELPER(gorc)(target_ulong rs1, target_ulong rs2) +{ + return do_gorc(rs1, rs2, TARGET_LONG_BITS); +} + +/* RV64-only instruction */ +#ifdef TARGET_RISCV64 + +target_ulong HELPER(gorcw)(target_ulong rs1, target_ulong rs2) +{ + return do_gorc(rs1, rs2, 32); +} + +#endif diff --git a/target/riscv/helper.h b/target/riscv/helper.h index db8b770f1aa..7ddaea61798 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -60,9 +60,11 @@ DEF_HELPER_FLAGS_1(fclass_d, TCG_CALL_NO_RWG_SE, tl, i64) /* Bitmanip */ DEF_HELPER_FLAGS_2(grev, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(gorc, TCG_CALL_NO_RWG_SE, tl, tl, tl) #if defined(TARGET_RISCV64) DEF_HELPER_FLAGS_2(grevw, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(gorcw, TCG_CALL_NO_RWG_SE, tl, tl, tl) #endif /* Special functions */ diff --git a/target/riscv/insn32-64.decode b/target/riscv/insn32-64.decode index 38ceadd4553..894db5e3abf 100644 --- a/target/riscv/insn32-64.decode +++ b/target/riscv/insn32-64.decode @@ -103,6 +103,7 @@ srow 0010000 .......... 101 ..... 0111011 @r rorw 0110000 .......... 101 ..... 0111011 @r rolw 0110000 .......... 001 ..... 0111011 @r grevw 0110100 .......... 101 ..... 0111011 @r +gorcw 0010100 .......... 101 ..... 0111011 @r bsetiw 0010100 .......... 001 ..... 0011011 @sh5 bclriw 0100100 .......... 001 ..... 0011011 @sh5 @@ -111,3 +112,4 @@ sloiw 0010000 .......... 001 ..... 0011011 @sh5 sroiw 0010000 .......... 101 ..... 0011011 @sh5 roriw 0110000 .......... 101 ..... 0011011 @sh5 greviw 0110100 .......... 101 ..... 0011011 @sh5 +gorciw 0010100 .......... 101 ..... 0011011 @sh5 diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index fa4bba4f0ee..0756ea5cc28 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -620,6 +620,7 @@ sro 0010000 .......... 101 ..... 0110011 @r ror 0110000 .......... 101 ..... 0110011 @r rol 0110000 .......... 001 ..... 0110011 @r grev 0110100 .......... 101 ..... 0110011 @r +gorc 0010100 .......... 101 ..... 0110011 @r bseti 00101. ........... 001 ..... 0010011 @sh bclri 01001. ........... 001 ..... 0010011 @sh @@ -629,3 +630,4 @@ sloi 00100. ........... 001 ..... 0010011 @sh sroi 00100. ........... 101 ..... 0010011 @sh rori 01100. ........... 101 ..... 0010011 @sh grevi 01101. ........... 101 ..... 0010011 @sh +gorci 00101. ........... 101 ..... 0010011 @sh diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc index 286643cd183..a4181dbf0de 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -214,6 +214,18 @@ static bool trans_grevi(DisasContext *ctx, arg_grevi *a) return gen_grevi(ctx, a); } +static bool trans_gorc(DisasContext *ctx, arg_gorc *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shift(ctx, a, gen_helper_gorc); +} + +static bool trans_gorci(DisasContext *ctx, arg_gorci *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shifti(ctx, a, gen_helper_gorc); +} + /* RV64-only instructions */ #ifdef TARGET_RISCV64 @@ -343,4 +355,16 @@ static bool trans_greviw(DisasContext *ctx, arg_greviw *a) return gen_shiftiw(ctx, a, gen_grevw); } +static bool trans_gorcw(DisasContext *ctx, arg_gorcw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftw(ctx, a, gen_gorcw); +} + +static bool trans_gorciw(DisasContext *ctx, arg_gorciw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_shiftiw(ctx, a, gen_gorcw); +} + #endif diff --git a/target/riscv/translate.c b/target/riscv/translate.c index cb040a15003..e845b311a3d 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -892,6 +892,12 @@ static void gen_grevw(TCGv ret, TCGv arg1, TCGv arg2) gen_helper_grev(ret, arg1, arg2); } +static void gen_gorcw(TCGv ret, TCGv arg1, TCGv arg2) +{ + tcg_gen_ext32u_tl(arg1, arg1); + gen_helper_gorcw(ret, arg1, arg2); +} + #endif static bool gen_arith(DisasContext *ctx, arg_r *a, From patchwork Tue Jan 12 02:19:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424948 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=MpI53JLL; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFDwC2qyYz9sXN for ; Tue, 12 Jan 2021 13:26:16 +1100 (AEDT) Received: from localhost ([::1]:38350 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9Nt-0006FW-3R for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:26:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58330) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9J9-0001WK-Qi for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:20 -0500 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]:44317) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9J6-0002Gm-Ub for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:19 -0500 Received: by mail-pl1-x62a.google.com with SMTP id r4so548864pls.11 for ; Mon, 11 Jan 2021 18:21:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=1kUMsBJeTTaJT5hWSf4ZQEPL/s217cbvOOKIMRYR0N0=; b=MpI53JLL4Kmhg2UW8DayTB0e2RLl//t5ww2/qE9a7iGWcubDwufNmyzt599YVg+uuF 09d2K5J3z5fNYgMceqx0LaM1APW4j3i2euQiMYlnwG9gypvCjMUXeQiE1WRXdLQ1ufSu V2jL1bUwax0w4XtEGmY+BiTWFEA/3/6Y+mAxtuHBa/ZPkAa7LjH4q4vIR2Sqg6m0T71k kDPGyYIHufYnX3/iXMlwGQJ10MeCIOCoyfvYAZxRMdUZ/4sgf8QwuIRzynB6/rxVCvZG jt64T90Fcqh6IITz6uBVuJ2ughGPmkCWUFQEk/0hVZSvXuOXpz4Q5gVv/rgpGjDQe7Dn rVmQ== 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=1kUMsBJeTTaJT5hWSf4ZQEPL/s217cbvOOKIMRYR0N0=; b=hHLnvVU1StNKNmLjYPt5klzWqQWoAUVLHHCzeOPIydVTdSZCSR1346JxhHv7YZLEWy GN6SpKuv1+jLUubRzqfSgZIoyxzj6ElELayl8yUWk2B1YJIthja/W8qlyAEanrc0h9Jl hiFqj/rO+Yd6a5LHgE6ts3qcRVnFjDlX/x9yTLqYbfTbnvR9VdzLIr8eyRRayDqAvKvF NQQGIiBSzOIE5pGArX48x7m+XQJxc9dXz1GMDj5jM6q7/3LCKhEbxRTjiG6sBE1eAS8y h7BiSTHDMDDtEnKdlOrkyUeAPPeeI6cihVOJxA6YeB84KSoDyDr3Gn2EGTh2mKjbNPcZ i6zQ== X-Gm-Message-State: AOAM530O+8kGkL1Wrn1HeUQ7iaJSqBV+P8dpESGq4R4yPK/3eR/B9DMo CFnEmbYRQSV82N8zQsYUf7mYxL7Z1XYLhc90 X-Google-Smtp-Source: ABdhPJyYBsj7sfcoN1NgM8nF6jFc1/U3Q92hmLt8PRIe/tmj6K1DqIlPvNff8Id7q6Hiqz1j+gRSdw== X-Received: by 2002:a17:902:9043:b029:dc:299b:b9bb with SMTP id w3-20020a1709029043b02900dc299bb9bbmr2811643plz.66.1610418075586; Mon, 11 Jan 2021 18:21:15 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.21.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:21:15 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 14/16] target/riscv: rvb: address calculation Date: Tue, 12 Jan 2021 10:19:55 +0800 Message-Id: <20210112022001.20521-15-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=frank.chang@sifive.com; helo=mail-pl1-x62a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Kito Cheng Signed-off-by: Kito Cheng Signed-off-by: Frank Chang Reviewed-by: Richard Henderson --- target/riscv/insn32-64.decode | 3 +++ target/riscv/insn32.decode | 3 +++ target/riscv/insn_trans/trans_rvb.c.inc | 23 ++++++++++++++++++ target/riscv/translate.c | 32 +++++++++++++++++++++++++ 4 files changed, 61 insertions(+) diff --git a/target/riscv/insn32-64.decode b/target/riscv/insn32-64.decode index 894db5e3abf..2f80b0c07ae 100644 --- a/target/riscv/insn32-64.decode +++ b/target/riscv/insn32-64.decode @@ -104,6 +104,9 @@ rorw 0110000 .......... 101 ..... 0111011 @r rolw 0110000 .......... 001 ..... 0111011 @r grevw 0110100 .......... 101 ..... 0111011 @r gorcw 0010100 .......... 101 ..... 0111011 @r +sh1add_uw 0010000 .......... 010 ..... 0111011 @r +sh2add_uw 0010000 .......... 100 ..... 0111011 @r +sh3add_uw 0010000 .......... 110 ..... 0111011 @r bsetiw 0010100 .......... 001 ..... 0011011 @sh5 bclriw 0100100 .......... 001 ..... 0011011 @sh5 diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 0756ea5cc28..b90c1c0a350 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -621,6 +621,9 @@ ror 0110000 .......... 101 ..... 0110011 @r rol 0110000 .......... 001 ..... 0110011 @r grev 0110100 .......... 101 ..... 0110011 @r gorc 0010100 .......... 101 ..... 0110011 @r +sh1add 0010000 .......... 010 ..... 0110011 @r +sh2add 0010000 .......... 100 ..... 0110011 @r +sh3add 0010000 .......... 110 ..... 0110011 @r bseti 00101. ........... 001 ..... 0010011 @sh bclri 01001. ........... 001 ..... 0010011 @sh diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc index a4181dbf0de..ca987f2705f 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -226,6 +226,17 @@ static bool trans_gorci(DisasContext *ctx, arg_gorci *a) return gen_shifti(ctx, a, gen_helper_gorc); } +#define GEN_TRANS_SHADD(SHAMT) \ +static bool trans_sh##SHAMT##add(DisasContext *ctx, arg_sh##SHAMT##add *a) \ +{ \ + REQUIRE_EXT(ctx, RVB); \ + return gen_arith(ctx, a, gen_sh##SHAMT##add); \ +} + +GEN_TRANS_SHADD(1) +GEN_TRANS_SHADD(2) +GEN_TRANS_SHADD(3) + /* RV64-only instructions */ #ifdef TARGET_RISCV64 @@ -367,4 +378,16 @@ static bool trans_gorciw(DisasContext *ctx, arg_gorciw *a) return gen_shiftiw(ctx, a, gen_gorcw); } +#define GEN_TRANS_SHADD_UW(SHAMT) \ +static bool trans_sh##SHAMT##add_uw(DisasContext *ctx, \ + arg_sh##SHAMT##add_uw *a) \ +{ \ + REQUIRE_EXT(ctx, RVB); \ + return gen_arith(ctx, a, gen_sh##SHAMT##add_uw); \ +} + +GEN_TRANS_SHADD_UW(1) +GEN_TRANS_SHADD_UW(2) +GEN_TRANS_SHADD_UW(3) + #endif diff --git a/target/riscv/translate.c b/target/riscv/translate.c index e845b311a3d..7365e591eb7 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -812,6 +812,21 @@ static bool gen_grevi(DisasContext *ctx, arg_grevi *a) return true; } +#define GEN_SHADD(SHAMT) \ +static void gen_sh##SHAMT##add(TCGv ret, TCGv arg1, TCGv arg2) \ +{ \ + TCGv t = tcg_temp_new(); \ + \ + tcg_gen_shli_tl(t, arg1, SHAMT); \ + tcg_gen_add_tl(ret, t, arg2); \ + \ + tcg_temp_free(t); \ +} + +GEN_SHADD(1) +GEN_SHADD(2) +GEN_SHADD(3) + #ifdef TARGET_RISCV64 static void gen_ctzw(TCGv ret, TCGv arg1) @@ -898,6 +913,23 @@ static void gen_gorcw(TCGv ret, TCGv arg1, TCGv arg2) gen_helper_gorcw(ret, arg1, arg2); } +#define GEN_SHADD_UW(SHAMT) \ +static void gen_sh##SHAMT##add_uw(TCGv ret, TCGv arg1, TCGv arg2) \ +{ \ + TCGv t = tcg_temp_new(); \ + \ + tcg_gen_ext32u_tl(t, arg1); \ + \ + tcg_gen_shli_tl(t, t, SHAMT); \ + tcg_gen_add_tl(ret, t, arg2); \ + \ + tcg_temp_free(t); \ +} + +GEN_SHADD_UW(1) +GEN_SHADD_UW(2) +GEN_SHADD_UW(3) + #endif static bool gen_arith(DisasContext *ctx, arg_r *a, From patchwork Tue Jan 12 02:19:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424955 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=Gtnw3v5F; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFF4t6Wsxz9sXN for ; Tue, 12 Jan 2021 13:33:50 +1100 (AEDT) Received: from localhost ([::1]:55146 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9VE-0004uP-Tc for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:33:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58402) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9JK-0001Zu-Px for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:34 -0500 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:44891) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9JF-0002HJ-K6 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:30 -0500 Received: by mail-pf1-x42c.google.com with SMTP id a188so444643pfa.11 for ; Mon, 11 Jan 2021 18:21:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=cg/XSyBDgfWMKTaj4H5pnj/4AfFpWEh9kdHo1QO7YT0=; b=Gtnw3v5FUpK1H6/purLkZ93mas1FsvcJomvY7C8aKAx/o0qpOozR8ev0DHf0flkq55 K38cK4+O3q8a95h1F8kuHs5Zj5HFy1a4ykPR7i1mKBeYssIcIBEWuQCIS7aXnUNE4vml az+bEdpRbUqjlxYqO3IvCifZuLpNc1e5IcWdbZCPRVE8sWUYIgxV/G4fbyPPcxC63Lo8 Wi83RrIQhdniYUtrowua4Uj8+utMZxDY/3+/b9bJYt4X0mJ1rKe9pzisZTU91TNlvtcA vayw1o24FFSVon8bWo6e8VRsvilsuSmQxfBKaluMezJVZcxp41/j/Hl9DsCJmoVaBR/C SNkw== 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=cg/XSyBDgfWMKTaj4H5pnj/4AfFpWEh9kdHo1QO7YT0=; b=QPbW+yLqFsCQ17/L2pK4Cl1p8HCEyJe2ff8UFd2PQSoL7qoioNsjo3dQ1OcD0+fiBL 32vPR2pQdyh16XvHyDJcAM8HQVbGz1aePRWSeRF6WS0zOR2qqZt4rIOdlgl5ALIFVP5X RLoWaLfB12BdDKlNy2Qsa8ZI6LstCa681gf8O2PHwiDCzpB/ZafXw1LED0HXScuqSzEZ Iea0eOwINSdEHfht3SRW6t0omvpS3y3l5j+nANOkwe1BlVUK6yoXF55XECcRbJoNwcoT HDZToS03+MIPCxm1MNtT8tnfvRiE38gnCCslRJWRe+CFituYCQSXr2VSePomTj1nEzG4 +99g== X-Gm-Message-State: AOAM531hOKCMkYztwEIHapUUMdkGHkRvwIpefiZzle2HHZgRcnMNsPe+ EnV16+0v48TeSC5Cu3nypnFyC4GkfjSyCTor X-Google-Smtp-Source: ABdhPJziseDVwwJ9jz5I6IHZ73FTZgu6EdmFdX4X6E3/WwC/gRfLjQ7pxXt1DvE+Y+6+7OSwTWlzxg== X-Received: by 2002:a62:7ac4:0:b029:19d:b6ee:c64c with SMTP id v187-20020a627ac40000b029019db6eec64cmr2276214pfc.3.1610418080080; Mon, 11 Jan 2021 18:21:20 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.21.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:21:19 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 15/16] target/riscv: rvb: add/shift with prefix zero-extend Date: Tue, 12 Jan 2021 10:19:56 +0800 Message-Id: <20210112022001.20521-16-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::42c; envelope-from=frank.chang@sifive.com; helo=mail-pf1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Richard Henderson , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Kito Cheng Signed-off-by: Kito Cheng Signed-off-by: Frank Chang Reviewed-by: Richard Henderson --- target/riscv/insn32-64.decode | 3 +++ target/riscv/insn_trans/trans_rvb.c.inc | 22 ++++++++++++++++++++++ target/riscv/translate.c | 6 ++++++ 3 files changed, 31 insertions(+) diff --git a/target/riscv/insn32-64.decode b/target/riscv/insn32-64.decode index 2f80b0c07ae..01b28718af5 100644 --- a/target/riscv/insn32-64.decode +++ b/target/riscv/insn32-64.decode @@ -107,6 +107,7 @@ gorcw 0010100 .......... 101 ..... 0111011 @r sh1add_uw 0010000 .......... 010 ..... 0111011 @r sh2add_uw 0010000 .......... 100 ..... 0111011 @r sh3add_uw 0010000 .......... 110 ..... 0111011 @r +add_uw 0000100 .......... 000 ..... 0111011 @r bsetiw 0010100 .......... 001 ..... 0011011 @sh5 bclriw 0100100 .......... 001 ..... 0011011 @sh5 @@ -116,3 +117,5 @@ sroiw 0010000 .......... 101 ..... 0011011 @sh5 roriw 0110000 .......... 101 ..... 0011011 @sh5 greviw 0110100 .......... 101 ..... 0011011 @sh5 gorciw 0010100 .......... 101 ..... 0011011 @sh5 + +slli_uw 00001. ........... 001 ..... 0011011 @sh diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc index ca987f2705f..94fcf822a36 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -390,4 +390,26 @@ GEN_TRANS_SHADD_UW(1) GEN_TRANS_SHADD_UW(2) GEN_TRANS_SHADD_UW(3) +static bool trans_add_uw(DisasContext *ctx, arg_add_uw *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, gen_add_uw); +} + +static bool trans_slli_uw(DisasContext *ctx, arg_slli_uw *a) +{ + TCGv source1 = tcg_temp_new(); + gen_get_gpr(source1, a->rs1); + + if (a->shamt < 32) { + tcg_gen_deposit_z_i64(source1, source1, a->shamt, 32); + } else { + tcg_gen_shli_i64(source1, source1, a->shamt); + } + + gen_set_gpr(a->rd, source1); + tcg_temp_free(source1); + return true; +} + #endif diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 7365e591eb7..dbcc15ed73f 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -930,6 +930,12 @@ GEN_SHADD_UW(1) GEN_SHADD_UW(2) GEN_SHADD_UW(3) +static void gen_add_uw(TCGv ret, TCGv arg1, TCGv arg2) +{ + tcg_gen_ext32u_tl(arg1, arg1); + tcg_gen_add_tl(ret, arg1, arg2); +} + #endif static bool gen_arith(DisasContext *ctx, arg_r *a, From patchwork Tue Jan 12 02:19:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Chang X-Patchwork-Id: 1424952 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=gL3moGey; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DFF0Q5rgkz9sX5 for ; Tue, 12 Jan 2021 13:29:58 +1100 (AEDT) Received: from localhost ([::1]:47072 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz9RU-0001Vm-Pz for incoming@patchwork.ozlabs.org; Mon, 11 Jan 2021 21:29:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58400) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz9JK-0001Zt-PZ for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:34 -0500 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:51485) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz9JF-0002HW-KC for qemu-devel@nongnu.org; Mon, 11 Jan 2021 21:21:30 -0500 Received: by mail-pj1-x102b.google.com with SMTP id y12so676249pji.1 for ; Mon, 11 Jan 2021 18:21:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=5HXgmt6k/G8n17p6GbhXA6B9PdJjhLw8veADH8tZoHg=; b=gL3moGeyO92ikwW+1bK67EMseK4g7Lgjy++B8dpDgw4guL+TcclAXkLMaz01lOPC3A EM0Bl/FYmAh9eHsJ2tTBRS9Nq7J/s9YWAg8/nOTbtFp16R1H8Mrjt/geeiXaASxPo3ig +WHW7SnAyXmafROB1ATeCSk6ZqIlH4BH8POQm6WZM+gSmzbUjqMec9R0fqZZwgfr+615 xuO4XtPOnkqwqTTQm2VhAVfXtqMoc131CEx95bm8wy2OOlqA9d3lRx23vdROhzYvJJA2 +Oyw5edTVPBFpmxg6cTzjNn0FKtssGoVAdYBWJDA9aepEM85JzBabWPmq3X86pgT+HvZ yCww== 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=5HXgmt6k/G8n17p6GbhXA6B9PdJjhLw8veADH8tZoHg=; b=P0Sy03m74CKcOFrNqhD1wraTKx4iCvAn+7x4f5ixD4Ec/ZL8q8sw6xsb7xwFOZC7Gm mcliY2xcVV7DYRrOkZRkIldp5/X54KT2WdTsAV1IBINLIFsei/sEtM1QSAvTXZdR3KU5 1aaLCAO/IAIaXgw0k1+GEKbkwYm2qMgepUoXXiPfCO6PdlKduGy0hKHk8RuD9oUdlEJg PiIOTbcuYrtZZuoQij3gquCSyvJloL8COsGEJ9H25Tg68Xwk5YHRrqrWG298aMof2WOb imDLTmVYd8ybrryjYIKuapmkmrqBGDSzOtpQE7pzqLVzLy7MTnebs8jCeu00rx/8FxPv +Tsg== X-Gm-Message-State: AOAM5312YqZ54hWlB9fn0IJM5I9N5ocHoX1Kv2Ihw1bmOdlS8c9IHvJw X5pfJG/C77NIhUKv3A7PHnTJlk3mlctuWUdT X-Google-Smtp-Source: ABdhPJxPRFrxgXSHJPrfNjSGKFXOITRVz8cNBLqDuji8QqW5oGH6KIgnJIJAwKJVM0eHBal8Y3DHOA== X-Received: by 2002:a17:90a:f48b:: with SMTP id bx11mr1960463pjb.48.1610418083591; Mon, 11 Jan 2021 18:21:23 -0800 (PST) Received: from frankchang-ThinkPad-T490.internal.sifive.com (114-34-229-221.HINET-IP.hinet.net. [114.34.229.221]) by smtp.gmail.com with ESMTPSA id x14sm981326pfp.77.2021.01.11.18.21.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 18:21:23 -0800 (PST) From: frank.chang@sifive.com To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC v3 16/16] target/riscv: rvb: support and turn on B-extension from command line Date: Tue, 12 Jan 2021 10:19:57 +0800 Message-Id: <20210112022001.20521-17-frank.chang@sifive.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210112022001.20521-1-frank.chang@sifive.com> References: <20210112022001.20521-1-frank.chang@sifive.com> Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=frank.chang@sifive.com; helo=mail-pj1-x102b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sagar Karandikar , Frank Chang , Bastian Koppelmann , Alistair Francis , Palmer Dabbelt , Kito Cheng Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Kito Cheng B-extension is default off, use cpu rv32 or rv64 with x-b=true to enable B-extension. Signed-off-by: Kito Cheng Signed-off-by: Frank Chang Reviewed-by: Alistair Francis Reviewed-by: Richard Henderson --- target/riscv/cpu.c | 4 ++++ target/riscv/cpu.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 8227d7aea9d..7379a0abc6c 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -472,6 +472,9 @@ static void riscv_cpu_realize(DeviceState *dev, Error **errp) if (cpu->cfg.ext_h) { target_misa |= RVH; } + if (cpu->cfg.ext_b) { + target_misa |= RVB; + } if (cpu->cfg.ext_v) { target_misa |= RVV; if (!is_power_of_2(cpu->cfg.vlen)) { @@ -542,6 +545,7 @@ static Property riscv_cpu_properties[] = { DEFINE_PROP_BOOL("s", RISCVCPU, cfg.ext_s, true), DEFINE_PROP_BOOL("u", RISCVCPU, cfg.ext_u, true), /* This is experimental so mark with 'x-' */ + DEFINE_PROP_BOOL("x-b", RISCVCPU, cfg.ext_b, false), DEFINE_PROP_BOOL("x-h", RISCVCPU, cfg.ext_h, false), DEFINE_PROP_BOOL("x-v", RISCVCPU, cfg.ext_v, false), DEFINE_PROP_BOOL("Counters", RISCVCPU, cfg.ext_counters, true), diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 6339e848192..d5271906db4 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -72,6 +72,7 @@ #define RVS RV('S') #define RVU RV('U') #define RVH RV('H') +#define RVB RV('B') /* S extension denotes that Supervisor mode exists, however it is possible to have a core that support S mode but does not have an MMU and there @@ -282,6 +283,7 @@ struct RISCVCPU { bool ext_f; bool ext_d; bool ext_c; + bool ext_b; bool ext_s; bool ext_u; bool ext_h;