From nobody Sat May 4 05:50:22 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631953385402768.385269365229; Sat, 18 Sep 2021 01:23:05 -0700 (PDT) Received: from localhost ([::1]:59620 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mRVcm-0004W3-BE for importer@patchew.org; Sat, 18 Sep 2021 04:23:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48768) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mRTqC-0002gl-Jm; Sat, 18 Sep 2021 02:28:48 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:35834) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mRTqB-0003A3-89; Sat, 18 Sep 2021 02:28:48 -0400 Received: by mail-pf1-x431.google.com with SMTP id w14so730138pfu.2; Fri, 17 Sep 2021 23:28:46 -0700 (PDT) Received: from eric-OptiPlex-7080.starfivetech.com (ip164.ip-51-195-37.eu. [51.195.37.164]) by smtp.gmail.com with ESMTPSA id f27sm8126432pfq.78.2021.09.17.23.28.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Sep 2021 23:28:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Hoil6t6vGDo7tQoCRnUVu4aITmil+jgKZTVBnbTPVHw=; b=BI9wz36wUuCeop2fEZj+LP8tQ2OiKkgT7t+3G+qL/CcfoY5i804UzlBalRbwOhuni2 TehaqWQ3KCMy2Xpce2fcM25K4vWp5DoEy9991CDLYSmlrT9LcwWn8HhmBPNhYUALU8uy 56OLgIFzNPF6JWCm44T8S2Ybppi2QSU1k/6aziRkZgrPRkwu72miGdovuw8U2tRa/+nX AH5M0xrfCau+Ew2oNKdTRdp0XMkG/B2DNcwSwyxtl6zklO55g5UI3X1jXtrs/mUhE3dB mYEbGTK0haJi7xjanRpVg/o616KJtpacLIpCpmavte1a5mjKFAYfwsrtLfgOSDCdjNFh wZEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Hoil6t6vGDo7tQoCRnUVu4aITmil+jgKZTVBnbTPVHw=; b=wRS9QxVWyj1KypcLfSvrJPHgppgXGRFDge6/4IcUh0ZY/VO1NlY4+SYwd21nyBqCgM XbvIac2V0svvUWjDr8w0HbnL2sde3lIzh3QO3Za1HAInmOhGfYPqhBAopDDOP4jAiBCg UoDnJQCCQB1Lw4AyHsG93iTyqyUuSRz6FP0mTiX6KBsMjptq/aP4k00/HJXQUm9n0ySd EH4PDfJAjs54+2aeAGM+gXwlN4v7DjJQatvKJukF8Kd5V1V2dXOzNjw93KPS8VdNsEVT ASADw+ApKIZliTv3Z5e8HtI+vGSteswV0US2bp7Xt17AL/tzvblnBk2MCaMzFvtY98+2 0Ybg== X-Gm-Message-State: AOAM532OJ1vKbV8IEWpIFwaeYt/yBCsrxlgHMS8oednnTZfv6r24C4J7 dIB1uYjVAiCa2UVwcw/YDk5aHB8vhNGoo4V4 X-Google-Smtp-Source: ABdhPJy+8HcYgbSa+y+X8zb9tKME+tZxgcy3NkfOE4wc7ik0U1Ut2Ocju6eqEEUbi0XbFZzOxMtTng== X-Received: by 2002:a63:3c5d:: with SMTP id i29mr13225022pgn.415.1631946525418; Fri, 17 Sep 2021 23:28:45 -0700 (PDT) From: Eric Tang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC 01/10] target/riscv: rvb: fixed an error about srow/sroiw instructions Date: Sat, 18 Sep 2021 14:28:07 +0800 Message-Id: <20210918062816.7546-2-tangxingxin1008@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210918062816.7546-1-tangxingxin1008@gmail.com> References: <20210918062816.7546-1-tangxingxin1008@gmail.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::431; envelope-from=tangxingxin1008@gmail.com; helo=mail-pf1-x431.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, 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-Mailman-Approved-At: Sat, 18 Sep 2021 04:20:45 -0400 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: alistair.francis@wdc.com, bin.meng@windriver.com, palmer@dabbelt.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631953386753100007 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" According to spec, these instructions ignore the upper 32 bit of their input and sign-extend their 32 bit output values. Fixed the output's error when their input values greater than 0xffffffff. Signed-off-by: Eric Tang diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_tr= ans/trans_rvb.c.inc index b72e76255c..96b6fcb41d 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -484,12 +484,32 @@ static bool trans_sloiw(DisasContext *ctx, arg_sloiw = *a) return gen_shift_imm_tl(ctx, a, EXT_NONE, gen_slo); } =20 +static void gen_srow(TCGv ret, TCGv arg1, TCGv arg2) +{ + TCGv_i32 t1 =3D tcg_temp_new_i32(); + TCGv_i32 t2 =3D tcg_temp_new_i32(); + + /* truncate to 32-bits */ + tcg_gen_trunc_tl_i32(t1, arg1); + tcg_gen_trunc_tl_i32(t2, arg2); + + tcg_gen_not_i32(t1, t1); + tcg_gen_shr_i32(t1, t1, t2); + tcg_gen_not_i32(t1, t1); + + /* sign-extend 64-bits */ + tcg_gen_ext_i32_tl(ret, t1); + + tcg_temp_free_i32(t1); + tcg_temp_free_i32(t2); +} + static bool trans_srow(DisasContext *ctx, arg_srow *a) { REQUIRE_64BIT(ctx); REQUIRE_EXT(ctx, RVB); ctx->w =3D true; - return gen_shift(ctx, a, EXT_ZERO, gen_sro); + return gen_shift(ctx, a, EXT_ZERO, gen_srow); } =20 static bool trans_sroiw(DisasContext *ctx, arg_sroiw *a) @@ -497,7 +517,7 @@ static bool trans_sroiw(DisasContext *ctx, arg_sroiw *a) REQUIRE_64BIT(ctx); REQUIRE_EXT(ctx, RVB); ctx->w =3D true; - return gen_shift_imm_tl(ctx, a, EXT_ZERO, gen_sro); + return gen_shift_imm_tl(ctx, a, EXT_ZERO, gen_srow); } =20 static void gen_rorw(TCGv ret, TCGv arg1, TCGv arg2) --=20 2.17.1 From nobody Sat May 4 05:50:22 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631953479227826.8208125677107; Sat, 18 Sep 2021 01:24:39 -0700 (PDT) Received: from localhost ([::1]:38904 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mRVeI-00011U-6a for importer@patchew.org; Sat, 18 Sep 2021 04:24:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48788) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mRTqJ-0002i6-4e; Sat, 18 Sep 2021 02:28:55 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:40826) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mRTqH-0003Es-JQ; Sat, 18 Sep 2021 02:28:54 -0400 Received: by mail-pf1-x431.google.com with SMTP id y8so11205569pfa.7; Fri, 17 Sep 2021 23:28:52 -0700 (PDT) Received: from eric-OptiPlex-7080.starfivetech.com (ip164.ip-51-195-37.eu. [51.195.37.164]) by smtp.gmail.com with ESMTPSA id f27sm8126432pfq.78.2021.09.17.23.28.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Sep 2021 23:28:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=rFoqqvN0CrtpEo+tl8a+Opb0h4GrOuZq3kv55mR/xyk=; b=otdpNdYbX+jDxVwlRFR3QbS2k/ftbI3nTXwl5L4XZyM6FXj7h39YOSIsqlEbXYlXT0 NHaTVL6WpQOzySQpLN4Naw2CGXLijVv/Kd7EwbLn247qpW+BZWt7gRmURPHb/FkdOjg+ YMvU/RsImXrph/C544f6CN0ZN0Nvy+pMFUU6CGAUxHbEI9b8GjBNkA66BkfM21zG/AE5 Phj+7JjgzPD4mgWVy7JyUCUPoppwInsmCsfAGyCMvzohAYkzR/7Qjb7Grc5kvbenBvGd sgHBx9tXY1itLqXZue35F+lcRLdJvAtLSQGLSBx4vLJn1cplejsakcuzTEyx/K+lQiNT bwfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=rFoqqvN0CrtpEo+tl8a+Opb0h4GrOuZq3kv55mR/xyk=; b=H+ojwKf3W/rplQdyBxnYScJkR2T3HAzlejbsannVBqXipBIDNKjW5VUFTKUfW8fFDv YVuro6qXOIujl7CRgq4VFG/Bbn2lKNK7xzW9K7xG7pdVpabdRwwi5b4KJf4SsoX5IL3/ j9WvAtCdDl3b4YEcyddZGc19W5c+TPg3psq3HEke3Ku6ibAKu3+kiQKUcQ2YAEmEwwuY QUoSCkTeZNPcsjtPJcUQAG/mKW8QS6jNB7g3rK1DpmxyMH6UpLXWi806xrgUs0lwZlVL XlEKjMAOxulzmGuom7sfjH9XlRW3gzfw0rmwYmdyAo7jATmDV0JN+ycUHSgW6JbRXzTZ ZYrw== X-Gm-Message-State: AOAM530TEJBBdbv/FOa+qBbbN6jtpskhzei4HWrvcS31mGsKTApPy3p+ OMZDl3laxbPlLC1WMXfXEUK1e9MJ7G5z4gaY X-Google-Smtp-Source: ABdhPJwza0ofM+D56dyABx3c24Zz22rCdlN2IUjvnayW6RZufrM5kdNogPeOWJxXXywKW5kain8Beg== X-Received: by 2002:a65:6554:: with SMTP id a20mr13342565pgw.107.1631946531747; Fri, 17 Sep 2021 23:28:51 -0700 (PDT) From: Eric Tang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC 02/10] target/riscv: rvb: add carry-less multiply instructions Date: Sat, 18 Sep 2021 14:28:08 +0800 Message-Id: <20210918062816.7546-3-tangxingxin1008@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210918062816.7546-1-tangxingxin1008@gmail.com> References: <20210918062816.7546-1-tangxingxin1008@gmail.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::431; envelope-from=tangxingxin1008@gmail.com; helo=mail-pf1-x431.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, 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-Mailman-Approved-At: Sat, 18 Sep 2021 04:20:50 -0400 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: alistair.francis@wdc.com, bin.meng@windriver.com, palmer@dabbelt.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631953480414100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Eric Tang diff --git a/target/riscv/bitmanip_helper.c b/target/riscv/bitmanip_helper.c index 5b2f795d03..e31cf582ca 100644 --- a/target/riscv/bitmanip_helper.c +++ b/target/riscv/bitmanip_helper.c @@ -88,3 +88,38 @@ target_ulong HELPER(gorcw)(target_ulong rs1, target_ulon= g rs2) { return do_gorc(rs1, rs2, 32); } + +#define DO_CLMULA(NAME, NUM, BODY) \ +static target_ulong do_##NAME(target_ulong rs1, \ + target_ulong rs2, \ + int bits) \ +{ \ + target_ulong x =3D 0; \ + int i; \ + \ + for (i =3D NUM; i < bits; i++) { \ + if ((rs2 >> i) & 1) { \ + x ^=3D BODY; \ + } \ + } \ + return x; \ +} + +DO_CLMULA(clmul, 0, (rs1 << i)) +DO_CLMULA(clmulh, 1, (rs1 >> (bits - i))) +DO_CLMULA(clmulr, 0, (rs1 >> (bits - i - 1))) + +target_ulong HELPER(clmul)(target_ulong rs1, target_ulong rs2) +{ + return do_clmul(rs1, rs2, TARGET_LONG_BITS); +} + +target_ulong HELPER(clmulh)(target_ulong rs1, target_ulong rs2) +{ + return do_clmulh(rs1, rs2, TARGET_LONG_BITS); +} + +target_ulong HELPER(clmulr)(target_ulong rs1, target_ulong rs2) +{ + return do_clmulr(rs1, rs2, TARGET_LONG_BITS); +} diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 460eee9988..7cbcee48e6 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -63,6 +63,9 @@ DEF_HELPER_FLAGS_2(grev, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(grevw, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(gorc, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(gorcw, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(clmul, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(clmulh, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(clmulr, TCG_CALL_NO_RWG_SE, tl, tl, tl) =20 /* Special functions */ DEF_HELPER_2(csrr, tl, env, int) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 2cd921d51c..9eff9d5f5c 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -690,6 +690,9 @@ gorc 0010100 .......... 101 ..... 0110011 @r sh1add 0010000 .......... 010 ..... 0110011 @r sh2add 0010000 .......... 100 ..... 0110011 @r sh3add 0010000 .......... 110 ..... 0110011 @r +clmul 0000101 .......... 001 ..... 0110011 @r +clmulh 0000101 .......... 011 ..... 0110011 @r +clmulr 0000101 .......... 010 ..... 0110011 @r =20 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_tr= ans/trans_rvb.c.inc index 96b6fcb41d..1d999929de 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -321,6 +321,17 @@ static bool trans_gorci(DisasContext *ctx, arg_gorci *= a) return gen_shift_imm_tl(ctx, a, EXT_ZERO, gen_helper_gorc); } =20 +#define GEN_TRANS_CLMUL(NAME) \ +static bool trans_##NAME(DisasContext *ctx, arg_##NAME * a) \ +{ \ + REQUIRE_EXT(ctx, RVB); \ + return gen_arith(ctx, a, EXT_NONE, gen_helper_##NAME); \ +} + +GEN_TRANS_CLMUL(clmul) +GEN_TRANS_CLMUL(clmulh) +GEN_TRANS_CLMUL(clmulr) + #define GEN_SHADD(SHAMT) \ static void gen_sh##SHAMT##add(TCGv ret, TCGv arg1, TCGv arg2) \ { \ --=20 2.17.1 From nobody Sat May 4 05:50:22 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163195338360675.6113032771766; Sat, 18 Sep 2021 01:23:03 -0700 (PDT) Received: from localhost ([::1]:59512 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mRVck-0004Re-IP for importer@patchew.org; Sat, 18 Sep 2021 04:23:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48802) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mRTqP-0002jP-QF; Sat, 18 Sep 2021 02:29:03 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]:33781) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mRTqN-0003Jx-RA; Sat, 18 Sep 2021 02:29:01 -0400 Received: by mail-pg1-x534.google.com with SMTP id u18so11854129pgf.0; Fri, 17 Sep 2021 23:28:59 -0700 (PDT) Received: from eric-OptiPlex-7080.starfivetech.com (ip164.ip-51-195-37.eu. [51.195.37.164]) by smtp.gmail.com with ESMTPSA id f27sm8126432pfq.78.2021.09.17.23.28.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Sep 2021 23:28:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QRXDXMQwweCgm64SVcBNIxVx0nsRm+SoC8VmDFySHHw=; b=h0csdlSQX+pMSACNqBvXgwU8mrqNUVymPs4kJufSav+jGV2R+k5P1GlsrRrpScztdz CDEFN2p5tSQpE7g5E5eilVFadhdnjosjhvZlDTMeuwd9hXNWEjfLCzpB072cvJm0IrLa FkP38iqhB50JiOaxxTr17hDr7zVetyckKChafAopQD12tGXbjoZUHp8m95gUComGuHFY NyQ7QcMduhLjTzsdQlNxe4lhBc+rEq71kG0VnV/jD8GLYYUvVzjjAmw7KsYrWG+CiisX 5+pTc/D7zW1AyFX2W1enm2xU4Jk6d0HCugSg0SVxej6hwZX69624c8v9mRAIOAozreMC X5pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=QRXDXMQwweCgm64SVcBNIxVx0nsRm+SoC8VmDFySHHw=; b=mtS9P1c273ABjfPHzpyRPcPhcYMQCNBc73NNr+A/JfJiSzLE5vnIYYymHPdo0Ja4EN I/xKsL+ExwnywouzUkoh1rEFeSk2omVj+gS9esEkgfTTLRH1Olr/98zr6FCXJ8VgHrtQ z9UPTSWqELBr8F1SxIZadPdxlnWeLP0JQRSRMF8E5xjc87U289btNm5kA0J3GWd5SHYq 3U+RlL1GYBT7xS9AfcL65zXH83jzQBaypyXjx4CS3tjpXjMA3qh3dNI8/9uRffamu4aH 6QFYL/pijlOoSi0jNO2LHFNCM3mcVwCbnmNvluue9mdr6RuDlt+KTe17vAuWipWTHWCF SN7Q== X-Gm-Message-State: AOAM531ipAXkBxZBDGp64o7OkJ8qj5TrALZx96sfChKlQQKOGgu6dSSu 5eUHbcss9Fz3sW4CfldZRVxSMIBC8AlViAJT X-Google-Smtp-Source: ABdhPJxEBq1KJ5z0k2akN3Tn2k46amuQyD1Ww2SdPB9+5PSMl3jNlUTYtPSFc1XSpli8peVL8t9Nvw== X-Received: by 2002:a62:76c8:0:b0:3f2:6a5:b8eb with SMTP id r191-20020a6276c8000000b003f206a5b8ebmr14307558pfc.58.1631946538120; Fri, 17 Sep 2021 23:28:58 -0700 (PDT) From: Eric Tang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC 03/10] target/riscv: rvb: add cmix/cmov instructions Date: Sat, 18 Sep 2021 14:28:09 +0800 Message-Id: <20210918062816.7546-4-tangxingxin1008@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210918062816.7546-1-tangxingxin1008@gmail.com> References: <20210918062816.7546-1-tangxingxin1008@gmail.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::534; envelope-from=tangxingxin1008@gmail.com; helo=mail-pg1-x534.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, 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-Mailman-Approved-At: Sat, 18 Sep 2021 04:20:51 -0400 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: alistair.francis@wdc.com, bin.meng@windriver.com, palmer@dabbelt.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631953385024100003 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Eric Tang diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 9eff9d5f5c..989ea3c602 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -43,6 +43,7 @@ &r rd rs1 rs2 &r2 rd rs1 &r2_s rs1 rs2 +&r4 rd rs1 rs2 rs3 &s imm rs1 rs2 &u imm rd &shift shamt rs1 rd @@ -82,6 +83,7 @@ @r_wdvm ..... wd:1 vm:1 ..... ..... ... ..... ....... &rwdvm %rs2 %rs1 %rd @r2_zimm . zimm:11 ..... ... ..... ....... %rs1 %rd @r2_s ....... ..... ..... ... ..... ....... %rs2 %rs1 +@r4 ..... .. ..... ..... ... ..... ....... &r4 %rs3 %rs2 %rs1 %rd =20 @hfence_gvma ....... ..... ..... ... ..... ....... %rs2 %rs1 @hfence_vvma ....... ..... ..... ... ..... ....... %rs2 %rs1 @@ -693,6 +695,8 @@ sh3add 0010000 .......... 110 ..... 0110011 @r clmul 0000101 .......... 001 ..... 0110011 @r clmulh 0000101 .......... 011 ..... 0110011 @r clmulr 0000101 .......... 010 ..... 0110011 @r +cmix .....11 .......... 001 ..... 0110011 @r4 +cmov .....11 .......... 101 ..... 0110011 @r4 =20 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_tr= ans/trans_rvb.c.inc index 1d999929de..ebcbb341cb 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -332,6 +332,32 @@ GEN_TRANS_CLMUL(clmul) GEN_TRANS_CLMUL(clmulh) GEN_TRANS_CLMUL(clmulr) =20 +static void gen_cmix(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3) +{ + tcg_gen_and_tl(arg1, arg1, arg2); + tcg_gen_not_tl(arg2, arg2); + tcg_gen_and_tl(arg3, arg3, arg2); + tcg_gen_or_tl(ret, arg1, arg3); +} + +static void gen_cmov(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3) +{ + TCGv zero =3D tcg_const_tl(0); + tcg_gen_movcond_tl(TCG_COND_NE, ret, arg2, zero, arg1, arg3); +} + +static bool trans_cmix(DisasContext *ctx, arg_cmix *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_quat(ctx, a, EXT_NONE, gen_cmix); +} + +static bool trans_cmov(DisasContext *ctx, arg_cmov *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_quat(ctx, a, EXT_NONE, gen_cmov); +} + #define GEN_SHADD(SHAMT) \ static void gen_sh##SHAMT##add(TCGv ret, TCGv arg1, TCGv arg2) \ { \ diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 74b33fa3c9..0a62666ce7 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -395,6 +395,20 @@ static bool gen_arith(DisasContext *ctx, arg_r *a, Dis= asExtend ext, return true; } =20 +static bool gen_quat(DisasContext *ctx, arg_r4 *a, DisasExtend ext, + void (*func)(TCGv, TCGv, TCGv, TCGv)) +{ + TCGv dest =3D dest_gpr(ctx, a->rd); + TCGv src1 =3D get_gpr(ctx, a->rs1, ext); + TCGv src2 =3D get_gpr(ctx, a->rs2, ext); + TCGv src3 =3D get_gpr(ctx, a->rs3, ext); + + func(dest, src1, src2, src3); + + gen_set_gpr(ctx, a->rd, dest); + return true; +} + static bool gen_shift_imm_fn(DisasContext *ctx, arg_shift *a, DisasExtend = ext, void (*func)(TCGv, TCGv, target_long)) { --=20 2.17.1 From nobody Sat May 4 05:50:22 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631953489437666.7508091817178; Sat, 18 Sep 2021 01:24:49 -0700 (PDT) Received: from localhost ([::1]:39856 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mRVeS-0001f9-EY for importer@patchew.org; Sat, 18 Sep 2021 04:24:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48832) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mRTqW-0002o5-Rw; Sat, 18 Sep 2021 02:29:09 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]:43723) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mRTqU-0003Q8-Bu; Sat, 18 Sep 2021 02:29:08 -0400 Received: by mail-pf1-x432.google.com with SMTP id c1so8310920pfp.10; Fri, 17 Sep 2021 23:29:05 -0700 (PDT) Received: from eric-OptiPlex-7080.starfivetech.com (ip164.ip-51-195-37.eu. [51.195.37.164]) by smtp.gmail.com with ESMTPSA id f27sm8126432pfq.78.2021.09.17.23.28.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Sep 2021 23:29:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=tCkNuygnDGFJb1Lm71vzIjKT5IRddjT0664w09UF1Xw=; b=aBwsrK+3ykDOc206ho3At978NInFmbZ48Z+hn88XSlerGBZNP75/lqBtyUF0vSjb88 ZfZ0LltFV0Q3XY01PPdEd35rd1aUpBxSKVCO3pMh45PXlCIsu0c6jRRcrBF3ozuV8Ari sTMhpysWkbsVq/CvBdMAiPrIlzi05NLchSYI7r1TNHmjW8CBCASAoxB7Pb5EH9HQVCZj 3PpSwPJzLUlLDY84muP2nGz4GLvCePeigrT5RE7zMpFmolV/SsHLd7BbYnGFGGejFR40 1kR95f/FSZW/p8l3VmtQ0mDfPq+INDe4zCfiUcG3AZWtccLn1L4pmxbYvOBNiTE4gBH2 3dLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=tCkNuygnDGFJb1Lm71vzIjKT5IRddjT0664w09UF1Xw=; b=vK5BvE5ysT5M6L9Tjt8agiO+VB1GIWYHYlcJotFe7ko8rEyLMN1OctsFmbUXpMeJVZ RMNfktwSnKj4+9wYJPInr4969KRGYLo3Rl7NnscttBTG3HWDBAe9KqhtR2Akdnh6ym7V LvSLJlhLYxJun42g6h8lRuob4+ynjzoeioWCTBd4n4AjiD+e3/PPfHLrHnhgqJxCK4Qk nOHbXsS4wu0MGp2aVne6yw2nWD9EOa1JBd7vUzU96UWUJCmirnBsc2hj3Z8q1bxZwdJ8 amA/wmHbeWr15mv0w8r4I84d3ltKRO2YgWbVaD3e//XfTcpBb37SV75kakmoSRE2YO7B j3XQ== X-Gm-Message-State: AOAM530lm/47GMkWpzY5mmkHTz8VSwtXpuva4kArmbFsvdV/1vYe6vag brr/QHjDu1brtdPS4/6Pe0jOxP2UUBMdvfln X-Google-Smtp-Source: ABdhPJykjFMNNJZzc7AsUp+GsgtJhZAEpcVvXFyW2JH8Y6j2MCFvFH+hMPVYXXSKORFU4DpPfTXFgg== X-Received: by 2002:a63:69c6:: with SMTP id e189mr4894167pgc.187.1631946544632; Fri, 17 Sep 2021 23:29:04 -0700 (PDT) From: Eric Tang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC 04/10] target/riscv: rvb: add generalized shuffle instructions Date: Sat, 18 Sep 2021 14:28:10 +0800 Message-Id: <20210918062816.7546-5-tangxingxin1008@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210918062816.7546-1-tangxingxin1008@gmail.com> References: <20210918062816.7546-1-tangxingxin1008@gmail.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::432; envelope-from=tangxingxin1008@gmail.com; helo=mail-pf1-x432.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, 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-Mailman-Approved-At: Sat, 18 Sep 2021 04:20:52 -0400 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: alistair.francis@wdc.com, bin.meng@windriver.com, palmer@dabbelt.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631953491063100003 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Eric Tang diff --git a/target/riscv/bitmanip_helper.c b/target/riscv/bitmanip_helper.c index e31cf582ca..19c64756c5 100644 --- a/target/riscv/bitmanip_helper.c +++ b/target/riscv/bitmanip_helper.c @@ -123,3 +123,85 @@ target_ulong HELPER(clmulr)(target_ulong rs1, target_u= long rs2) { return do_clmulr(rs1, rs2, TARGET_LONG_BITS); } + +static target_ulong shuffle_stage(target_ulong src, + uint64_t maskl, + uint64_t maskr, + int n) +{ + target_ulong x =3D src & ~(maskl | maskr); + x |=3D ((src << n) & maskl) | ((src >> n) & maskr); + return x; +} + +static target_ulong do_shfl(target_ulong rs1, + target_ulong rs2, + int bits) +{ + target_ulong x =3D rs1; + int shamt =3D rs2 & ((bits - 1) >> 1); + + if (shamt & 16) { + x =3D shuffle_stage(x, 0x0000ffff00000000LL, 0x00000000ffff0000LL,= 16); + } + if (shamt & 8) { + x =3D shuffle_stage(x, 0x00ff000000ff0000LL, 0x0000ff000000ff00LL,= 8); + } + if (shamt & 4) { + x =3D shuffle_stage(x, 0x0f000f000f000f00LL, 0x00f000f000f000f0LL,= 4); + } + if (shamt & 2) { + x =3D shuffle_stage(x, 0x3030303030303030LL, 0x0c0c0c0c0c0c0c0cLL,= 2); + } + if (shamt & 1) { + x =3D shuffle_stage(x, 0x4444444444444444LL, 0x2222222222222222LL,= 1); + } + + return x; +} + +static target_ulong do_unshfl(target_ulong rs1, + target_ulong rs2, + int bits) +{ + target_ulong x =3D rs1; + int shamt =3D rs2 & ((bits - 1) >> 1); + + if (shamt & 1) { + x =3D shuffle_stage(x, 0x4444444444444444LL, 0x2222222222222222LL,= 1); + } + if (shamt & 2) { + x =3D shuffle_stage(x, 0x3030303030303030LL, 0x0c0c0c0c0c0c0c0cLL,= 2); + } + if (shamt & 4) { + x =3D shuffle_stage(x, 0x0f000f000f000f00LL, 0x00f000f000f000f0LL,= 4); + } + if (shamt & 8) { + x =3D shuffle_stage(x, 0x00ff000000ff0000LL, 0x0000ff000000ff00LL,= 8); + } + if (shamt & 16) { + x =3D shuffle_stage(x, 0x0000ffff00000000LL, 0x00000000ffff0000LL,= 16); + } + + return x; +} + +target_ulong HELPER(shfl)(target_ulong rs1, target_ulong rs2) +{ + return do_shfl(rs1, rs2, TARGET_LONG_BITS); +} + +target_ulong HELPER(unshfl)(target_ulong rs1, target_ulong rs2) +{ + return do_unshfl(rs1, rs2, TARGET_LONG_BITS); +} + +target_ulong HELPER(shflw)(target_ulong rs1, target_ulong rs2) +{ + return do_shfl(rs1, rs2, 32); +} + +target_ulong HELPER(unshflw)(target_ulong rs1, target_ulong rs2) +{ + return do_unshfl(rs1, rs2, 32); +} diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 7cbcee48e6..015526faf0 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -66,6 +66,10 @@ DEF_HELPER_FLAGS_2(gorcw, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(clmul, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(clmulh, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(clmulr, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(shfl, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(unshfl, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(shflw, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(unshflw, TCG_CALL_NO_RWG_SE, tl, tl, tl) =20 /* Special functions */ DEF_HELPER_2(csrr, tl, env, int) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 989ea3c602..e70a38a5c6 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -23,6 +23,7 @@ %rd 7:5 %sh5 20:5 =20 +%sh6 20:6 %sh7 20:7 %csr 20:12 %rm 12:3 @@ -63,6 +64,7 @@ @j .................... ..... ....... &j imm=3D%imm_j = %rd =20 @sh ...... ...... ..... ... ..... ....... &shift shamt=3D%sh7 = %rs1 %rd +@sh6 ...... ...... ..... ... ..... ....... &shift shamt=3D%sh6 = %rs1 %rd @csr ............ ..... ... ..... ....... %csr %r= s1 %rd =20 @atom_ld ..... aq:1 rl:1 ..... ........ ..... ....... &atomic rs2=3D0 = %rs1 %rd @@ -695,6 +697,8 @@ sh3add 0010000 .......... 110 ..... 0110011 @r clmul 0000101 .......... 001 ..... 0110011 @r clmulh 0000101 .......... 011 ..... 0110011 @r clmulr 0000101 .......... 010 ..... 0110011 @r +shfl 0000100 .......... 001 ..... 0110011 @r +unshfl 0000100 .......... 101 ..... 0110011 @r cmix .....11 .......... 001 ..... 0110011 @r4 cmov .....11 .......... 101 ..... 0110011 @r4 =20 @@ -707,6 +711,8 @@ sroi 00100. ........... 101 ..... 0010011 @sh rori 01100. ........... 101 ..... 0010011 @sh grevi 01101. ........... 101 ..... 0010011 @sh gorci 00101. ........... 101 ..... 0010011 @sh +shfli 000010 ........... 001 ..... 0010011 @sh6 +unshfli 000010 ........... 101 ..... 0010011 @sh6 =20 # *** RV64B Standard Extension (in addition to RV32B) *** clzw 0110000 00000 ..... 001 ..... 0011011 @r2 @@ -729,6 +735,8 @@ sh1add_uw 0010000 .......... 010 ..... 0111011 @r sh2add_uw 0010000 .......... 100 ..... 0111011 @r sh3add_uw 0010000 .......... 110 ..... 0111011 @r add_uw 0000100 .......... 000 ..... 0111011 @r +shflw 0000100 .......... 001 ..... 0111011 @r +unshflw 0000100 .......... 101 ..... 0111011 @r =20 bsetiw 0010100 .......... 001 ..... 0011011 @sh5 bclriw 0100100 .......... 001 ..... 0011011 @sh5 diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_tr= ans/trans_rvb.c.inc index ebcbb341cb..cbd48b4c8c 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -321,6 +321,36 @@ static bool trans_gorci(DisasContext *ctx, arg_gorci *= a) return gen_shift_imm_tl(ctx, a, EXT_ZERO, gen_helper_gorc); } =20 +static bool trans_shfl(DisasContext *ctx, arg_shfl *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, EXT_NONE, gen_helper_shfl); +} + +static bool trans_unshfl(DisasContext *ctx, arg_unshfl *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, EXT_NONE, gen_helper_unshfl); +} + +static bool trans_shfli(DisasContext *ctx, arg_shfli *a) +{ + REQUIRE_EXT(ctx, RVB); + if (a->shamt >=3D (TARGET_LONG_BITS / 2)) { + return false; + } + return gen_shift_imm_tl(ctx, a, EXT_NONE, gen_helper_shfl); +} + +static bool trans_unshfli(DisasContext *ctx, arg_unshfli *a) +{ + REQUIRE_EXT(ctx, RVB); + if (a->shamt >=3D (TARGET_LONG_BITS / 2)) { + return false; + } + return gen_shift_imm_tl(ctx, a, EXT_NONE, gen_helper_unshfl); +} + #define GEN_TRANS_CLMUL(NAME) \ static bool trans_##NAME(DisasContext *ctx, arg_##NAME * a) \ { \ @@ -703,3 +733,19 @@ static bool trans_slli_uw(DisasContext *ctx, arg_slli_= uw *a) REQUIRE_EXT(ctx, RVB); return gen_shift_imm_fn(ctx, a, EXT_NONE, gen_slli_uw); } + +static bool trans_shflw(DisasContext *ctx, arg_shflw *a) +{ + REQUIRE_64BIT(ctx); + REQUIRE_EXT(ctx, RVB); + ctx->w =3D true; + return gen_arith(ctx, a, EXT_ZERO, gen_helper_shflw); +} + +static bool trans_unshflw(DisasContext *ctx, arg_unshflw *a) +{ + REQUIRE_64BIT(ctx); + REQUIRE_EXT(ctx, RVB); + ctx->w =3D true; + return gen_arith(ctx, a, EXT_ZERO, gen_helper_unshflw); +} --=20 2.17.1 From nobody Sat May 4 05:50:22 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631953680218764.9407792519798; Sat, 18 Sep 2021 01:28:00 -0700 (PDT) Received: from localhost ([::1]:47736 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mRVhX-0006xL-8n for importer@patchew.org; Sat, 18 Sep 2021 04:27:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48856) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mRTqc-0002tF-Mf; Sat, 18 Sep 2021 02:29:14 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:41739) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mRTqb-0003VQ-2u; Sat, 18 Sep 2021 02:29:14 -0400 Received: by mail-pj1-x1033.google.com with SMTP id m21-20020a17090a859500b00197688449c4so8991062pjn.0; Fri, 17 Sep 2021 23:29:12 -0700 (PDT) Received: from eric-OptiPlex-7080.starfivetech.com (ip164.ip-51-195-37.eu. [51.195.37.164]) by smtp.gmail.com with ESMTPSA id f27sm8126432pfq.78.2021.09.17.23.29.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Sep 2021 23:29:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8q194n3OcHIu6kJw6qzrVE2FyEddlwDvVh+pktzSnos=; b=NYO6K+XQ3TXOra9cpxFMgIgag3Mv8CGxdKAQ5nUa6O48abCJ0NWCLgzn7wQE3R7Bso 5gAkbjMqqkuSiJ2YJpRI2eTGMU3xlrbJdEQzeEZljugtYvNmrn9Aa5WbvAlUlT9CG/9l RyhpXuSmAcPILxmuZFXo9vXIo4+LTFyxe+mPwn/f1LaEyWIWa4VdWtTG4z15xPUFA4YS cmuurZYzoBoegXSxPwKv3SulP4Afcdv7zgUVW8QF2G6Dsj75YIqwkR+vw4fDj1kf89sa tUuDQxaKNmd1Wr7bfYrMbtZDcmwMH3E8HwOJmurygwSS8pCb8zrlkiA1tbLoGh3r3DtI 5EXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8q194n3OcHIu6kJw6qzrVE2FyEddlwDvVh+pktzSnos=; b=tgIoIg6KX23WbpwspDvdK2lHE72qTCtcCeE0gykIVzd+65MvY7nj0pQUmFIUH5NGRb okpsyz6MQxkj0OvAexxGJR0gyNdzW4sfdQRrxB2VEeGWRedPt6AsgJfrpePZ5yiNuVd6 EGwquSAxB4bJSi5EQFRlgiXmByeRJU3plmivFMXWzKEf5/RuLelbnw6J/7WepTPNZqRA 6ZZd5AxF8LRqeSALo9+BLaW0duJzl9j9qpRDnhCSEcwS0EiDRnOyQJhEdaGL7fJhvAX5 dXWfeioHBXJp3XBsHhkRjde8SYRZ8BKPBmTJ0CHcp4igjf8ZtoSNqpku/jldgEtEdL+1 f9rA== X-Gm-Message-State: AOAM531Z3JPa3BEKHPTV0vCPveWuDjYuldC2O+wvtpbyb/Mz6UoJ1GSz 9Y3k8PJgS6ZKcSGzKUAJomhLa9AjNMQDwe8k X-Google-Smtp-Source: ABdhPJxHRPvhs7QTWcTDBg7kGepHfC1DvmpFdDwbYMzU7jfDpWxvoNwMhS8D4ZDThYYVokKX5WDQog== X-Received: by 2002:a17:90a:eac4:: with SMTP id ev4mr16530553pjb.244.1631946551137; Fri, 17 Sep 2021 23:29:11 -0700 (PDT) From: Eric Tang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC 05/10] target/riscv: rvb: add crossbar permutation instructions Date: Sat, 18 Sep 2021 14:28:11 +0800 Message-Id: <20210918062816.7546-6-tangxingxin1008@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210918062816.7546-1-tangxingxin1008@gmail.com> References: <20210918062816.7546-1-tangxingxin1008@gmail.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=tangxingxin1008@gmail.com; helo=mail-pj1-x1033.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, 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-Mailman-Approved-At: Sat, 18 Sep 2021 04:20:53 -0400 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: alistair.francis@wdc.com, bin.meng@windriver.com, palmer@dabbelt.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631953682423100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Eric Tang diff --git a/target/riscv/bitmanip_helper.c b/target/riscv/bitmanip_helper.c index 19c64756c5..fa4597b44b 100644 --- a/target/riscv/bitmanip_helper.c +++ b/target/riscv/bitmanip_helper.c @@ -205,3 +205,43 @@ target_ulong HELPER(unshflw)(target_ulong rs1, target_= ulong rs2) { return do_unshfl(rs1, rs2, 32); } + +static target_ulong do_xperm(target_ulong rs1, + target_ulong rs2, + int sz_log2, + int bits) +{ + target_ulong pos =3D 0; + target_ulong r =3D 0; + target_ulong sz =3D 1LL << sz_log2; + target_ulong mask =3D (1LL << sz) - 1; + int i; + for (i =3D 0; i < bits; i +=3D sz) { + pos =3D ((rs2 >> i) & mask) << sz_log2; + if (pos < bits) { + r |=3D ((rs1 >> pos) & mask) << i; + } + } + + return r; +} + +target_ulong HELPER(xperm_n)(target_ulong rs1, target_ulong rs2) +{ + return do_xperm(rs1, rs2, 2, TARGET_LONG_BITS); +} + +target_ulong HELPER(xperm_b)(target_ulong rs1, target_ulong rs2) +{ + return do_xperm(rs1, rs2, 3, TARGET_LONG_BITS); +} + +target_ulong HELPER(xperm_h)(target_ulong rs1, target_ulong rs2) +{ + return do_xperm(rs1, rs2, 4, TARGET_LONG_BITS); +} + +target_ulong HELPER(xperm_w)(target_ulong rs1, target_ulong rs2) +{ + return do_xperm(rs1, rs2, 5, TARGET_LONG_BITS); +} diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 015526faf0..ac57982e4f 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -70,6 +70,10 @@ DEF_HELPER_FLAGS_2(shfl, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(unshfl, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(shflw, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(unshflw, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(xperm_n, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(xperm_b, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(xperm_h, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(xperm_w, TCG_CALL_NO_RWG_SE, tl, tl, tl) =20 /* Special functions */ DEF_HELPER_2(csrr, tl, env, int) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index e70a38a5c6..60b56dbf95 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -699,6 +699,9 @@ clmulh 0000101 .......... 011 ..... 0110011 @r clmulr 0000101 .......... 010 ..... 0110011 @r shfl 0000100 .......... 001 ..... 0110011 @r unshfl 0000100 .......... 101 ..... 0110011 @r +xperm_n 0010100 .......... 010 ..... 0110011 @r +xperm_b 0010100 .......... 100 ..... 0110011 @r +xperm_h 0010100 .......... 110 ..... 0110011 @r cmix .....11 .......... 001 ..... 0110011 @r4 cmov .....11 .......... 101 ..... 0110011 @r4 =20 @@ -737,6 +740,7 @@ sh3add_uw 0010000 .......... 110 ..... 0111011 @r add_uw 0000100 .......... 000 ..... 0111011 @r shflw 0000100 .......... 001 ..... 0111011 @r unshflw 0000100 .......... 101 ..... 0111011 @r +xperm_w 0010100 .......... 000 ..... 0110011 @r =20 bsetiw 0010100 .......... 001 ..... 0011011 @sh5 bclriw 0100100 .......... 001 ..... 0011011 @sh5 diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_tr= ans/trans_rvb.c.inc index cbd48b4c8c..e869d82c8f 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -351,6 +351,24 @@ static bool trans_unshfli(DisasContext *ctx, arg_unshf= li *a) return gen_shift_imm_tl(ctx, a, EXT_NONE, gen_helper_unshfl); } =20 +static bool trans_xperm_n(DisasContext *ctx, arg_xperm_n *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, EXT_NONE, gen_helper_xperm_n); +} + +static bool trans_xperm_b(DisasContext *ctx, arg_xperm_b *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, EXT_NONE, gen_helper_xperm_b); +} + +static bool trans_xperm_h(DisasContext *ctx, arg_xperm_h *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, EXT_NONE, gen_helper_xperm_h); +} + #define GEN_TRANS_CLMUL(NAME) \ static bool trans_##NAME(DisasContext *ctx, arg_##NAME * a) \ { \ @@ -749,3 +767,11 @@ static bool trans_unshflw(DisasContext *ctx, arg_unshf= lw *a) ctx->w =3D true; return gen_arith(ctx, a, EXT_ZERO, gen_helper_unshflw); } + +static bool trans_xperm_w(DisasContext *ctx, arg_xperm_w *a) +{ + REQUIRE_64BIT(ctx); + REQUIRE_EXT(ctx, RVB); + ctx->w =3D true; + return gen_arith(ctx, a, EXT_NONE, gen_helper_xperm_w); +} --=20 2.17.1 From nobody Sat May 4 05:50:22 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631953891729266.3454591361058; Sat, 18 Sep 2021 01:31:31 -0700 (PDT) Received: from localhost ([::1]:55948 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mRVkw-0004DY-E8 for importer@patchew.org; Sat, 18 Sep 2021 04:31:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48898) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mRTqi-0002wV-SA; Sat, 18 Sep 2021 02:29:20 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]:36463) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mRTqh-0003cw-83; Sat, 18 Sep 2021 02:29:20 -0400 Received: by mail-pl1-x633.google.com with SMTP id w6so7620328pll.3; Fri, 17 Sep 2021 23:29:18 -0700 (PDT) Received: from eric-OptiPlex-7080.starfivetech.com (ip164.ip-51-195-37.eu. [51.195.37.164]) by smtp.gmail.com with ESMTPSA id f27sm8126432pfq.78.2021.09.17.23.29.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Sep 2021 23:29:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=YjgSfg0xBjBwWrsBZb6kaSkbk1qB2DNEM6WGdIHGeQo=; b=JiYLyI3MjF1DZJ3FB17TF8onXf3Ml9KNeU5r9JkD4s2IrsTMGbnG50MZxrpALdoBYa wm2a7DMaWHvAlTyPa2U2bEbGs0vTb0fLO0Jga/vYZm1RJrNE+gCtWZYXrYJbrEMRzjDz JXv1G01CuReROafnuScDFb3/0mOUaH4UlwglOu2EIC/0odlfw8DuJzbr2ZFeuZn63++k NaWkwXU/UhGyPzcRJD4G0bw7JN3Y9WK9WKxOBIK4x9wlDSrQhlitU18tGiW4qwxwDb5V 7oZFkkpTXDOk70pgYmFsL2CX+dtylsF4fl1wKwvCq9Jm3l4x6ZjyZI4rjKz0r6MJrWlf Qpjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=YjgSfg0xBjBwWrsBZb6kaSkbk1qB2DNEM6WGdIHGeQo=; b=lZ6SmvT+sSdo0P8sUyZI9tehZtOJFNgYRZVC/5W0iCov0DsJ+HzyEgn27NTvterVWD 5x7U9RnYfyXm6/uGDP0n9322Rm/j5uBMUVTsoEib76IE76sqTx8w8PgDYWHgaml/htWQ Rzow4ITfsKFDOH+tceRvu4OjjWuxW5qZnLFm5GJOTXSzEpGRaW08d811DCZshYD6ClLC wWzproFtG6qn37jNp+O0C0GpfUt6tAeRBjrqXhXefsKa3ywmDSGZnTqzLrFhrFQITtAv nntLI1lHdYTTIzVjkWbuNAN4l/KZPNkI0PNwZu1lq2SW5mlTkKHQWAmX0LhANc9jXpoT 1BZw== X-Gm-Message-State: AOAM532RKXlaf5B6ez+WewYqVVHiMWdnO4FhrT/btClV5EVP+QQAOFOP 77zIOekSSXQUBeWulXu9HSZF+SB6podgYJhb X-Google-Smtp-Source: ABdhPJziTyljmC7ptJqfD/DBRD6zKO0zH2XDHEeeBeNLkIVH7KPqPDT+iVINI97O5rUlPKOFeBB1Ug== X-Received: by 2002:a17:903:234a:b0:13c:9439:5cf1 with SMTP id c10-20020a170903234a00b0013c94395cf1mr12931593plh.2.1631946557546; Fri, 17 Sep 2021 23:29:17 -0700 (PDT) From: Eric Tang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC 06/10] target/riscv: rvb: add bfp/bfpw instructions Date: Sat, 18 Sep 2021 14:28:12 +0800 Message-Id: <20210918062816.7546-7-tangxingxin1008@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210918062816.7546-1-tangxingxin1008@gmail.com> References: <20210918062816.7546-1-tangxingxin1008@gmail.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::633; envelope-from=tangxingxin1008@gmail.com; helo=mail-pl1-x633.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, 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-Mailman-Approved-At: Sat, 18 Sep 2021 04:20:58 -0400 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: alistair.francis@wdc.com, bin.meng@windriver.com, palmer@dabbelt.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631953893955100003 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Eric Tang diff --git a/target/riscv/bitmanip_helper.c b/target/riscv/bitmanip_helper.c index fa4597b44b..35f7b0926b 100644 --- a/target/riscv/bitmanip_helper.c +++ b/target/riscv/bitmanip_helper.c @@ -245,3 +245,30 @@ target_ulong HELPER(xperm_w)(target_ulong rs1, target_= ulong rs2) { return do_xperm(rs1, rs2, 5, TARGET_LONG_BITS); } + +static target_ulong do_bfp(target_ulong rs1, + target_ulong rs2, + int bits) +{ + target_ulong cfg =3D rs2 >> (bits / 2); + if ((cfg >> 30) =3D=3D 2) { + cfg =3D cfg >> 16; + } + int len =3D (cfg >> 8) & ((bits / 2) - 1); + int off =3D cfg & (bits - 1); + len =3D len ? len : (bits / 2); + target_ulong mask =3D ~(~(target_ulong)0 << len) << off; + target_ulong data =3D rs2 << off; + + return (data & mask) | (rs1 & ~mask); +} + +target_ulong HELPER(bfp)(target_ulong rs1, target_ulong rs2) +{ + return do_bfp(rs1, rs2, TARGET_LONG_BITS); +} + +target_ulong HELPER(bfpw)(target_ulong rs1, target_ulong rs2) +{ + return do_bfp(rs1, rs2, 32); +} diff --git a/target/riscv/helper.h b/target/riscv/helper.h index ac57982e4f..474b1add63 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -74,6 +74,8 @@ DEF_HELPER_FLAGS_2(xperm_n, TCG_CALL_NO_RWG_SE, tl, tl, t= l) DEF_HELPER_FLAGS_2(xperm_b, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(xperm_h, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(xperm_w, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(bfp, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(bfpw, TCG_CALL_NO_RWG_SE, tl, tl, tl) =20 /* Special functions */ DEF_HELPER_2(csrr, tl, env, int) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 60b56dbf95..5d354f63a2 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -702,6 +702,7 @@ unshfl 0000100 .......... 101 ..... 0110011 @r xperm_n 0010100 .......... 010 ..... 0110011 @r xperm_b 0010100 .......... 100 ..... 0110011 @r xperm_h 0010100 .......... 110 ..... 0110011 @r +bfp 0100100 .......... 111 ..... 0110011 @r cmix .....11 .......... 001 ..... 0110011 @r4 cmov .....11 .......... 101 ..... 0110011 @r4 =20 @@ -741,6 +742,7 @@ add_uw 0000100 .......... 000 ..... 0111011 @r shflw 0000100 .......... 001 ..... 0111011 @r unshflw 0000100 .......... 101 ..... 0111011 @r xperm_w 0010100 .......... 000 ..... 0110011 @r +bfpw 0100100 .......... 111 ..... 0111011 @r =20 bsetiw 0010100 .......... 001 ..... 0011011 @sh5 bclriw 0100100 .......... 001 ..... 0011011 @sh5 diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_tr= ans/trans_rvb.c.inc index e869d82c8f..1997d33008 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -369,6 +369,12 @@ static bool trans_xperm_h(DisasContext *ctx, arg_xperm= _h *a) return gen_arith(ctx, a, EXT_NONE, gen_helper_xperm_h); } =20 +static bool trans_bfp(DisasContext *ctx, arg_bfp *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, EXT_NONE, gen_helper_bfp); +} + #define GEN_TRANS_CLMUL(NAME) \ static bool trans_##NAME(DisasContext *ctx, arg_##NAME * a) \ { \ @@ -775,3 +781,11 @@ static bool trans_xperm_w(DisasContext *ctx, arg_xperm= _w *a) ctx->w =3D true; return gen_arith(ctx, a, EXT_NONE, gen_helper_xperm_w); } + +static bool trans_bfpw(DisasContext *ctx, arg_bfpw *a) +{ + REQUIRE_64BIT(ctx); + REQUIRE_EXT(ctx, RVB); + ctx->w =3D true; + return gen_arith(ctx, a, EXT_NONE, gen_helper_bfpw); +} --=20 2.17.1 From nobody Sat May 4 05:50:22 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631953496508151.33639683340527; Sat, 18 Sep 2021 01:24:56 -0700 (PDT) Received: from localhost ([::1]:40514 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mRVeZ-00025s-EJ for importer@patchew.org; Sat, 18 Sep 2021 04:24:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48916) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mRTqp-0002xZ-BD; Sat, 18 Sep 2021 02:29:27 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:39431) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mRTqn-0003jj-Or; Sat, 18 Sep 2021 02:29:27 -0400 Received: by mail-pg1-x533.google.com with SMTP id g184so11773521pgc.6; Fri, 17 Sep 2021 23:29:25 -0700 (PDT) Received: from eric-OptiPlex-7080.starfivetech.com (ip164.ip-51-195-37.eu. [51.195.37.164]) by smtp.gmail.com with ESMTPSA id f27sm8126432pfq.78.2021.09.17.23.29.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Sep 2021 23:29:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6yeG1jevblBNSzFCV5ZdGYMIIFAHWbiTojLMnc7vGoU=; b=ekhFT1FDbhx/PzMuW8ZH4/y01oFRHdsvDVnhCRdHUo7CpeWQDLlr2Oh7VwDatiCBCl dEOx0rqWJZMJfw9i6OMNaJgZdKHF6IODSOXhSc/wXol8U0ScBMND1IyxD86WkmEgm04d iMp6KdkywOiplsF5F3QkWVVza/CsSgX2c4aqkzFZR79RF9D7QC7pY4WZPYVpW+udETmq kvrNpOWiauoGMw+FDXbnNojyIqNWJR4gi6cPXS33qBTfAaX7QXSPizJw3uDxgkYIwa2D JmZIgGzH5Mhd/ZgZhF0As+oWKGzkGvE6s2P/WiCWmljcq7pLz/wbP/FzHEZnmzzKMN9x ZWAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=6yeG1jevblBNSzFCV5ZdGYMIIFAHWbiTojLMnc7vGoU=; b=mI0rqQzoer3+qv239ykY8iIWAI//4AGUVTtzkhkYjy37iNw1RPzS0E4y3p1s/PivqV tEeuIs+sUYCPpe8bvFc278kLw2uEc59RrtB3e7tbw57cWKE9Gii7h16IBp1n9UsEzeCk dDwILDYAS348yTdyiRfNcUh5v9SPCSWHGFItP//6GxmdhVGYPCY65opxF3KYBoJzDkLt 0tnMo/w3eCUFrlrBxUBXL77XwwH8oUuG+Ex3N+gz98GLRU5rljATo9dn9f4KJDUeQRFT yPjF3H8vJ4hyQTdniB/GQX6XM00VYPrhIiGmd3pQS3BOv95LoRSTVAIaE9KGqzKSI077 bQvQ== X-Gm-Message-State: AOAM532Dp5+fRDSKnmyDwLDkQTmenz46fR5TR+PdJWfs4z0W+3EWQvCu QUOrJAvS6yjQfk5W6zJ94xpoCM6nk2Ja3Nn8 X-Google-Smtp-Source: ABdhPJwBJ6eyOtg1YYGKi3g/G0uUzrk0UPnb7Zj/Wh1FrqD87FStG5zieshcOxvCcV057PNY+1xfyA== X-Received: by 2002:a63:ef01:: with SMTP id u1mr13473289pgh.336.1631946564047; Fri, 17 Sep 2021 23:29:24 -0700 (PDT) From: Eric Tang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC 07/10] target/riscv: rvb: add CRC instructions Date: Sat, 18 Sep 2021 14:28:13 +0800 Message-Id: <20210918062816.7546-8-tangxingxin1008@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210918062816.7546-1-tangxingxin1008@gmail.com> References: <20210918062816.7546-1-tangxingxin1008@gmail.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::533; envelope-from=tangxingxin1008@gmail.com; helo=mail-pg1-x533.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, 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-Mailman-Approved-At: Sat, 18 Sep 2021 04:21:00 -0400 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: alistair.francis@wdc.com, bin.meng@windriver.com, palmer@dabbelt.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631953497011100002 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Eric Tang diff --git a/target/riscv/bitmanip_helper.c b/target/riscv/bitmanip_helper.c index 35f7b0926b..469145ffa9 100644 --- a/target/riscv/bitmanip_helper.c +++ b/target/riscv/bitmanip_helper.c @@ -272,3 +272,58 @@ target_ulong HELPER(bfpw)(target_ulong rs1, target_ulo= ng rs2) { return do_bfp(rs1, rs2, 32); } + +#define DO_CRC(NAME, VALUE) \ +static target_ulong do_##NAME(target_ulong rs1, \ + int nbits) \ +{ \ + int i; \ + target_ulong x =3D rs1; \ + for (i =3D 0; i < nbits; i++) { \ + x =3D (x >> 1) ^ ((VALUE) & ~((x & 1) - 1)); \ + } \ + return x; \ +} + +DO_CRC(crc32, 0xEDB88320) +DO_CRC(crc32c, 0x82F63B78) + +target_ulong HELPER(crc32_b)(target_ulong rs1) +{ + return do_crc32(rs1, 8); +} + +target_ulong HELPER(crc32_h)(target_ulong rs1) +{ + return do_crc32(rs1, 16); +} + +target_ulong HELPER(crc32_w)(target_ulong rs1) +{ + return do_crc32(rs1, 32); +} + +target_ulong HELPER(crc32_d)(target_ulong rs1) +{ + return do_crc32(rs1, 64); +} + +target_ulong HELPER(crc32c_b)(target_ulong rs1) +{ + return do_crc32c(rs1, 8); +} + +target_ulong HELPER(crc32c_h)(target_ulong rs1) +{ + return do_crc32c(rs1, 16); +} + +target_ulong HELPER(crc32c_w)(target_ulong rs1) +{ + return do_crc32c(rs1, 32); +} + +target_ulong HELPER(crc32c_d)(target_ulong rs1) +{ + return do_crc32c(rs1, 64); +} diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 474b1add63..9654d6f7a7 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -76,6 +76,14 @@ DEF_HELPER_FLAGS_2(xperm_h, TCG_CALL_NO_RWG_SE, tl, tl, = tl) DEF_HELPER_FLAGS_2(xperm_w, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(bfp, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(bfpw, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_1(crc32_b, TCG_CALL_NO_RWG_SE, tl, tl) +DEF_HELPER_FLAGS_1(crc32_h, TCG_CALL_NO_RWG_SE, tl, tl) +DEF_HELPER_FLAGS_1(crc32_w, TCG_CALL_NO_RWG_SE, tl, tl) +DEF_HELPER_FLAGS_1(crc32_d, TCG_CALL_NO_RWG_SE, tl, tl) +DEF_HELPER_FLAGS_1(crc32c_b, TCG_CALL_NO_RWG_SE, tl, tl) +DEF_HELPER_FLAGS_1(crc32c_h, TCG_CALL_NO_RWG_SE, tl, tl) +DEF_HELPER_FLAGS_1(crc32c_w, TCG_CALL_NO_RWG_SE, tl, tl) +DEF_HELPER_FLAGS_1(crc32c_d, TCG_CALL_NO_RWG_SE, tl, tl) =20 /* Special functions */ DEF_HELPER_2(csrr, tl, env, int) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 5d354f63a2..b08e38823b 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -670,6 +670,14 @@ 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 +crc32_b 0110000 10000 ..... 001 ..... 0010011 @r2 +crc32_h 0110000 10001 ..... 001 ..... 0010011 @r2 +crc32_w 0110000 10010 ..... 001 ..... 0010011 @r2 +crc32_d 0110000 10011 ..... 001 ..... 0010011 @r2 +crc32c_b 0110000 11000 ..... 001 ..... 0010011 @r2 +crc32c_h 0110000 11001 ..... 001 ..... 0010011 @r2 +crc32c_w 0110000 11010 ..... 001 ..... 0010011 @r2 +crc32c_d 0110000 11011 ..... 001 ..... 0010011 @r2 =20 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_tr= ans/trans_rvb.c.inc index 1997d33008..0d734bfd10 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -386,6 +386,22 @@ GEN_TRANS_CLMUL(clmul) GEN_TRANS_CLMUL(clmulh) GEN_TRANS_CLMUL(clmulr) =20 +#define GEN_TRANS_CRC(NAME) \ +static bool trans_##NAME(DisasContext *ctx, arg_##NAME * a) \ +{ \ + REQUIRE_EXT(ctx, RVB); \ + return gen_unary(ctx, a, EXT_NONE, gen_helper_##NAME); \ +} \ + +GEN_TRANS_CRC(crc32_b) +GEN_TRANS_CRC(crc32_h) +GEN_TRANS_CRC(crc32_w) +GEN_TRANS_CRC(crc32_d) +GEN_TRANS_CRC(crc32c_b) +GEN_TRANS_CRC(crc32c_h) +GEN_TRANS_CRC(crc32c_w) +GEN_TRANS_CRC(crc32c_d) + static void gen_cmix(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3) { tcg_gen_and_tl(arg1, arg1, arg2); --=20 2.17.1 From nobody Sat May 4 05:50:22 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631953722873842.5845732755569; Sat, 18 Sep 2021 01:28:42 -0700 (PDT) Received: from localhost ([::1]:49412 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mRViD-00085S-H3 for importer@patchew.org; Sat, 18 Sep 2021 04:28:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48942) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mRTqw-0002yb-01; Sat, 18 Sep 2021 02:29:34 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:35839) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mRTqu-0003og-Bc; Sat, 18 Sep 2021 02:29:33 -0400 Received: by mail-pf1-x433.google.com with SMTP id w14so731480pfu.2; Fri, 17 Sep 2021 23:29:31 -0700 (PDT) Received: from eric-OptiPlex-7080.starfivetech.com (ip164.ip-51-195-37.eu. [51.195.37.164]) by smtp.gmail.com with ESMTPSA id f27sm8126432pfq.78.2021.09.17.23.29.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Sep 2021 23:29:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=omX1JGg85tCDhPDd5VPa5EKEfYGoEVKZzUYKSpnDRzI=; b=Fr7toKcg8RHhXpUNkExSPZqtgxlb8XdUszfGpHzX2ZtMqqL9EoM3ZLTQH5d+hWlX0l bIYCKw4nggDcBIXZYQmFtDSeTK5i6LHa82OOSR/b8j8J9xrRDZqF+CVJPhhm8tUVSdmN D1zMwL1y7lsdFxhScGw4NWgQb2L6OZH9VhKq5hiVJQMWyA/RKN24w3cO84BlXKBPx2rF GJwkiFP3ciDif9eGXZs3348U7OtYyPoV0amg2Bs5vO/iIq9AKScamY8GTU2bTVBqL4Hb ofL/zHljEW/Gl4wBj/WF49ttBPPHfckbhxcwjHW4qa3weDkESQawK5wbQv99PqqwomqE ofJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=omX1JGg85tCDhPDd5VPa5EKEfYGoEVKZzUYKSpnDRzI=; b=FRSgisBGZ3So3nvaYomF1qA40Iq4ctzpWcIH1c7B1xCv6DDDZck/SPUWYrLq+7dQoU SI71Akv3vQyCTbaGTV3nUOIUrMakDo0PAia6GgWP+2RSbcxWnpZx6ZtrntpxmQPEAtaB bH+CFU022FOsLkahq+P1va798kLOKYlfNcTOTcfzD9n0geP278Uti61kUMUrnsoyXFC4 aKKueSyGrqko9wobDN1IYO1iy3LAnCLD6WP6h61H7TS7IMfJ9qEp/ok+CDM0NFf/uK7I c8elCBr/SaVTVCPq5ooslNH6EDeyiXHta73wtRamQSEkcUxqbkJZli3odbLsbrG+wgrE /2IQ== X-Gm-Message-State: AOAM530WRgmug3TtOQtdiNZgBBmHW+sO6nehIzMU09CDx/DkXdeBxwJL NGGP7fxu9DyZ+18xuvG58iBOzzl7R7NU0Xz5 X-Google-Smtp-Source: ABdhPJy8RUM2oI/kfKkj+POZuSCmaMz9IN1ZUfu/GTx0IyyMXSPD9ITA8+ggWNSSZJa/Ds2wiXewVA== X-Received: by 2002:a62:52d4:0:b0:43d:fe6a:b51d with SMTP id g203-20020a6252d4000000b0043dfe6ab51dmr14487711pfb.49.1631946570448; Fri, 17 Sep 2021 23:29:30 -0700 (PDT) From: Eric Tang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC 08/10] target/riscv: rvb: add bit-matrix instructions Date: Sat, 18 Sep 2021 14:28:14 +0800 Message-Id: <20210918062816.7546-9-tangxingxin1008@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210918062816.7546-1-tangxingxin1008@gmail.com> References: <20210918062816.7546-1-tangxingxin1008@gmail.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::433; envelope-from=tangxingxin1008@gmail.com; helo=mail-pf1-x433.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, 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-Mailman-Approved-At: Sat, 18 Sep 2021 04:21:04 -0400 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: alistair.francis@wdc.com, bin.meng@windriver.com, palmer@dabbelt.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631953723702100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Eric Tang diff --git a/target/riscv/bitmanip_helper.c b/target/riscv/bitmanip_helper.c index 469145ffa9..e936444c12 100644 --- a/target/riscv/bitmanip_helper.c +++ b/target/riscv/bitmanip_helper.c @@ -327,3 +327,78 @@ target_ulong HELPER(crc32c_d)(target_ulong rs1) { return do_crc32c(rs1, 64); } + +static target_ulong do_bmatflip(target_ulong rs1, + int bits) +{ + target_ulong x =3D rs1; + for (int i =3D 0; i < 3; i++) { + x =3D do_shfl(x, 31, bits); + } + return x; +} + +static target_ulong do_bmatxor(target_ulong rs1, + target_ulong rs2, + int bits) +{ + int i; + uint8_t u[8]; + uint8_t v[8]; + uint64_t x =3D 0; + + target_ulong rs2t =3D do_bmatflip(rs2, bits); + + for (i =3D 0; i < 8; i++) { + u[i] =3D rs1 >> (i * 8); + v[i] =3D rs2t >> (i * 8); + } + + for (int i =3D 0; i < 64; i++) { + if (__builtin_popcount(u[i / 8] & v[i % 8]) & 1) { + x |=3D 1LL << i; + } + } + + return x; +} + +static target_ulong do_bmator(target_ulong rs1, + target_ulong rs2, + int bits) +{ + int i; + uint8_t u[8]; + uint8_t v[8]; + uint64_t x =3D 0; + + target_ulong rs2t =3D do_bmatflip(rs2, bits); + + for (i =3D 0; i < 8; i++) { + u[i] =3D rs1 >> (i * 8); + v[i] =3D rs2t >> (i * 8); + } + + for (int i =3D 0; i < 64; i++) { + if ((u[i / 8] & v[i % 8]) !=3D 0) { + x |=3D 1LL << i; + } + } + + return x; +} + +target_ulong HELPER(bmatflip)(target_ulong rs1) +{ + return do_bmatflip(rs1, TARGET_LONG_BITS); +} + +target_ulong HELPER(bmatxor)(target_ulong rs1, target_ulong rs2) +{ + return do_bmatxor(rs1, rs2, TARGET_LONG_BITS); +} + +target_ulong HELPER(bmator)(target_ulong rs1, target_ulong rs2) +{ + return do_bmator(rs1, rs2, TARGET_LONG_BITS); +} diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 9654d6f7a7..8c8fb71bb4 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -84,6 +84,9 @@ DEF_HELPER_FLAGS_1(crc32c_b, TCG_CALL_NO_RWG_SE, tl, tl) DEF_HELPER_FLAGS_1(crc32c_h, TCG_CALL_NO_RWG_SE, tl, tl) DEF_HELPER_FLAGS_1(crc32c_w, TCG_CALL_NO_RWG_SE, tl, tl) DEF_HELPER_FLAGS_1(crc32c_d, TCG_CALL_NO_RWG_SE, tl, tl) +DEF_HELPER_FLAGS_2(bmatxor, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_2(bmator, TCG_CALL_NO_RWG_SE, tl, tl, tl) +DEF_HELPER_FLAGS_1(bmatflip, TCG_CALL_NO_RWG_SE, tl, tl) =20 /* Special functions */ DEF_HELPER_2(csrr, tl, env, int) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index b08e38823b..73f956486b 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -730,6 +730,7 @@ unshfli 000010 ........... 101 ..... 0010011 @sh6 clzw 0110000 00000 ..... 001 ..... 0011011 @r2 ctzw 0110000 00001 ..... 001 ..... 0011011 @r2 cpopw 0110000 00010 ..... 001 ..... 0011011 @r2 +bmatflip 0110000 00011 ..... 001 ..... 0010011 @r2 =20 packw 0000100 .......... 100 ..... 0111011 @r packuw 0100100 .......... 100 ..... 0111011 @r @@ -751,6 +752,8 @@ shflw 0000100 .......... 001 ..... 0111011 @r unshflw 0000100 .......... 101 ..... 0111011 @r xperm_w 0010100 .......... 000 ..... 0110011 @r bfpw 0100100 .......... 111 ..... 0111011 @r +bmator 0000100 .......... 011 ..... 0110011 @r +bmatxor 0100100 .......... 011 ..... 0110011 @r =20 bsetiw 0010100 .......... 001 ..... 0011011 @sh5 bclriw 0100100 .......... 001 ..... 0011011 @sh5 diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_tr= ans/trans_rvb.c.inc index 0d734bfd10..39ca5a573f 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -805,3 +805,24 @@ static bool trans_bfpw(DisasContext *ctx, arg_bfpw *a) ctx->w =3D true; return gen_arith(ctx, a, EXT_NONE, gen_helper_bfpw); } + +static bool trans_bmatflip(DisasContext *ctx, arg_bmatflip *a) +{ + REQUIRE_64BIT(ctx); + REQUIRE_EXT(ctx, RVB); + return gen_unary(ctx, a, EXT_NONE, gen_helper_bmatflip); +} + +static bool trans_bmatxor(DisasContext *ctx, arg_bmatxor *a) +{ + REQUIRE_64BIT(ctx); + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, EXT_NONE, gen_helper_bmatxor); +} + +static bool trans_bmator(DisasContext *ctx, arg_bmator *a) +{ + REQUIRE_64BIT(ctx); + REQUIRE_EXT(ctx, RVB); + return gen_arith(ctx, a, EXT_NONE, gen_helper_bmator); +} --=20 2.17.1 From nobody Sat May 4 05:50:22 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631953495647494.07710222638366; Sat, 18 Sep 2021 01:24:55 -0700 (PDT) Received: from localhost ([::1]:40368 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mRVeY-00020A-I0 for importer@patchew.org; Sat, 18 Sep 2021 04:24:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48972) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mRTr1-0002zn-Vr; Sat, 18 Sep 2021 02:29:39 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:36605) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mRTr0-0003uC-Mf; Sat, 18 Sep 2021 02:29:39 -0400 Received: by mail-pj1-x102d.google.com with SMTP id u13-20020a17090abb0db0290177e1d9b3f7so11543536pjr.1; Fri, 17 Sep 2021 23:29:37 -0700 (PDT) Received: from eric-OptiPlex-7080.starfivetech.com (ip164.ip-51-195-37.eu. [51.195.37.164]) by smtp.gmail.com with ESMTPSA id f27sm8126432pfq.78.2021.09.17.23.29.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Sep 2021 23:29:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qAxIjuayNeVCLSsxLHRPwSTdeZ6cUP55LCrxE6uZ700=; b=V46oFwIeJ8lpJRKOZTCFF//DlHC/qMNj4oyyoCKlabZcgSq28y0kcmnWoZNMqckpoP i3TDR9qd+60gg0rsQHOwe4QdbeSrXVR3Z4suoU6ASrGKRzeSi5Au0wngn/PB8wtPR08r GEDJU36MaeRAfsjSUie2M2tHH0ndTldZCqOD57xQleZmUm9RvD5+j9FdaMQuO2hF+852 lDdVtO3MCSAe5fZ64eWJKDRIA7SmXRQzraJFbMoW/FkzgApDRKWwiD8MavhR5U28U9hx kVUnU181YcvO1hy87YUC6/FhMKSVJRj8lQSgoLt2jDNE56nHxNVRTN/inP65+IxPu/lh 485g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qAxIjuayNeVCLSsxLHRPwSTdeZ6cUP55LCrxE6uZ700=; b=EOd5s34SkDu8j6l54hRB81lvNjS1tuVdlPSgrz7+FwqNSzCwOQLRBxk4np6zhRvMha +hB/yR1VJYHHYBLYojjtwI2jyZHpR+uqfLDwaG9QqX9UBo9Gs1FvxPDLm1FdZUvlaYnf o13sbYQ2vVism3plG+hdGp3TIBWb1DCx0BTJc97EqlwZfRpCXYTIPYMak2QarRLd6GGl MESmrNLXFDF7D7vDeFVZNiZ+KkC4lnonGaQnqkkfKthslTGfFDynGo14MMY0CdPs7PZm r9r+ghbJQWWSUOMxOomieOgNvAvo8YemQ//mguIUkkShR3c0H7e7sp6cDaB7sMZiPBAi JxXA== X-Gm-Message-State: AOAM533IwIfXq7w2hpUOKQGy52YjNUtDuNfLYP450sQ+CSqx3L//P9PJ gLOmXX+AKHemcRAm7TzDZtUo/lUzSW+oQRzA X-Google-Smtp-Source: ABdhPJx5QOte7oubAtZc+upbcT+hXjaJ5T6U9SNlvEQuFqMIwHG1RuLjRmS7wENiPVnw6zwQaEW1zA== X-Received: by 2002:a17:902:c948:b0:13a:345c:917c with SMTP id i8-20020a170902c94800b0013a345c917cmr13086291pla.61.1631946576957; Fri, 17 Sep 2021 23:29:36 -0700 (PDT) From: Eric Tang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC 09/10] target/riscv: rvb: fixed an issue about clzw instruction Date: Sat, 18 Sep 2021 14:28:15 +0800 Message-Id: <20210918062816.7546-10-tangxingxin1008@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210918062816.7546-1-tangxingxin1008@gmail.com> References: <20210918062816.7546-1-tangxingxin1008@gmail.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=tangxingxin1008@gmail.com; helo=mail-pj1-x102d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, 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-Mailman-Approved-At: Sat, 18 Sep 2021 04:21:08 -0400 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: alistair.francis@wdc.com, bin.meng@windriver.com, palmer@dabbelt.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631953496935100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Eric Tang diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_tr= ans/trans_rvb.c.inc index 39ca5a573f..4523a5cd4c 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -456,7 +456,7 @@ GEN_TRANS_SHADD(3) =20 static void gen_clzw(TCGv ret, TCGv arg1) { - tcg_gen_clzi_tl(ret, ret, 64); + tcg_gen_clzi_tl(ret, arg1, 64); tcg_gen_subi_tl(ret, ret, 32); } =20 @@ -464,6 +464,7 @@ static bool trans_clzw(DisasContext *ctx, arg_clzw *a) { REQUIRE_64BIT(ctx); REQUIRE_EXT(ctx, RVB); + ctx->w =3D true; return gen_unary(ctx, a, EXT_ZERO, gen_clzw); } =20 --=20 2.17.1 From nobody Sat May 4 05:50:22 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163195394796162.9299219280058; Sat, 18 Sep 2021 01:32:27 -0700 (PDT) Received: from localhost ([::1]:57826 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mRVlp-0005TZ-Jl for importer@patchew.org; Sat, 18 Sep 2021 04:32:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49002) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mRTr8-00031R-RE; Sat, 18 Sep 2021 02:29:46 -0400 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]:37590) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mRTr7-0003zq-9J; Sat, 18 Sep 2021 02:29:46 -0400 Received: by mail-pl1-x62c.google.com with SMTP id j14so484474plx.4; Fri, 17 Sep 2021 23:29:44 -0700 (PDT) Received: from eric-OptiPlex-7080.starfivetech.com (ip164.ip-51-195-37.eu. [51.195.37.164]) by smtp.gmail.com with ESMTPSA id f27sm8126432pfq.78.2021.09.17.23.29.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Sep 2021 23:29:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=yJ5Hy1smq6A7DzNmyfSRxxVHKv5+jjXK2R1bnXb9l40=; b=DnNrx8Fz1zwVIbW/40FnXPlvb5ej7fuZyS9Axuexptclb04yCeqBzRP1esN6o0Tr1G vTdqExkYomDZvlXJKru/0luTICQHHhJzeyD+srTNcePDFmw0Ta1dI3ke745VWYf6ZslT 1+Z5RK2YzpRsFwT6peDkCV5+2vZBR2OMbR+5WD1snstKGwT2renqXvW+WeW1u6wJN67x tCmkcjf8GmioktNgY8l/CxGP19vdf/wXqvBlOz5caFaG1yXDmKVEewat3wpItQ5tMVUI u/Y+BkOE4AWk21bKWLooFY2q7gybZ8hiH/bg5W5LkGhq0O1YBq/K7oC28y0Ls5TQrFml Ga7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=yJ5Hy1smq6A7DzNmyfSRxxVHKv5+jjXK2R1bnXb9l40=; b=b4sjJgH/Diq0yWZCQ5V+a7oU8MNmVzry2U6S2wZ5kBFVSbyo8VnaUE56Vw+fbvdqYw sf+jRQUXb5VrFcAft8l6YG+L7VQ3Jg3eNyPHySQ5uFtqUHjo5tjpIC9+eUM5sWEmiX3s FWXX8FQFT6J5w+l90ZDcWGRFvqIGRezfxy1uh+z2cP8b8/5XrUWRfTwaPeIFJQ4xnL9w IPCo4vWcb3uwt3kn3O6pJdQp8C+q/XOzRLikI6ldbfJMS965tnsz7HKfn4NwrWbnQ+nM noOSUgnjwuUzYbWfcuJ732EB/5nLELFf/YJ8KPqy4NuF08hXFmn3s+cq6Bhjzycr1MWe EoPQ== X-Gm-Message-State: AOAM533elmU7/PdE5SINFFTcf4HY/1xcTnYaWcY5I6Qq0N18DDVWzPRR XVYsiF5vx35ZjRGksLWlsu1Z7zjL5ysk8obM X-Google-Smtp-Source: ABdhPJxAMelvYv7Np4lFGFv+Zdaf85K4llIRfSRvBwtB76osvE5fmh8+lTq5VvyR2AKAfcUGuvZiog== X-Received: by 2002:a17:90a:9310:: with SMTP id p16mr25466588pjo.193.1631946583403; Fri, 17 Sep 2021 23:29:43 -0700 (PDT) From: Eric Tang To: qemu-devel@nongnu.org, qemu-riscv@nongnu.org Subject: [RFC 10/10] target/riscv: rvb: add funnel shfit instructions Date: Sat, 18 Sep 2021 14:28:16 +0800 Message-Id: <20210918062816.7546-11-tangxingxin1008@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210918062816.7546-1-tangxingxin1008@gmail.com> References: <20210918062816.7546-1-tangxingxin1008@gmail.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62c; envelope-from=tangxingxin1008@gmail.com; helo=mail-pl1-x62c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, 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-Mailman-Approved-At: Sat, 18 Sep 2021 04:21:17 -0400 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: alistair.francis@wdc.com, bin.meng@windriver.com, palmer@dabbelt.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1631953948242100001 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add funnel shfit instructions except fsri/fsriw for opcode ecoding reason. Signed-off-by: Eric Tang diff --git a/target/riscv/bitmanip_helper.c b/target/riscv/bitmanip_helper.c index e936444c12..08a2fbb376 100644 --- a/target/riscv/bitmanip_helper.c +++ b/target/riscv/bitmanip_helper.c @@ -124,6 +124,43 @@ target_ulong HELPER(clmulr)(target_ulong rs1, target_u= long rs2) return do_clmulr(rs1, rs2, TARGET_LONG_BITS); } =20 +static target_ulong do_fsl(target_ulong rs1, + target_ulong rs2, + target_ulong rs3, + int bits) +{ + int shamt =3D rs2 & ((2 * bits) - 1); + target_ulong a =3D rs1, b =3D rs3; + + if (shamt >=3D bits) { + shamt -=3D bits; + a =3D rs3; + b =3D rs1; + } + + return shamt ? (a << shamt) | (b >> (bits - shamt)) : a; +} + +target_ulong HELPER(fsl)(target_ulong rs1, target_ulong rs2, target_ulong = rs3) +{ + return do_fsl(rs1, rs2, rs3, TARGET_LONG_BITS); +} + +target_ulong HELPER(fsr)(target_ulong rs1, target_ulong rs2, target_ulong = rs3) +{ + return do_fsl(rs1, -rs2, rs3, TARGET_LONG_BITS); +} + +target_ulong HELPER(fslw)(target_ulong rs1, target_ulong rs2, target_ulong= rs3) +{ + return do_fsl(rs1, rs2, rs3, 32); +} + +target_ulong HELPER(fsrw)(target_ulong rs1, target_ulong rs2, target_ulong= rs3) +{ + return do_fsl(rs1, -rs2, rs3, 32); +} + static target_ulong shuffle_stage(target_ulong src, uint64_t maskl, uint64_t maskr, diff --git a/target/riscv/helper.h b/target/riscv/helper.h index 8c8fb71bb4..619f635b6d 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -87,6 +87,10 @@ DEF_HELPER_FLAGS_1(crc32c_d, TCG_CALL_NO_RWG_SE, tl, tl) DEF_HELPER_FLAGS_2(bmatxor, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_2(bmator, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_FLAGS_1(bmatflip, TCG_CALL_NO_RWG_SE, tl, tl) +DEF_HELPER_FLAGS_3(fsl, TCG_CALL_NO_RWG_SE, tl, tl, tl, tl) +DEF_HELPER_FLAGS_3(fsr, TCG_CALL_NO_RWG_SE, tl, tl, tl, tl) +DEF_HELPER_FLAGS_3(fslw, TCG_CALL_NO_RWG_SE, tl, tl, tl, tl) +DEF_HELPER_FLAGS_3(fsrw, TCG_CALL_NO_RWG_SE, tl, tl, tl, tl) =20 /* Special functions */ DEF_HELPER_2(csrr, tl, env, int) diff --git a/target/riscv/insn32.decode b/target/riscv/insn32.decode index 73f956486b..65e574709a 100644 --- a/target/riscv/insn32.decode +++ b/target/riscv/insn32.decode @@ -713,6 +713,8 @@ xperm_h 0010100 .......... 110 ..... 0110011 @r bfp 0100100 .......... 111 ..... 0110011 @r cmix .....11 .......... 001 ..... 0110011 @r4 cmov .....11 .......... 101 ..... 0110011 @r4 +fsl .....10 .......... 001 ..... 0110011 @r4 +fsr .....10 .......... 101 ..... 0110011 @r4 =20 bseti 00101. ........... 001 ..... 0010011 @sh bclri 01001. ........... 001 ..... 0010011 @sh @@ -754,6 +756,8 @@ xperm_w 0010100 .......... 000 ..... 0110011 @r bfpw 0100100 .......... 111 ..... 0111011 @r bmator 0000100 .......... 011 ..... 0110011 @r bmatxor 0100100 .......... 011 ..... 0110011 @r +fslw .....10 .......... 001 ..... 0111011 @r4 +fsrw .....10 .......... 101 ..... 0111011 @r4 =20 bsetiw 0010100 .......... 001 ..... 0011011 @sh5 bclriw 0100100 .......... 001 ..... 0011011 @sh5 diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_tr= ans/trans_rvb.c.inc index 4523a5cd4c..5315baa185 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -428,6 +428,18 @@ static bool trans_cmov(DisasContext *ctx, arg_cmov *a) return gen_quat(ctx, a, EXT_NONE, gen_cmov); } =20 +static bool trans_fsl(DisasContext *ctx, arg_fsl *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_quat(ctx, a, EXT_NONE, gen_helper_fsl); +} + +static bool trans_fsr(DisasContext *ctx, arg_fsr *a) +{ + REQUIRE_EXT(ctx, RVB); + return gen_quat(ctx, a, EXT_NONE, gen_helper_fsr); +} + #define GEN_SHADD(SHAMT) \ static void gen_sh##SHAMT##add(TCGv ret, TCGv arg1, TCGv arg2) \ { \ @@ -827,3 +839,19 @@ static bool trans_bmator(DisasContext *ctx, arg_bmator= *a) REQUIRE_EXT(ctx, RVB); return gen_arith(ctx, a, EXT_NONE, gen_helper_bmator); } + +static bool trans_fslw(DisasContext *ctx, arg_fslw *a) +{ + REQUIRE_64BIT(ctx); + REQUIRE_EXT(ctx, RVB); + ctx->w =3D true; + return gen_quat(ctx, a, EXT_ZERO, gen_helper_fslw); +} + +static bool trans_fsrw(DisasContext *ctx, arg_fsrw *a) +{ + REQUIRE_64BIT(ctx); + REQUIRE_EXT(ctx, RVB); + ctx->w =3D true; + return gen_quat(ctx, a, EXT_ZERO, gen_helper_fsrw); +} --=20 2.17.1