From nobody Tue May 7 22:31:15 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230547; cv=none; d=zohomail.com; s=zohoarc; b=G4qOKSL5MU7imcuAsoCRsCtgF9/rJZ2LUFrJbJTVQpApB2wGGDU8IwSVyd6vwar4ToU91H5M6PfNYfPpWCyqgPFdWEsSVgs2rIhUj1AbhYn8TZVtJ1iMbcj6ljF2X9JmpNJ1N2P5eeiaAipUSXWqL4PWsAY4Lfvz4iCjmXOrG8g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230547; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=MrxcB4KoNu+w11NX5AcvNib0cKW/SO6hoef67m3ZfsQ=; b=BGsU+QzLie/Q6LoB+ahDAuY61HKmGVJ04u8+4ftXxdVPwJ4fJaKALZpJsxVxlc5NzLAOWPzyVv7O3AEYKZOLpTC9UY0RuELjq+s2SctjDMuNkfeK6mc48BEqltu7/u8kdB2P8o/WQs6gGaEe0Gy2nePIlgb4szbXahs7HCxMQaM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230547740797.3347431106142; Thu, 8 Jun 2023 06:22:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWi-0003R9-4u; Thu, 08 Jun 2023 09:18:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D69-0002HP-Kz for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:33 -0400 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D65-0006Sw-E3 for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:33 -0400 Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-4f63006b4e3so590279e87.1 for ; Thu, 08 Jun 2023 03:42:28 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220946; x=1688812946; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MrxcB4KoNu+w11NX5AcvNib0cKW/SO6hoef67m3ZfsQ=; b=RJWlECkv5b2l5cbRXbHxvu7sRuyo9iCik/0+7Ds+VnuzFT4a7DSHW7mwIZkdbgTNMC YC4omyLCOqeLkgjOcU9nklSnBgRgfvXkka1MxIntPHX0xbPjpKJgXfmzqSQBSdIx+Vsp Bxse/2ZVDDVH/yehR2RWS34kMgVFmYl6JPEtVBdFmFj5CWp8LyxWxUP5RzGskbofyFbd F7uaqqvxQQRxcra8b/q+VLXPc1vkqAOifMkeDtLUTtkW2JIY9jnxykRZQSfK9Dl+ZVzJ NnYMBK/9zxdYe4/XPK8LSwWvhO0iWEgf8qyizzLRZ7PuMR/ClHfWug4DDLW7LZXOJiho OGmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220946; x=1688812946; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MrxcB4KoNu+w11NX5AcvNib0cKW/SO6hoef67m3ZfsQ=; b=EkAj/b0ZLCsGmLSHGWeBbjlMZnJNsRjsClvRf55XIqsynuf2uhKevUW+lYfV6gR8Dp 2ADL/G6cwXh/CZTCYdO+RsCA+nFN2hhLcw9yufu8LPhAtnX6A6d19UhbOSSmlmBS0A+6 0eE4rY5Ur54CwkEy2p8D/siFLGW7Gs1f1fHa1kqxz4YytgcDmmeVp1H8wOji8cKYvcrD 7xNb1K5MfezjfCVpbpzxx3q7D1MK/F7kNInXkkmH6at5oCQuzwqN/sCznPmsIJoivYdl u2lLj4hEbH16u9r6isUqHpKx3zSyurDrlyVKDEt6W9G75PPLcWOlacDu1jpweAK5j7XN ODcA== X-Gm-Message-State: AC+VfDx8nrWUY+hYdGjDWu3kaOT4oj6WltSlX2IOqAECj2N1aME3o/Xv pbtl6swCuPemAkD8UVbTNndCrYFFGe0= X-Google-Smtp-Source: ACHHUZ6NV4gGk7H2o6gSnpJew0eIInybJ0aFQNiBaiJ/SNGuG4QgZKXpM9cw9TIPmoA4lXat4oDwmQ== X-Received: by 2002:a19:ee13:0:b0:4f4:cae3:8a2f with SMTP id g19-20020a19ee13000000b004f4cae38a2fmr3400749lfb.16.1686220945714; Thu, 08 Jun 2023 03:42:25 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 01/33] target/mips: Add emulation of MXU instructions for 32-bit load/store Date: Thu, 8 Jun 2023 13:41:50 +0300 Message-Id: <20230608104222.1520143-2-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::12f; envelope-from=lis8215@gmail.com; helo=mail-lf1-x12f.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230550046100003 Add support for emulating: - S32LDDV and S32LDDVR - S32STD and S32STDR - S32STDV and S32STDVR MXU instructions. Add support for emulating MXU instructions with address register post-modify counterparts: - S32LDI and S32LDIR - S32LDIV and S32LDIVR - S32SDI and S32SDIR - S32SDIV and S32SDIVR Refactor support for emulating the S32LDD and S32LDDR instructions. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 302 +++++++++++++++++++++++++++++--- 1 file changed, 279 insertions(+), 23 deletions(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index be038b5f07..f7485a10cc 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -239,11 +239,11 @@ * =E2=94=9C=E2=94=80 001100 =E2=94=80 OPC_MXU_D16MADL * =E2=94=9C=E2=94=80 001101 =E2=94=80 OPC_MXU_S16MAD * =E2=94=9C=E2=94=80 001110 =E2=94=80 OPC_MXU_Q16ADD - * =E2=94=9C=E2=94=80 001111 =E2=94=80 OPC_MXU_D16MACE 23 + * =E2=94=9C=E2=94=80 001111 =E2=94=80 OPC_MXU_D16MACE 20 (13= ..10 don't care) * =E2=94=82 =E2=94=8C=E2=94=80 0 =E2= =94=80 OPC_MXU_S32LDD * =E2=94=9C=E2=94=80 010000 =E2=94=80 OPC_MXU__POOL04 =E2=94=80= =E2=94=B4=E2=94=80 1 =E2=94=80 OPC_MXU_S32LDDR * =E2=94=82 - * =E2=94=82 23 + * =E2=94=82 20 (13..10 don't care) * =E2=94=9C=E2=94=80 010001 =E2=94=80 OPC_MXU__POOL05 =E2=94=80= =E2=94=AC=E2=94=80 0 =E2=94=80 OPC_MXU_S32STD * =E2=94=82 =E2=94=94=E2=94=80 1 =E2= =94=80 OPC_MXU_S32STDR * =E2=94=82 @@ -255,11 +255,11 @@ * =E2=94=9C=E2=94=80 010011 =E2=94=80 OPC_MXU__POOL07 =E2=94=80= =E2=94=AC=E2=94=80 0000 =E2=94=80 OPC_MXU_S32STDV * =E2=94=82 =E2=94=94=E2=94=80 0001 = =E2=94=80 OPC_MXU_S32STDVR * =E2=94=82 - * =E2=94=82 23 + * =E2=94=82 20 (13..10 don't care) * =E2=94=9C=E2=94=80 010100 =E2=94=80 OPC_MXU__POOL08 =E2=94=80= =E2=94=AC=E2=94=80 0 =E2=94=80 OPC_MXU_S32LDI * =E2=94=82 =E2=94=94=E2=94=80 1 =E2= =94=80 OPC_MXU_S32LDIR * =E2=94=82 - * =E2=94=82 23 + * =E2=94=82 20 (13..10 don't care) * =E2=94=9C=E2=94=80 010101 =E2=94=80 OPC_MXU__POOL09 =E2=94=80= =E2=94=AC=E2=94=80 0 =E2=94=80 OPC_MXU_S32SDI * =E2=94=82 =E2=94=94=E2=94=80 1 =E2= =94=80 OPC_MXU_S32SDIR * =E2=94=82 @@ -359,6 +359,13 @@ enum { OPC_MXU_D16MUL =3D 0x08, OPC_MXU_D16MAC =3D 0x0A, OPC_MXU__POOL04 =3D 0x10, + OPC_MXU__POOL05 =3D 0x11, + OPC_MXU__POOL06 =3D 0x12, + OPC_MXU__POOL07 =3D 0x13, + OPC_MXU__POOL08 =3D 0x14, + OPC_MXU__POOL09 =3D 0x15, + OPC_MXU__POOL10 =3D 0x16, + OPC_MXU__POOL11 =3D 0x17, OPC_MXU_S8LDD =3D 0x22, OPC_MXU__POOL16 =3D 0x27, OPC_MXU_S32M2I =3D 0x2E, @@ -380,11 +387,11 @@ enum { }; =20 /* - * MXU pool 04 + * MXU pool 04 05 06 07 08 09 10 11 */ enum { - OPC_MXU_S32LDD =3D 0x00, - OPC_MXU_S32LDDR =3D 0x01, + OPC_MXU_S32LDST =3D 0x00, + OPC_MXU_S32LDSTR =3D 0x01, }; =20 /* @@ -808,35 +815,147 @@ static void gen_mxu_q8mul_q8mulsu(DisasContext *ctx) =20 /* * S32LDD XRa, Rb, S12 - Load a word from memory to XRF - * S32LDDR XRa, Rb, S12 - Load a word from memory to XRF, reversed byte se= q. + * S32LDDR XRa, Rb, S12 - Load a word from memory to XRF + * in reversed byte seq. + * S32LDI XRa, Rb, S12 - Load a word from memory to XRF, + * post modify base address GPR. + * S32LDIR XRa, Rb, S12 - Load a word from memory to XRF, + * post modify base address GPR and load in reversed byte seq. */ -static void gen_mxu_s32ldd_s32lddr(DisasContext *ctx) +static void gen_mxu_s32ldxx(DisasContext *ctx, bool reversed, bool postinc) { TCGv t0, t1; - uint32_t XRa, Rb, s12, sel; + uint32_t XRa, Rb, s12; =20 t0 =3D tcg_temp_new(); t1 =3D tcg_temp_new(); =20 XRa =3D extract32(ctx->opcode, 6, 4); - s12 =3D extract32(ctx->opcode, 10, 10); - sel =3D extract32(ctx->opcode, 20, 1); + s12 =3D sextract32(ctx->opcode, 10, 10); Rb =3D extract32(ctx->opcode, 21, 5); =20 gen_load_gpr(t0, Rb); + tcg_gen_movi_tl(t1, s12 * 4); + tcg_gen_add_tl(t0, t0, t1); =20 - tcg_gen_movi_tl(t1, s12); - tcg_gen_shli_tl(t1, t1, 2); - if (s12 & 0x200) { - tcg_gen_ori_tl(t1, t1, 0xFFFFF000); + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, + (MO_TESL ^ (reversed ? MO_BSWAP : 0)) | + ctx->default_tcg_memop_mask); + gen_store_mxu_gpr(t1, XRa); + + if (postinc) { + gen_store_gpr(t0, Rb); + } +} + +/* + * S32STD XRa, Rb, S12 - Store a word from XRF to memory + * S32STDR XRa, Rb, S12 - Store a word from XRF to memory + * in reversed byte seq. + * S32SDI XRa, Rb, S12 - Store a word from XRF to memory, + * post modify base address GPR. + * S32SDIR XRa, Rb, S12 - Store a word from XRF to memory, + * post modify base address GPR and store in reversed byte seq. + */ +static void gen_mxu_s32stxx(DisasContext *ctx, bool reversed, bool postinc) +{ + TCGv t0, t1; + uint32_t XRa, Rb, s12; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + + XRa =3D extract32(ctx->opcode, 6, 4); + s12 =3D sextract32(ctx->opcode, 10, 10); + Rb =3D extract32(ctx->opcode, 21, 5); + + gen_load_gpr(t0, Rb); + tcg_gen_movi_tl(t1, s12 * 4); + tcg_gen_add_tl(t0, t0, t1); + + gen_load_mxu_gpr(t1, XRa); + tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, + (MO_TESL ^ (reversed ? MO_BSWAP : 0)) | + ctx->default_tcg_memop_mask); + + if (postinc) { + gen_store_gpr(t0, Rb); } - tcg_gen_add_tl(t1, t0, t1); - tcg_gen_qemu_ld_tl(t1, t1, ctx->mem_idx, (MO_TESL ^ (sel * MO_BSWAP)) | - ctx->default_tcg_memop_mask); +} + +/* + * S32LDDV XRa, Rb, Rc, STRD2 - Load a word from memory to XRF + * S32LDDVR XRa, Rb, Rc, STRD2 - Load a word from memory to XRF + * in reversed byte seq. + * S32LDIV XRa, Rb, Rc, STRD2 - Load a word from memory to XRF, + * post modify base address GPR. + * S32LDIVR XRa, Rb, Rc, STRD2 - Load a word from memory to XRF, + * post modify base address GPR and load in reversed byte seq. + */ +static void gen_mxu_s32ldxvx(DisasContext *ctx, bool reversed, + bool postinc, uint32_t strd2) +{ + TCGv t0, t1; + uint32_t XRa, Rb, Rc; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + + XRa =3D extract32(ctx->opcode, 6, 4); + Rc =3D extract32(ctx->opcode, 16, 5); + Rb =3D extract32(ctx->opcode, 21, 5); + + gen_load_gpr(t0, Rb); + gen_load_gpr(t1, Rc); + tcg_gen_shli_tl(t1, t1, strd2); + tcg_gen_add_tl(t0, t0, t1); =20 + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, + (MO_TESL ^ (reversed ? MO_BSWAP : 0)) | + ctx->default_tcg_memop_mask); gen_store_mxu_gpr(t1, XRa); + + if (postinc) { + gen_store_gpr(t0, Rb); + } } =20 +/* + * S32STDV XRa, Rb, Rc, STRD2 - Load a word from memory to XRF + * S32STDVR XRa, Rb, Rc, STRD2 - Load a word from memory to XRF + * in reversed byte seq. + * S32SDIV XRa, Rb, Rc, STRD2 - Load a word from memory to XRF, + * post modify base address GPR. + * S32SDIVR XRa, Rb, Rc, STRD2 - Load a word from memory to XRF, + * post modify base address GPR and store in reversed byte seq. + */ +static void gen_mxu_s32stxvx(DisasContext *ctx, bool reversed, + bool postinc, uint32_t strd2) +{ + TCGv t0, t1; + uint32_t XRa, Rb, Rc; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + + XRa =3D extract32(ctx->opcode, 6, 4); + Rc =3D extract32(ctx->opcode, 16, 5); + Rb =3D extract32(ctx->opcode, 21, 5); + + gen_load_gpr(t0, Rb); + gen_load_gpr(t1, Rc); + tcg_gen_shli_tl(t1, t1, strd2); + tcg_gen_add_tl(t0, t0, t1); + + gen_load_mxu_gpr(t1, XRa); + tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, + (MO_TESL ^ (reversed ? MO_BSWAP : 0)) | + ctx->default_tcg_memop_mask); + + if (postinc) { + gen_store_gpr(t0, Rb); + } +} =20 /* * MXU instruction category: logic @@ -1442,13 +1561,129 @@ static void decode_opc_mxu__pool00(DisasContext *c= tx) =20 static void decode_opc_mxu__pool04(DisasContext *ctx) { - uint32_t opcode =3D extract32(ctx->opcode, 20, 1); + uint32_t reversed =3D extract32(ctx->opcode, 20, 1); + uint32_t opcode =3D extract32(ctx->opcode, 10, 4); =20 + /* Don't care about opcode bits as their meaning is unknown yet */ switch (opcode) { - case OPC_MXU_S32LDD: - case OPC_MXU_S32LDDR: - gen_mxu_s32ldd_s32lddr(ctx); + default: + gen_mxu_s32ldxx(ctx, reversed, false); break; + } +} + +static void decode_opc_mxu__pool05(DisasContext *ctx) +{ + uint32_t reversed =3D extract32(ctx->opcode, 20, 1); + uint32_t opcode =3D extract32(ctx->opcode, 10, 4); + + /* Don't care about opcode bits as their meaning is unknown yet */ + switch (opcode) { + default: + gen_mxu_s32stxx(ctx, reversed, false); + break; + } +} + +static void decode_opc_mxu__pool06(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 10, 4); + uint32_t strd2 =3D extract32(ctx->opcode, 14, 2); + + switch (opcode) { + case OPC_MXU_S32LDST: + case OPC_MXU_S32LDSTR: + if (strd2 <=3D 2) { + gen_mxu_s32ldxvx(ctx, opcode, false, strd2); + break; + } + /* fallthrough */ + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + +static void decode_opc_mxu__pool07(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 10, 4); + uint32_t strd2 =3D extract32(ctx->opcode, 14, 2); + + switch (opcode) { + case OPC_MXU_S32LDST: + case OPC_MXU_S32LDSTR: + if (strd2 <=3D 2) { + gen_mxu_s32stxvx(ctx, opcode, false, strd2); + break; + } + /* fallthrough */ + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + +static void decode_opc_mxu__pool08(DisasContext *ctx) +{ + uint32_t reversed =3D extract32(ctx->opcode, 20, 1); + uint32_t opcode =3D extract32(ctx->opcode, 10, 4); + + /* Don't care about opcode bits as their meaning is unknown yet */ + switch (opcode) { + default: + gen_mxu_s32ldxx(ctx, reversed, true); + break; + } +} + +static void decode_opc_mxu__pool09(DisasContext *ctx) +{ + uint32_t reversed =3D extract32(ctx->opcode, 20, 1); + uint32_t opcode =3D extract32(ctx->opcode, 10, 4); + + /* Don't care about opcode bits as their meaning is unknown yet */ + switch (opcode) { + default: + gen_mxu_s32stxx(ctx, reversed, true); + break; + } +} + +static void decode_opc_mxu__pool10(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 10, 4); + uint32_t strd2 =3D extract32(ctx->opcode, 14, 2); + + switch (opcode) { + case OPC_MXU_S32LDST: + case OPC_MXU_S32LDSTR: + if (strd2 <=3D 2) { + gen_mxu_s32ldxvx(ctx, opcode, true, strd2); + break; + } + /* fallthrough */ + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + +static void decode_opc_mxu__pool11(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 10, 4); + uint32_t strd2 =3D extract32(ctx->opcode, 14, 2); + + switch (opcode) { + case OPC_MXU_S32LDST: + case OPC_MXU_S32LDSTR: + if (strd2 <=3D 2) { + gen_mxu_s32stxvx(ctx, opcode, true, strd2); + break; + } + /* fallthrough */ default: MIPS_INVAL("decode_opc_mxu"); gen_reserved_instruction(ctx); @@ -1534,6 +1769,27 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU__POOL04: decode_opc_mxu__pool04(ctx); break; + case OPC_MXU__POOL05: + decode_opc_mxu__pool05(ctx); + break; + case OPC_MXU__POOL06: + decode_opc_mxu__pool06(ctx); + break; + case OPC_MXU__POOL07: + decode_opc_mxu__pool07(ctx); + break; + case OPC_MXU__POOL08: + decode_opc_mxu__pool08(ctx); + break; + case OPC_MXU__POOL09: + decode_opc_mxu__pool09(ctx); + break; + case OPC_MXU__POOL10: + decode_opc_mxu__pool10(ctx); + break; + case OPC_MXU__POOL11: + decode_opc_mxu__pool11(ctx); + break; case OPC_MXU_S8LDD: gen_mxu_s8ldd(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:15 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230427; cv=none; d=zohomail.com; s=zohoarc; b=GHSP0C7/xyyRU8Y9b8jkkJguGkgK4W4X/aNZ+tTAmiZIDcY0KOGFQKB8se+lE22b/g5r56G7g21bgdSdKZ8lVKS4ptieq/5E0/wXy2x0HXMtDZxXvQ9u4L5eHDbaMcyvX12mesvdQe3LTAE1Kcn5Vjad5LsDgZFHOuPfPNKgPSs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230427; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=8VYSwYNBoGdVkr6LwKT2BwpwsiRD5YPfDCGwo+rcgl4=; b=Yy00FH+z4d4DS5bRnxDq9v7rpspJsWNdaIhHGuKNjmMOR99e/mN78WrhWgcF6WmMqY1jXy6FbbVH6my6SgakCt2Z5vEkun9y484PYPtXK9ALi0dyYunwH6uVqFx2n4Bg4Vg6TrpSACaR8TFtN3s8f1cTV/u0N4/u6zEB6jEL8q4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230427931242.61035163559393; Thu, 8 Jun 2023 06:20:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWu-0003gR-3w; Thu, 08 Jun 2023 09:18:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D67-0002H6-MI for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:31 -0400 Received: from mail-lf1-x136.google.com ([2a00:1450:4864:20::136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D65-0006T0-7K for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:31 -0400 Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-4f642a24555so558524e87.3 for ; Thu, 08 Jun 2023 03:42:28 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220947; x=1688812947; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8VYSwYNBoGdVkr6LwKT2BwpwsiRD5YPfDCGwo+rcgl4=; b=KpDu6h+RjA5nQNJGG0hndawR10gfBa58ppdg0OgTKRGE4LvRL0ja1NxMpkiW9BwvEB zivpbxIp8DJu5RaxUrTq//pSIdpvj/cyrv8ZEJBInLEoeTzO6ypk2AP0JXNlCWs+d3Hv awcVj3T4VXn9EGSg7JOD4Q0fTPqe/Fy28NlPA8YFqZPtKBJIDinreC4TatMvsjIrSB2l Z6G6U4CWMPl923lPO57u8QsaIIv7HZwZSPkjPWpgbWX44xzVBnozd2kw9+2seiTSIcj3 Qkf2GOMQpamEW7NmnjoYptA+1zF/tJPcRNSLamKTOuYrFHXccIwNiyp1bSVzXNNkTWuf gcEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220947; x=1688812947; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8VYSwYNBoGdVkr6LwKT2BwpwsiRD5YPfDCGwo+rcgl4=; b=fT6wx2suCAANGYfxDuDbxFm7NgMPFqAkDTaeVKBLB4egqMM/KdkH16GcOFBgwqrYNQ CA+MgYGA3SdpqOJnA02wKk/WZb+6uJL1HgAzjNMkCAg0N/hN+gZkIdVUVQmxYTyz7cMk L242WqHvPYCxy+tuVG6FG63l0nX+xvrRKUd6QwinFtnRnUtfzg9RTuzXKKIsd+ETuuDD y6Y3xdiMiT6Huez/xvxetuIe9wEEQ5PVs0J0H4VQWTrUwbY5JmjA2017xmEpUTIEWOi7 TJiukdL4vux27PGHxSiyK3Yrb9oGd9I2b1CAVCJ6p6oegEHuoIyV3dKiXbsFchWzjnPl /gLA== X-Gm-Message-State: AC+VfDy4e1SuQdMovQtz1sa50gqzva8Lxujbt0ufhT1beBannJKd0iEJ 9dM0aiYsZQ2s1/GjAur+BkkAZL8d8+s= X-Google-Smtp-Source: ACHHUZ4PZV5cjdHXJv5MLVCRP4DB1R7KTqC1IdcZHLZSjwALHH+3GTMZo59SxQvVtSC0DWjFMWuIfQ== X-Received: by 2002:ac2:4474:0:b0:4e0:a426:6ddc with SMTP id y20-20020ac24474000000b004e0a4266ddcmr2769583lfl.0.1686220946755; Thu, 08 Jun 2023 03:42:26 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 02/33] Add support of two XBurst CPUs Date: Thu, 8 Jun 2023 13:41:51 +0300 Message-Id: <20230608104222.1520143-3-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::136; envelope-from=lis8215@gmail.com; helo=mail-lf1-x136.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230429975100003 Content-Type: text/plain; charset="utf-8" XBurstR1 - is the MIPS32R1 CPU which aims to cover all Ingenic SoCs older than JZ4770 and some newer. XBurstR2 - is the MIPS32R2 CPU which aims to cover all Ingenic SoCs starting from to JZ4770. Signed-off-by: Siarhei Volkau --- target/mips/cpu-defs.c.inc | 46 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/target/mips/cpu-defs.c.inc b/target/mips/cpu-defs.c.inc index d45f245a67..b67ccf171d 100644 --- a/target/mips/cpu-defs.c.inc +++ b/target/mips/cpu-defs.c.inc @@ -117,6 +117,26 @@ const mips_def_t mips_defs[] =3D .insn_flags =3D CPU_MIPS32R1, .mmu_type =3D MMU_TYPE_R4000, }, + { + .name =3D "XBurstR1", + .CP0_PRid =3D 0x1ed0024f, + .CP0_Config0 =3D MIPS_CONFIG0 | (MMU_TYPE_R4000 << CP0C0_MT), + .CP0_Config1 =3D MIPS_CONFIG1 | (15 << CP0C1_MMU) | + (0 << CP0C1_IS) | (3 << CP0C1_IL) | (1 << CP0C1_IA)= | + (0 << CP0C1_DS) | (3 << CP0C1_DL) | (1 << CP0C1_DA)= | + (0 << CP0C1_CA), + .CP0_Config2 =3D MIPS_CONFIG2, + .CP0_Config3 =3D MIPS_CONFIG3, + .CP0_LLAddr_rw_bitmask =3D 0, + .CP0_LLAddr_shift =3D 4, + .SYNCI_Step =3D 32, + .CCRes =3D 2, + .CP0_Status_rw_bitmask =3D 0x1278FF17, + .SEGBITS =3D 32, + .PABITS =3D 32, + .insn_flags =3D CPU_MIPS32R1 | ASE_MXU, + .mmu_type =3D MMU_TYPE_R4000, + }, { .name =3D "4KEmR1", .CP0_PRid =3D 0x00018500, @@ -323,6 +343,32 @@ const mips_def_t mips_defs[] =3D .insn_flags =3D CPU_MIPS32R2 | ASE_MIPS16 | ASE_DSP | ASE_DSP_R2, .mmu_type =3D MMU_TYPE_R4000, }, + { + .name =3D "XBurstR2", + .CP0_PRid =3D 0x2ed1024f, + .CP0_Config0 =3D MIPS_CONFIG0 | (0x1 << CP0C0_AR) | + (MMU_TYPE_R4000 << CP0C0_MT), + .CP0_Config1 =3D MIPS_CONFIG1 | (1 << CP0C1_FP) | (15 << CP0C1_MMU= ) | + (0 << CP0C1_IS) | (3 << CP0C1_IL) | (1 << CP0C1_IA)= | + (0 << CP0C1_DS) | (3 << CP0C1_DL) | (1 << CP0C1_DA)= | + (1 << CP0C1_CA), + .CP0_Config2 =3D MIPS_CONFIG2, + .CP0_Config3 =3D MIPS_CONFIG3 | (1 << CP0C3_DSP2P) | (1 << CP0C3_D= SPP) | + (1 << CP0C3_VInt), + .CP0_LLAddr_rw_bitmask =3D 0, + .CP0_LLAddr_shift =3D 4, + .SYNCI_Step =3D 32, + .CCRes =3D 2, + .CP0_Status_rw_bitmask =3D 0x3778FF1F, + .CP1_fcr0 =3D (1 << FCR0_F64) | (1 << FCR0_L) | (1 << FCR0_W) | + (1 << FCR0_D) | (1 << FCR0_S) | (0x93 << FCR0_PRID), + .CP1_fcr31 =3D 0, + .CP1_fcr31_rw_bitmask =3D 0xFF83FFFF, + .SEGBITS =3D 32, + .PABITS =3D 32, + .insn_flags =3D CPU_MIPS32R2 | ASE_MXU, + .mmu_type =3D MMU_TYPE_R4000, + }, { .name =3D "M14K", .CP0_PRid =3D 0x00019b00, --=20 2.40.0 From nobody Tue May 7 22:31:15 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230318; cv=none; d=zohomail.com; s=zohoarc; b=BLEvvgmOgDv/M6R65GSvovJojlif/A8jG+8fUMZO+QcSKaixuUekN4qqNqkYWR92koIqFWbjqEx+Q1YPGuIc82Qss77TTsx7My/CoAIfuPFyZk+MyBon8cEGw4q11K9zoIBMRyp64Zugox3iZye8xunc9e2Z7uX6lX4foZ43G3k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230318; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=8suom5c4Zq4IF9eAO/a9IEhcFRdmjk/0kY8XvnG0/LY=; b=KozpH8cu6SZw+yA9z/ENspOZmva0IpXn0lk5U/cBxUR7SmfwYnLe7PwAz+u4CkV1rtFmhg6qU2Puk66Y1w4LqN/4dutZZH6bOL/lsWvj6E6HsZL86HsuL7rgHPrac9KMdN7dCgsZyPxydkIgxe3xLwR5kpw+lfXT9ESmelxrjUo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230318811337.2089247969186; Thu, 8 Jun 2023 06:18:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWU-0003MX-Mr; Thu, 08 Jun 2023 09:17:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D68-0002HF-AX for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:32 -0400 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D65-0006T8-MN for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:32 -0400 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-4f4b384c09fso550675e87.3 for ; Thu, 08 Jun 2023 03:42:29 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220948; x=1688812948; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8suom5c4Zq4IF9eAO/a9IEhcFRdmjk/0kY8XvnG0/LY=; b=kVpQ1LHFCdWohz4c7M836qBkX11sW4ym72CNENgc86kBWNMpMjfnDt1eGFsimFxO7l RPEsrHgFNh/k32c4Ma6WYB4ioO02yyd5TaWMheCuRtIAiXFGLftKndmTs/cdHuY7dUY4 J39Prk5GaAFoU5EJv4Hl0IdC0UyCpiTiqgYleD2/9R/Y5KXKRaELJHWN8sSRXxEr4Y0R lSp738D1M17zoT0lNOrg98/brtSrNuAatF3HfNjqu7D4Jw/Mfwisiex8ZnRROunAAXnR 2Y/uqFaqO8IVr9Xpp/yCMQBfmjYXuJpSQgOEbjA52QKrhQalz0OsoDzWwZG1RsuoYXEW QVZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220948; x=1688812948; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8suom5c4Zq4IF9eAO/a9IEhcFRdmjk/0kY8XvnG0/LY=; b=B9TXD/MPNyrSW+qTXE3qWvkeEUw6aGLDHna1dqrrmdjWVz4YGBwtivJJMo0SmXYLmV +Jv1BWpUEpLBWohWJrZagBPtyXzo28GFdpaAO713KqFIarrXSCOXK2wglJORIJLHSKvk JQfY70UgA6gEc7VUnuNiThk+Nb3njteHJ3UwgKVvtbBg6GdEy8NEx7RJmeEaBF8GrwJf e8Enb8+clMcLvfSf8V6X5/zKLW4fbexd1YpIdm8gMmUrROhOH1ZWA0cSVLZeLSsKisGT hZxgUEETXz+EePwsI/6PtrbExCAgazEl52VXxcfB2LZoZiDan2YFv3FKht17/gWKZD+X h/PA== X-Gm-Message-State: AC+VfDz9vdmBm4gPCtYmNGAT+txai2FeMR/bt9hX2pZO0i+L/Z49z8wB ZeRhzrdReDN3p/b3VZT2tHSk1/HDV6U= X-Google-Smtp-Source: ACHHUZ54fejStoKInzLzngAFgxURq5CrhB/tASbsUznujnd1DjicJpEJfy4Aho2HfzvF1g0OF/6+uw== X-Received: by 2002:ac2:5581:0:b0:4f6:2a63:d3fc with SMTP id v1-20020ac25581000000b004f62a63d3fcmr3036342lfg.32.1686220947811; Thu, 08 Jun 2023 03:42:27 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 03/33] target/mips: Add emulation of LXW LXB LXH LXBU LXHU instructions Date: Thu, 8 Jun 2023 13:41:52 +0300 Message-Id: <20230608104222.1520143-4-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::12e; envelope-from=lis8215@gmail.com; helo=mail-lf1-x12e.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230320527100001 These instructions used to load from memory to GPR via indexed address divided by base and index parts in GPR registers. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 83 ++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index f7485a10cc..423c248d5a 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -306,7 +306,7 @@ * =E2=94=82 =E2=94=9C=E2=94=80 110 = =E2=94=80 OPC_MXU_S32OR * =E2=94=82 =E2=94=94=E2=94=80 111 = =E2=94=80 OPC_MXU_S32XOR * =E2=94=82 - * =E2=94=82 7..5 + * =E2=94=82 8..6 * =E2=94=9C=E2=94=80 101000 =E2=94=80 OPC_MXU__POOL17 =E2=94=80= =E2=94=AC=E2=94=80 000 =E2=94=80 OPC_MXU_LXB * =E2=94=82 =E2=94=9C=E2=94=80 001 = =E2=94=80 OPC_MXU_LXH * =E2=94=9C=E2=94=80 101001 =E2=94=80 =E2=94=9C= =E2=94=80 011 =E2=94=80 OPC_MXU_LXW @@ -368,6 +368,7 @@ enum { OPC_MXU__POOL11 =3D 0x17, OPC_MXU_S8LDD =3D 0x22, OPC_MXU__POOL16 =3D 0x27, + OPC_MXU__POOL17 =3D 0x28, OPC_MXU_S32M2I =3D 0x2E, OPC_MXU_S32I2M =3D 0x2F, OPC_MXU__POOL19 =3D 0x38, @@ -405,6 +406,17 @@ enum { OPC_MXU_S32XOR =3D 0x07, }; =20 +/* + * MXU pool 17 + */ +enum { + OPC_MXU_LXB =3D 0x00, + OPC_MXU_LXH =3D 0x01, + OPC_MXU_LXW =3D 0x03, + OPC_MXU_LXBU =3D 0x04, + OPC_MXU_LXHU =3D 0x05, +}; + /* * MXU pool 19 */ @@ -920,6 +932,38 @@ static void gen_mxu_s32ldxvx(DisasContext *ctx, bool r= eversed, } } =20 +/* + * LXW Ra, Rb, Rc, STRD2 - Load a word from memory to GPR + * LXB Ra, Rb, Rc, STRD2 - Load a byte from memory to GPR, + * sign extending to GPR size. + * LXH Ra, Rb, Rc, STRD2 - Load a byte from memory to GPR, + * sign extending to GPR size. + * LXBU Ra, Rb, Rc, STRD2 - Load a halfword from memory to GPR, + * zero extending to GPR size. + * LXHU Ra, Rb, Rc, STRD2 - Load a halfword from memory to GPR, + * zero extending to GPR size. + */ +static void gen_mxu_lxx(DisasContext *ctx, uint32_t strd2, MemOp mop) +{ + TCGv t0, t1; + uint32_t Ra, Rb, Rc; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + + Ra =3D extract32(ctx->opcode, 11, 5); + Rc =3D extract32(ctx->opcode, 16, 5); + Rb =3D extract32(ctx->opcode, 21, 5); + + gen_load_gpr(t0, Rb); + gen_load_gpr(t1, Rc); + tcg_gen_shli_tl(t1, t1, strd2); + tcg_gen_add_tl(t0, t0, t1); + + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, mop | ctx->default_tcg_memop_= mask); + gen_store_gpr(t1, Ra); +} + /* * S32STDV XRa, Rb, Rc, STRD2 - Load a word from memory to XRF * S32STDVR XRa, Rb, Rc, STRD2 - Load a word from memory to XRF @@ -1718,6 +1762,40 @@ static void decode_opc_mxu__pool16(DisasContext *ctx) } } =20 +static void decode_opc_mxu__pool17(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 6, 3); + uint32_t strd2 =3D extract32(ctx->opcode, 9, 2); + + if (strd2 > 2) { + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + return; + } + + switch (opcode) { + case OPC_MXU_LXW: + gen_mxu_lxx(ctx, strd2, MO_TE | MO_UL); + break; + case OPC_MXU_LXB: + gen_mxu_lxx(ctx, strd2, MO_TE | MO_SB); + break; + case OPC_MXU_LXH: + gen_mxu_lxx(ctx, strd2, MO_TE | MO_SW); + break; + case OPC_MXU_LXBU: + gen_mxu_lxx(ctx, strd2, MO_TE | MO_UB); + break; + case OPC_MXU_LXHU: + gen_mxu_lxx(ctx, strd2, MO_TE | MO_UW); + break; + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + static void decode_opc_mxu__pool19(DisasContext *ctx) { uint32_t opcode =3D extract32(ctx->opcode, 22, 2); @@ -1796,6 +1874,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU__POOL16: decode_opc_mxu__pool16(ctx); break; + case OPC_MXU__POOL17: + decode_opc_mxu__pool17(ctx); + break; case OPC_MXU__POOL19: decode_opc_mxu__pool19(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:15 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230386; cv=none; d=zohomail.com; s=zohoarc; b=e2Zr75k6rRMl8buwU1YOn4VIiPWBbIORse5QtVym70fomIY+C149v/xgHjt6lYyxwBGXY6bZugd8gvsi8oKs2wPQanH9frZgIdgjQrlSWQyPxDjLg7pOy+dRoebsxD5wW/NjqeAr5EJJTTIuTGTXzf8pko+60/ygqWDK5ZtAxb0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230386; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=+NHecAKie8Z+nQqF0HDXGBYLIWhD3Kd9qkCVUXQCCus=; b=QQ8Z+zGkJhPJvDsoD809kdf3BXyGqwyr8UWceHaWky2MT4GPzZwtVP4QzZVdoM1iWwDP+vuGhdvbRcqq6Br9ixgSAXBucsdOZe1u2pJ0xpjmc8mER1FkxnXuTFdAHc9xP27EoPbn49hOCGt6ADRtdIUtLNT+Jx2Xzt4foztMYS0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 168623038613368.88835845868846; Thu, 8 Jun 2023 06:19:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWu-0003h2-Rn; Thu, 08 Jun 2023 09:18:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D69-0002HW-S9 for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:33 -0400 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D66-0006TK-Uz for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:33 -0400 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-4f642a24568so564597e87.2 for ; Thu, 08 Jun 2023 03:42:30 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220949; x=1688812949; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+NHecAKie8Z+nQqF0HDXGBYLIWhD3Kd9qkCVUXQCCus=; b=V+P3EwMbMQLkU+UcnNfCot9Xle1vXF3y1aCO6KZOfBAydl15ZkTt0broxuVnzF0GJp OBGs6WTglBtmBieIrPJnFwuatVaCLrmZFk44bzKTh3D0C/my+13Pc7x6Oi751AIey9Co CnUIiZ0mkB8IH71P29idMy7HF9X7zaHSaMjJjGyCefQg+2R2a5whtnRHUyBhNAt6WPr8 9XW1SyUSdinNQ0GConlMpetajLDQ5lgWTL5RBtZRhdnImDwHMjcqHxV/REfnVJedGl5T VhanVAzjAhUd0Ypt6txdPrifjBMcgiLfBF2F8/YPTW3wIu9LnZiwmir1v4xlBOSRwgah jz2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220949; x=1688812949; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+NHecAKie8Z+nQqF0HDXGBYLIWhD3Kd9qkCVUXQCCus=; b=EUrf7BI+M72VUBODEjsshe5FqJ7rC4f7jugZBobdDrwuX4Gd+fjbfiWO1t10rkpy0F LINj+lfMxcfiirfXZN1Lh5VVrKWDbZdCseoz5k4O2YwnE9MwRHNvSFN7WBMpXbwoGsGs rdx2UZTQ/SswnCn1eqtLgjvtpq4j4RX7HOqrGzhIXFblHQV7YdM7p8wfqadBREUZxw0G a2umYscp73ngq71QuEcNjAIgatLQLAy2ARFuj8eHL7eIUV0k9Qjoi55Ca18RPcTVk9DV o7Y+fvEduSMJxJo3ZN0GhRIfNY+y/xcKVgYsxHGbbCKArXXcuuOkobnm23EFXe08k5e5 wB3Q== X-Gm-Message-State: AC+VfDxCUbOdK3mUtb7s8N774bckPFH3rdUd2siDe47Ns76c2icGGvoE oVA6MTYXwdQCvvbzj/gSoFVpl19gR94= X-Google-Smtp-Source: ACHHUZ5V25IKWfpLWCqwbtw0Ugowi9C5vfeo7BSSqZ1YAar5QLEja15A2wcxLlVlH+lwioDTzUn39g== X-Received: by 2002:ac2:43ab:0:b0:4f3:792c:289d with SMTP id t11-20020ac243ab000000b004f3792c289dmr2872273lfl.20.1686220948909; Thu, 08 Jun 2023 03:42:28 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 04/33] target/mips: Add emulation of S32MADD/MADDU/MSUB/MSUBU instructions Date: Thu, 8 Jun 2023 13:41:53 +0300 Message-Id: <20230608104222.1520143-5-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::133; envelope-from=lis8215@gmail.com; helo=mail-lf1-x133.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230386893100002 Content-Type: text/plain; charset="utf-8" These instructions used to multiply 2x32-bit GPR sources & accumulate result into 64-bit pair of XRF registers. These instructions stain HI/LO registers with the final result. Their opcode is close to the MIPS32R1 MADD[U]/MSUB[U], so it have to call decode_opc_special2_legacy when failing to find MXU opcode. Moreover, it solves issue with reinventing MUL and malfunction MULU/CLZ/CLO instructions. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 105 +++++++++++++++++++++++++++++++- target/mips/tcg/translate.c | 7 +-- 2 files changed, 105 insertions(+), 7 deletions(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 423c248d5a..f2c932eeb7 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -355,7 +355,11 @@ */ =20 enum { + OPC_MXU_S32MADD =3D 0x00, + OPC_MXU_S32MADDU =3D 0x01, OPC_MXU__POOL00 =3D 0x03, + OPC_MXU_S32MSUB =3D 0x04, + OPC_MXU_S32MSUBU =3D 0x05, OPC_MXU_D16MUL =3D 0x08, OPC_MXU_D16MAC =3D 0x0A, OPC_MXU__POOL04 =3D 0x10, @@ -1573,6 +1577,70 @@ static void gen_mxu_S32ALNI(DisasContext *ctx) } } =20 +/* + * S32MADD XRa, XRd, rb, rc + * 32 to 64 bit signed multiply with subsequent add + * result stored in {XRa, XRd} pair, stain HI/LO. + * S32MADDU XRa, XRd, rb, rc + * 32 to 64 bit unsigned multiply with subsequent add + * result stored in {XRa, XRd} pair, stain HI/LO. + * S32MSUB XRa, XRd, rb, rc + * 32 to 64 bit signed multiply with subsequent subtract + * result stored in {XRa, XRd} pair, stain HI/LO. + * S32MSUBU XRa, XRd, rb, rc + * 32 to 64 bit unsigned multiply with subsequent subtract + * result stored in {XRa, XRd} pair, stain HI/LO. + */ +static void gen_mxu_s32madd_sub(DisasContext *ctx, bool sub, bool uns) +{ + uint32_t XRa, XRd, Rb, Rc; + + XRa =3D extract32(ctx->opcode, 6, 4); + XRd =3D extract32(ctx->opcode, 10, 4); + Rb =3D extract32(ctx->opcode, 16, 5); + Rc =3D extract32(ctx->opcode, 21, 5); + + if (unlikely(Rb =3D=3D 0 || Rc =3D=3D 0)) { + /* do nothing because x + 0 * y =3D> x */ + } else if (unlikely(XRa =3D=3D 0 && XRd =3D=3D 0)) { + /* do nothing because result just dropped */ + } else { + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv_i64 t2 =3D tcg_temp_new_i64(); + TCGv_i64 t3 =3D tcg_temp_new_i64(); + + gen_load_gpr(t0, Rb); + gen_load_gpr(t1, Rc); + + if (uns) { + tcg_gen_extu_tl_i64(t2, t0); + tcg_gen_extu_tl_i64(t3, t1); + } else { + tcg_gen_ext_tl_i64(t2, t0); + tcg_gen_ext_tl_i64(t3, t1); + } + tcg_gen_mul_i64(t2, t2, t3); + + gen_load_mxu_gpr(t0, XRa); + gen_load_mxu_gpr(t1, XRd); + + tcg_gen_concat_tl_i64(t3, t1, t0); + if (sub) { + tcg_gen_sub_i64(t3, t3, t2); + } else { + tcg_gen_add_i64(t3, t3, t2); + } + gen_move_low32(t1, t3); + gen_move_high32(t0, t3); + + tcg_gen_mov_tl(cpu_HI[0], t0); + tcg_gen_mov_tl(cpu_LO[0], t1); + + gen_store_mxu_gpr(t1, XRd); + gen_store_mxu_gpr(t0, XRa); + } +} =20 /* * Decoding engine for MXU @@ -1603,6 +1671,35 @@ static void decode_opc_mxu__pool00(DisasContext *ctx) } } =20 +static bool decode_opc_mxu_s32madd_sub(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 0, 6); + uint32_t pad =3D extract32(ctx->opcode, 14, 2); + + if (pad !=3D 2) { + /* MIPS32R1 MADD/MADDU/MSUB/MSUBU are on pad =3D=3D 0 */ + return false; + } + + switch (opcode) { + case OPC_MXU_S32MADD: + gen_mxu_s32madd_sub(ctx, false, false); + break; + case OPC_MXU_S32MADDU: + gen_mxu_s32madd_sub(ctx, false, true); + break; + case OPC_MXU_S32MSUB: + gen_mxu_s32madd_sub(ctx, true, false); + break; + case OPC_MXU_S32MSUBU: + gen_mxu_s32madd_sub(ctx, true, true); + break; + default: + return false; + } + return true; +} + static void decode_opc_mxu__pool04(DisasContext *ctx) { uint32_t reversed =3D extract32(ctx->opcode, 20, 1); @@ -1835,6 +1932,11 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) tcg_gen_brcondi_tl(TCG_COND_NE, t_mxu_cr, MXU_CR_MXU_EN, l_exit); =20 switch (opcode) { + case OPC_MXU_S32MADD: + case OPC_MXU_S32MADDU: + case OPC_MXU_S32MSUB: + case OPC_MXU_S32MSUBU: + return decode_opc_mxu_s32madd_sub(ctx); case OPC_MXU__POOL00: decode_opc_mxu__pool00(ctx); break; @@ -1881,8 +1983,7 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) decode_opc_mxu__pool19(ctx); break; default: - MIPS_INVAL("decode_opc_mxu"); - gen_reserved_instruction(ctx); + return false; } =20 gen_set_label(l_exit); diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c index a6ca2e5a3b..27cc8e57af 100644 --- a/target/mips/tcg/translate.c +++ b/target/mips/tcg/translate.c @@ -14653,12 +14653,9 @@ static bool decode_opc_legacy(CPUMIPSState *env, D= isasContext *ctx) } #endif if (TARGET_LONG_BITS =3D=3D 32 && (ctx->insn_flags & ASE_MXU)) { - if (MASK_SPECIAL2(ctx->opcode) =3D=3D OPC_MUL) { - gen_arith(ctx, OPC_MUL, rd, rs, rt); - } else { - decode_ase_mxu(ctx, ctx->opcode); + if (decode_ase_mxu(ctx, ctx->opcode)) { + break; } - break; } decode_opc_special2_legacy(env, ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:15 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230564; cv=none; d=zohomail.com; s=zohoarc; b=T6AQx3wUltr+9sSIEUPDW8Utqppv7UNgdh5YnZHpbaX25+CIr+PDy+9/SA1eflHxZExlg5VNDCXWZUdmdrnMzXeEtKNWMDa23+jHupp77CoYcKmaZ3KoOmbbwTCxF/D0RnTtsl3yaeqBAo0rpyxvR0WRo2Rcpo14xo57cRqCoQk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230564; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=3egzxiJur2rN7/YWluxmXadVms9Pe9FdKBoP90GdKDY=; b=loxZ3iYmbM4qH0ijEImBDiOoh6e/ERhBJWgoCAe6GxFPUWZVd+aWkfsDFMGSYhF1LTZaSa52Jcbwq56HjVDha4rpPjJYAMa/U/MWIpI2HqYyuBSaEb2wyhdHGU0A0/Nb3H7DA0NqfskBwQMzDr/9534zF+hTNI5ak5U4o0ZUux4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230564448589.7108129615247; Thu, 8 Jun 2023 06:22:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWr-0003ad-Oi; Thu, 08 Jun 2023 09:18:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6A-0002Hf-Mr for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:34 -0400 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D69-0006Tc-1C for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:34 -0400 Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-4f4b384c09fso550720e87.3 for ; Thu, 08 Jun 2023 03:42:31 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220950; x=1688812950; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3egzxiJur2rN7/YWluxmXadVms9Pe9FdKBoP90GdKDY=; b=QzPdMh9mxw6jvcN0hYu85VVJat2IDS72c/0FLuSTJM3XPziKB33DWQj3PPImVfFHWE OUR96bhrsmzoy1PQEXEYJrlVmLUN5bcpVwzsmgjRpNHtYsb/QGp/VEUfHY766K9MiDzS IsPIxx9TXIJJwtPcDNIP4Kswon+llwA62h0sZGff2X7tHfvpgpGtetGWJSpzSNOmFUaJ I3R28bWrCxdJlEB7oJRqhrEVBC0kJkhTeaQ6UTde5dTot56gEr9lmDQ1hUdo0EcZ5VdR tzY/Cin7q2w78sn0Npya4mLyErI3azmpN1VdUGaAYITr4UrsOqhiL9BuBg0+cxYQKrd1 2DFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220950; x=1688812950; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3egzxiJur2rN7/YWluxmXadVms9Pe9FdKBoP90GdKDY=; b=Qp5mApPCBbHDuaIld+owLV34MdVeRFIYIYUeEzFg3TQCpjwNpdANuTtV3Y3EQKBtg0 j8dM2FIJpYMRTWOaskXCy857kWROYDqH1be6ADnX4gwUB6CiA+xk850GMP4JSnRW5BVf I7x7/Fx7nqZp+R/CQDXuHwjyjuW6nMiZGYFrxEVz6nCodOUXTLjj1qiQjP2F3f4/6jR3 lMwlam73C5N3w48g4e9C7CRmoJWnfEYn+U4U6qdC0uWRtEqUW8yBTikusjPQ13M6kl5X sEq1vGDZ/NrU/Q6I9dF5o5h96f7bKAoKqST64sJvILrQE93tUr5c9ehMVq79GkVznsiX 9aKg== X-Gm-Message-State: AC+VfDwodsgD4xCZiZeqo487bsUTCEbbVNo536P1ttZwkpB7T97tYwY7 zs4GO+Vb+c6RBWl8WWbU3eTWcSMHbg0= X-Google-Smtp-Source: ACHHUZ7ZHOJjlLPrZ25zWm87d+q2Z0jvxCeDduwHnF9UZbXzqB9d4VGkX7raBcEZfTqK3FIB/NF55w== X-Received: by 2002:a2e:b004:0:b0:2af:8635:96a1 with SMTP id y4-20020a2eb004000000b002af863596a1mr3070872ljk.33.1686220950033; Thu, 08 Jun 2023 03:42:30 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 05/33] target/mips: Add emulation of Q8SLT Q8SLTU instructions Date: Thu, 8 Jun 2023 13:41:54 +0300 Message-Id: <20230608104222.1520143-6-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::12f; envelope-from=lis8215@gmail.com; helo=mail-lf1-x12f.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230565926100017 Content-Type: text/plain; charset="utf-8" These instructions are used to set bits depending on comparison result in each byte respectively. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 65 +++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index f2c932eeb7..b7bdc07dd7 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -389,6 +389,8 @@ enum { OPC_MXU_D16MIN =3D 0x03, OPC_MXU_Q8MAX =3D 0x04, OPC_MXU_Q8MIN =3D 0x05, + OPC_MXU_Q8SLT =3D 0x06, + OPC_MXU_Q8SLTU =3D 0x07, }; =20 /* @@ -1399,6 +1401,63 @@ static void gen_mxu_Q8MAX_Q8MIN(DisasContext *ctx) } } =20 +/* + * Q8SLT + * Update XRa with the signed "set less than" comparison of XRb and XRc + * on per-byte basis. + * a.k.a. XRa[0..3] =3D XRb[0..3] < XRc[0..3] ? 1 : 0; + * + * Q8SLTU + * Update XRa with the unsigned "set less than" comparison of XRb and X= Rc + * on per-byte basis. + * a.k.a. XRa[0..3] =3D XRb[0..3] < XRc[0..3] ? 1 : 0; + */ +static void gen_mxu_q8slt(DisasContext *ctx, bool sltu) +{ + uint32_t pad, XRc, XRb, XRa; + + pad =3D extract32(ctx->opcode, 21, 5); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely(pad !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else if (unlikely((XRb =3D=3D 0) && (XRc =3D=3D 0))) { + /* both operands zero registers -> just set destination to zero */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else if (unlikely(XRb =3D=3D XRc)) { + /* both operands same registers -> just set destination to zero */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else { + /* the most general case */ + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv t4 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t3, XRb); + gen_load_mxu_gpr(t4, XRc); + tcg_gen_movi_tl(t2, 0); + + for (int i =3D 0; i < 4; i++) { + if (sltu) { + tcg_gen_extract_tl(t0, t3, 8 * i, 8); + tcg_gen_extract_tl(t1, t4, 8 * i, 8); + } else { + tcg_gen_sextract_tl(t0, t3, 8 * i, 8); + tcg_gen_sextract_tl(t1, t4, 8 * i, 8); + } + tcg_gen_setcond_tl(TCG_COND_LT, t0, t0, t1); + tcg_gen_deposit_tl(t2, t2, t0, 8 * i, 8); + } + gen_store_mxu_gpr(t2, XRa); + } +} + =20 /* * MXU instruction category: align @@ -1664,6 +1723,12 @@ static void decode_opc_mxu__pool00(DisasContext *ctx) case OPC_MXU_Q8MIN: gen_mxu_Q8MAX_Q8MIN(ctx); break; + case OPC_MXU_Q8SLT: + gen_mxu_q8slt(ctx, false); + break; + case OPC_MXU_Q8SLTU: + gen_mxu_q8slt(ctx, true); + break; default: MIPS_INVAL("decode_opc_mxu"); gen_reserved_instruction(ctx); --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230320; cv=none; d=zohomail.com; s=zohoarc; b=nEUVo5Xb0wbIkdzZqyGLs2+5jKSOXZ3FAwOa8Z57Yc1L5+OAvMvlM9LTtHguIe+LobBSc5cFcQxZoEC1BnMT5jyq99VOex0SdDV2v/uLyzMywpTRF4JhWvpzWHUZpVxcHdU7bgebN7GhthEmn4GrBoZWlDeJq4y/8zBYCoTzQts= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230320; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=T9QhP8VU7XovoHStl7HCwRvoadeJ/T5l3srW6hsNs04=; b=WsnVp2m6j5vnxCwdriyu2LLUgIpN79bJAubO5Z/dvG0TusYWpVvWkAjdvL94mvd1+hDYRY5kOqywA7XU2c2JVTf35SMzi4ckwpJ0X20cMU+JDZbUp9+0OYs6W5yRsGFwT7zpgUgI2W+WWTQ0QEXLyRPjPSqmgtP+UL0RQLevkEw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230320392480.9859869028354; Thu, 8 Jun 2023 06:18:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWb-0003NY-2L; Thu, 08 Jun 2023 09:18:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6B-0002Hq-Lx for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:35 -0400 Received: from mail-lj1-x234.google.com ([2a00:1450:4864:20::234]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D69-0006Ts-VA for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:35 -0400 Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-2b1ba018d94so4020111fa.0 for ; Thu, 08 Jun 2023 03:42:33 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220951; x=1688812951; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=T9QhP8VU7XovoHStl7HCwRvoadeJ/T5l3srW6hsNs04=; b=EGnc8lk9liEcvpgNrghicpMBWVl84qPpoqQSmNfJgyCzf32TT/TQ1VwYo3YvT4j8EB +ZYYW/sDTzVLZNVFw+r1oNha+Z+fI/2oBXHfmEXqdzXn3rURh/h+fc9JnQi2obmymzQm YFyUao2nCS+JUEu8lsa4XTGmXP6hRpPZpWclB9BAwNQP5gRhCxm/FJC9W7RRRZQucKa8 NCUwlgP+PygCbLumSEMOKx2L0XtIEC5Xd6BynjutZJextWoOfO5pQwSc1ilGcs6aWbXs FhW5TcugQUfczAC8vMsKYEFAGZnAhokF5qbFKqqvs5iZCvtuejX+ZJP6qU/FdPlBu2Fr bC2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220951; x=1688812951; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=T9QhP8VU7XovoHStl7HCwRvoadeJ/T5l3srW6hsNs04=; b=F7uzYpXcI+hsc5zonVATlrkI5xA0gPmxkfvjjCf9/R2mPtnK8KlewlejUQJf00q+rz DNhfeq0zcjOHGyIFgaLLgJBTO95C9PJCR0lcrozy50QyplyrjtjtEasPh08z4E4Qkel9 D+nCxYd/NZyjAPfaixZQBi/ozmOcpZYPe+AevXItU7msdduSoqzqkY0A8zv/VKWnvVrA mHNW5SVltLZ7pWwmo11xuNK4opCZ0p77NVbmLEAeCiZB4/9IlIEY5zXJsZOO4To6bLVY GOgvPHaquPLvw+kvvwJzdvZGp6tuwzJGc1QwudhgXxhpYxMbdGB1mAsVVR8lX/2l9QIA H4IA== X-Gm-Message-State: AC+VfDzHwmB1dVqfT6UVOR+Vy9a4tIJLbRgkCrHaud0SvRrh4ddBNZcL M5CaFnR9yTIxeB0uunTYtuyTUu8NC1U= X-Google-Smtp-Source: ACHHUZ6iK2kwSfbfIVcRy5g3legX8DqLlC1NTOlWa0A7hRI9Zs4Heq4gnwZqJrubUxj1ayfKQWeAAg== X-Received: by 2002:a2e:7c01:0:b0:2b1:c5c5:192c with SMTP id x1-20020a2e7c01000000b002b1c5c5192cmr3142801ljc.44.1686220951021; Thu, 08 Jun 2023 03:42:31 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 06/33] target/mips: fix MXU D16MAX D16MIN Q8MAX Q8MIN instructions Date: Thu, 8 Jun 2023 13:41:55 +0300 Message-Id: <20230608104222.1520143-7-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::234; envelope-from=lis8215@gmail.com; helo=mail-lj1-x234.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230321046100005 Content-Type: text/plain; charset="utf-8" These instructions were designed that they overwrite source register during partial storing of result. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index b7bdc07dd7..984d826c36 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -1243,13 +1243,14 @@ static void gen_mxu_D16MAX_D16MIN(DisasContext *ctx) /* ...and do half-word-wise max/min with one operand 0 */ TCGv_i32 t0 =3D tcg_temp_new(); TCGv_i32 t1 =3D tcg_constant_i32(0); + TCGv_i32 t2 =3D tcg_temp_new(); =20 /* the left half-word first */ tcg_gen_andi_i32(t0, mxu_gpr[XRx - 1], 0xFFFF0000); if (opc =3D=3D OPC_MXU_D16MAX) { - tcg_gen_smax_i32(mxu_gpr[XRa - 1], t0, t1); + tcg_gen_smax_i32(t2, t0, t1); } else { - tcg_gen_smin_i32(mxu_gpr[XRa - 1], t0, t1); + tcg_gen_smin_i32(t2, t0, t1); } =20 /* the right half-word */ @@ -1265,7 +1266,7 @@ static void gen_mxu_D16MAX_D16MIN(DisasContext *ctx) /* return resulting half-words to its original position */ tcg_gen_shri_i32(t0, t0, 16); /* finally update the destination */ - tcg_gen_or_i32(mxu_gpr[XRa - 1], mxu_gpr[XRa - 1], t0); + tcg_gen_or_i32(mxu_gpr[XRa - 1], t2, t0); } else if (unlikely(XRb =3D=3D XRc)) { /* both operands same -> just set destination to one of them */ tcg_gen_mov_i32(mxu_gpr[XRa - 1], mxu_gpr[XRb - 1]); @@ -1273,14 +1274,15 @@ static void gen_mxu_D16MAX_D16MIN(DisasContext *ctx) /* the most general case */ TCGv_i32 t0 =3D tcg_temp_new(); TCGv_i32 t1 =3D tcg_temp_new(); + TCGv_i32 t2 =3D tcg_temp_new(); =20 /* the left half-word first */ tcg_gen_andi_i32(t0, mxu_gpr[XRb - 1], 0xFFFF0000); tcg_gen_andi_i32(t1, mxu_gpr[XRc - 1], 0xFFFF0000); if (opc =3D=3D OPC_MXU_D16MAX) { - tcg_gen_smax_i32(mxu_gpr[XRa - 1], t0, t1); + tcg_gen_smax_i32(t2, t0, t1); } else { - tcg_gen_smin_i32(mxu_gpr[XRa - 1], t0, t1); + tcg_gen_smin_i32(t2, t0, t1); } =20 /* the right half-word */ @@ -1298,7 +1300,7 @@ static void gen_mxu_D16MAX_D16MIN(DisasContext *ctx) /* return resulting half-words to its original position */ tcg_gen_shri_i32(t0, t0, 16); /* finally update the destination */ - tcg_gen_or_i32(mxu_gpr[XRa - 1], mxu_gpr[XRa - 1], t0); + tcg_gen_or_i32(mxu_gpr[XRa - 1], t2, t0); } } =20 @@ -1334,14 +1336,15 @@ static void gen_mxu_Q8MAX_Q8MIN(DisasContext *ctx) /* ...and do byte-wise max/min with one operand 0 */ TCGv_i32 t0 =3D tcg_temp_new(); TCGv_i32 t1 =3D tcg_constant_i32(0); + TCGv_i32 t2 =3D tcg_temp_new(); int32_t i; =20 /* the leftmost byte (byte 3) first */ tcg_gen_andi_i32(t0, mxu_gpr[XRx - 1], 0xFF000000); if (opc =3D=3D OPC_MXU_Q8MAX) { - tcg_gen_smax_i32(mxu_gpr[XRa - 1], t0, t1); + tcg_gen_smax_i32(t2, t0, t1); } else { - tcg_gen_smin_i32(mxu_gpr[XRa - 1], t0, t1); + tcg_gen_smin_i32(t2, t0, t1); } =20 /* bytes 2, 1, 0 */ @@ -1359,8 +1362,9 @@ static void gen_mxu_Q8MAX_Q8MIN(DisasContext *ctx) /* return resulting byte to its original position */ tcg_gen_shri_i32(t0, t0, 8 * (3 - i)); /* finally update the destination */ - tcg_gen_or_i32(mxu_gpr[XRa - 1], mxu_gpr[XRa - 1], t0); + tcg_gen_or_i32(t2, t2, t0); } + gen_store_mxu_gpr(t2, XRa); } else if (unlikely(XRb =3D=3D XRc)) { /* both operands same -> just set destination to one of them */ tcg_gen_mov_i32(mxu_gpr[XRa - 1], mxu_gpr[XRb - 1]); @@ -1368,15 +1372,16 @@ static void gen_mxu_Q8MAX_Q8MIN(DisasContext *ctx) /* the most general case */ TCGv_i32 t0 =3D tcg_temp_new(); TCGv_i32 t1 =3D tcg_temp_new(); + TCGv_i32 t2 =3D tcg_temp_new(); int32_t i; =20 /* the leftmost bytes (bytes 3) first */ tcg_gen_andi_i32(t0, mxu_gpr[XRb - 1], 0xFF000000); tcg_gen_andi_i32(t1, mxu_gpr[XRc - 1], 0xFF000000); if (opc =3D=3D OPC_MXU_Q8MAX) { - tcg_gen_smax_i32(mxu_gpr[XRa - 1], t0, t1); + tcg_gen_smax_i32(t2, t0, t1); } else { - tcg_gen_smin_i32(mxu_gpr[XRa - 1], t0, t1); + tcg_gen_smin_i32(t2, t0, t1); } =20 /* bytes 2, 1, 0 */ @@ -1396,8 +1401,9 @@ static void gen_mxu_Q8MAX_Q8MIN(DisasContext *ctx) /* return resulting byte to its original position */ tcg_gen_shri_i32(t0, t0, 8 * (3 - i)); /* finally update the destination */ - tcg_gen_or_i32(mxu_gpr[XRa - 1], mxu_gpr[XRa - 1], t0); + tcg_gen_or_i32(t2, t2, t0); } + gen_store_mxu_gpr(t2, XRa); } } =20 --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230373; cv=none; d=zohomail.com; s=zohoarc; b=G6NJvUjf1OVn4JOXfgSlVj03iUL3yIR+2JfIA7pddo1bMhNlwcXCcMV/L69HtKw6pc43aeLALmOffivAIJQMi5c00iirnCa5Ej+Di49wDILhonaX4s3QWgRMkIhbOY7oLBVav4ev2tiRvnST/pdKUqvN2CyKPLDlsXhggeSQQa4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230373; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=RoEURqNrSSd7deSyDoOGA4qzBi0iTzo/9sSniYj02l4=; b=EFdhclkVzE0DuMdfTv/kRTh73vJDMhSXkrXDV4A1l/CsRh40jOngjSCg5f0xl9Ufhwd4Weo5lno/Wnv+03t58RQEVJHR9s8lMdu0dfGDJHwzY6blEdHfkwPgTWbtFXqBr6lFAhO/QGdbHdTVIHOsVEK4j42QuJoaNatBpjxioQY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230373982678.8987908795935; Thu, 8 Jun 2023 06:19:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWX-0003Ml-Os; Thu, 08 Jun 2023 09:17:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6C-0002Hy-2u for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:36 -0400 Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6A-0006U4-3c for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:35 -0400 Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-4f505aace48so591904e87.0 for ; Thu, 08 Jun 2023 03:42:33 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220952; x=1688812952; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RoEURqNrSSd7deSyDoOGA4qzBi0iTzo/9sSniYj02l4=; b=sipVItxLIxGUeaJLMCWpD7cWTL5dO0QZw//Xg6G60bySnERBSVmuCJMT5erxCj/xsJ TT8V52lz9oI7fSxN6N/4SL+dISIhD8GZfjDa0Ub7LicaF73aW8VeDCf8t436Hqh0/MrC kHYHDoY5EwjU3lluvkjcP85l6L47VDpkbVFvTkRlX00jHuxroAWpVsujCs0eeCTWbhW8 n8W3lPiQA0QLpkAxWhPtWHbqAKXqGH3IqRcMM9zw2yYObFwo/jNDQclgTnH9sjpEeEHO MNsDpYlJH/04MMz/wohX7wiKxVDAj7diCpBDm+2sv0oD31kujphCm25qqlCY5iv9jMoq BaVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220952; x=1688812952; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RoEURqNrSSd7deSyDoOGA4qzBi0iTzo/9sSniYj02l4=; b=E9++HjkWcXW/R8h/WMEkLouBluhpL2GBmgDT6THLft1/rqmLzoGDEItZSv3o1P+qdZ RH72uN0tckO2CZPHVWi6wWinldMX393aaEYtOv1OO4C2BTED2xM/X7wpz06HGrX0AXs8 FiMDPSDY3y8s/5M3T+gG5MuhB036UY5pY1wEJJFoVw37BXzyfFBiugPZ1hVXdVC84NkN ZChWyJvSyOuNp77ABL6f/8oBTFFByYUebeI9VQIFeLh5pqK1g7P8LY5otGZ3kUwmDw5f ykIrIO2xy5wUdtiub367tNtmCSCO3SEwB6Z4MPb26wMI/Goohi7u50XnWPf9uUHIuUSh xbVg== X-Gm-Message-State: AC+VfDzAgI4tR0Alp5wvvT3m91NYpm7oOaeblONp9J87Y0Q+KpRxSHx6 tIdT8zCJCogxI7fRUhvQ4Lbv9lHpPvQ= X-Google-Smtp-Source: ACHHUZ7m5llcrRrCmbGyCb4yTce2s8RHO3ervFMnoztA2Lh+RImx6sshx2KFTFZl3vhHaWuN2Qg2Hw== X-Received: by 2002:a2e:7813:0:b0:2b1:c0d3:72cb with SMTP id t19-20020a2e7813000000b002b1c0d372cbmr3326465ljc.23.1686220952247; Thu, 08 Jun 2023 03:42:32 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 07/33] target/mips: Add emulation of MXU S32SLT D16SLT D16AVG[R] Q8AVG[R] insns Date: Thu, 8 Jun 2023 13:41:56 +0300 Message-Id: <20230608104222.1520143-8-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::130; envelope-from=lis8215@gmail.com; helo=mail-lf1-x130.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230374903100003 Content-Type: text/plain; charset="utf-8" These instructions are part of pool1, see the grand tree above in the file. Q8ADD is part of pool1 too but belong to another category of instructions, thus will be made in later patches. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 244 +++++++++++++++++++++++++++++++- 1 file changed, 243 insertions(+), 1 deletion(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 984d826c36..2c1d7f139e 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -360,6 +360,7 @@ enum { OPC_MXU__POOL00 =3D 0x03, OPC_MXU_S32MSUB =3D 0x04, OPC_MXU_S32MSUBU =3D 0x05, + OPC_MXU__POOL01 =3D 0x06, OPC_MXU_D16MUL =3D 0x08, OPC_MXU_D16MAC =3D 0x0A, OPC_MXU__POOL04 =3D 0x10, @@ -393,6 +394,18 @@ enum { OPC_MXU_Q8SLTU =3D 0x07, }; =20 +/* + * MXU pool 01 + */ +enum { + OPC_MXU_S32SLT =3D 0x00, + OPC_MXU_D16SLT =3D 0x01, + OPC_MXU_D16AVG =3D 0x02, + OPC_MXU_D16AVGR =3D 0x03, + OPC_MXU_Q8AVG =3D 0x04, + OPC_MXU_Q8AVGR =3D 0x05, +}; + /* * MXU pool 04 05 06 07 08 09 10 11 */ @@ -1154,11 +1167,15 @@ static void gen_mxu_S32XOR(DisasContext *ctx) =20 =20 /* - * MXU instruction category max/min + * MXU instruction category max/min/avg * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * S32MAX D16MAX Q8MAX * S32MIN D16MIN Q8MIN + * S32SLT D16SLT Q8SLT + * Q8SLTU + * D16AVG Q8AVG + * D16AVGR Q8AVGR */ =20 /* @@ -1464,6 +1481,199 @@ static void gen_mxu_q8slt(DisasContext *ctx, bool s= ltu) } } =20 +/* + * S32SLT + * Update XRa with the signed "set less than" comparison of XRb and XRc. + * a.k.a. XRa =3D XRb < XRc ? 1 : 0; + */ +static void gen_mxu_S32SLT(DisasContext *ctx) +{ + uint32_t pad, XRc, XRb, XRa; + + pad =3D extract32(ctx->opcode, 21, 5); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely(pad !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else if (unlikely((XRb =3D=3D 0) && (XRc =3D=3D 0))) { + /* both operands zero registers -> just set destination to zero */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else if (unlikely(XRb =3D=3D XRc)) { + /* both operands same registers -> just set destination to zero */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else { + /* the most general case */ + tcg_gen_setcond_tl(TCG_COND_LT, mxu_gpr[XRa - 1], + mxu_gpr[XRb - 1], mxu_gpr[XRc - 1]); + } +} + +/* + * D16SLT + * Update XRa with the signed "set less than" comparison of XRb and XRc + * on per-word basis. + * a.k.a. XRa[0..1] =3D XRb[0..1] < XRc[0..1] ? 1 : 0; + */ +static void gen_mxu_D16SLT(DisasContext *ctx) +{ + uint32_t pad, XRc, XRb, XRa; + + pad =3D extract32(ctx->opcode, 21, 5); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely(pad !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else if (unlikely((XRb =3D=3D 0) && (XRc =3D=3D 0))) { + /* both operands zero registers -> just set destination to zero */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else if (unlikely(XRb =3D=3D XRc)) { + /* both operands same registers -> just set destination to zero */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else { + /* the most general case */ + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv t4 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t3, XRb); + gen_load_mxu_gpr(t4, XRc); + tcg_gen_sextract_tl(t0, t3, 16, 16); + tcg_gen_sextract_tl(t1, t4, 16, 16); + tcg_gen_setcond_tl(TCG_COND_LT, t0, t0, t1); + tcg_gen_shli_tl(t2, t0, 16); + tcg_gen_sextract_tl(t0, t3, 0, 16); + tcg_gen_sextract_tl(t1, t4, 0, 16); + tcg_gen_setcond_tl(TCG_COND_LT, t0, t0, t1); + tcg_gen_or_tl(mxu_gpr[XRa - 1], t2, t0); + } +} + +/* + * D16AVG + * Update XRa with the signed average of XRb and XRc + * on per-word basis, rounding down. + * a.k.a. XRa[0..1] =3D (XRb[0..1] + XRc[0..1]) >> 1; + * + * D16AVGR + * Update XRa with the signed average of XRb and XRc + * on per-word basis, math rounding 4/5. + * a.k.a. XRa[0..1] =3D (XRb[0..1] + XRc[0..1] + 1) >> 1; + */ +static void gen_mxu_d16avg(DisasContext *ctx, bool round45) +{ + uint32_t pad, XRc, XRb, XRa; + + pad =3D extract32(ctx->opcode, 21, 5); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely(pad !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else if (unlikely((XRb =3D=3D 0) && (XRc =3D=3D 0))) { + /* both operands zero registers -> just set destination to zero */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else if (unlikely(XRb =3D=3D XRc)) { + /* both operands same registers -> just set destination to same */ + tcg_gen_mov_tl(mxu_gpr[XRa - 1], mxu_gpr[XRb - 1]); + } else { + /* the most general case */ + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv t4 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t3, XRb); + gen_load_mxu_gpr(t4, XRc); + tcg_gen_sextract_tl(t0, t3, 16, 16); + tcg_gen_sextract_tl(t1, t4, 16, 16); + tcg_gen_add_tl(t0, t0, t1); + if (round45) { + tcg_gen_addi_tl(t0, t0, 1); + } + tcg_gen_shli_tl(t2, t0, 15); + tcg_gen_andi_tl(t2, t2, 0xffff0000); + tcg_gen_sextract_tl(t0, t3, 0, 16); + tcg_gen_sextract_tl(t1, t4, 0, 16); + tcg_gen_add_tl(t0, t0, t1); + if (round45) { + tcg_gen_addi_tl(t0, t0, 1); + } + tcg_gen_shri_tl(t0, t0, 1); + tcg_gen_deposit_tl(t2, t2, t0, 0, 16); + gen_store_mxu_gpr(t2, XRa); + } +} + +/* + * Q8AVG + * Update XRa with the signed average of XRb and XRc + * on per-byte basis, rounding down. + * a.k.a. XRa[0..3] =3D (XRb[0..3] + XRc[0..3]) >> 1; + * + * Q8AVGR + * Update XRa with the signed average of XRb and XRc + * on per-word basis, math rounding 4/5. + * a.k.a. XRa[0..3] =3D (XRb[0..3] + XRc[0..3] + 1) >> 1; + */ +static void gen_mxu_q8avg(DisasContext *ctx, bool round45) +{ + uint32_t pad, XRc, XRb, XRa; + + pad =3D extract32(ctx->opcode, 21, 5); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely(pad !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else if (unlikely((XRb =3D=3D 0) && (XRc =3D=3D 0))) { + /* both operands zero registers -> just set destination to zero */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else if (unlikely(XRb =3D=3D XRc)) { + /* both operands same registers -> just set destination to same */ + tcg_gen_mov_tl(mxu_gpr[XRa - 1], mxu_gpr[XRb - 1]); + } else { + /* the most general case */ + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv t4 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t3, XRb); + gen_load_mxu_gpr(t4, XRc); + tcg_gen_movi_tl(t2, 0); + + for (int i =3D 0; i < 4; i++) { + tcg_gen_extract_tl(t0, t3, 8 * i, 8); + tcg_gen_extract_tl(t1, t4, 8 * i, 8); + tcg_gen_add_tl(t0, t0, t1); + if (round45) { + tcg_gen_addi_tl(t0, t0, 1); + } + tcg_gen_shri_tl(t0, t0, 1); + tcg_gen_deposit_tl(t2, t2, t0, 8 * i, 8); + } + gen_store_mxu_gpr(t2, XRa); + } +} + =20 /* * MXU instruction category: align @@ -1771,6 +1981,35 @@ static bool decode_opc_mxu_s32madd_sub(DisasContext = *ctx) return true; } =20 +static void decode_opc_mxu__pool01(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 18, 3); + + switch (opcode) { + case OPC_MXU_S32SLT: + gen_mxu_S32SLT(ctx); + break; + case OPC_MXU_D16SLT: + gen_mxu_D16SLT(ctx); + break; + case OPC_MXU_D16AVG: + gen_mxu_d16avg(ctx, false); + break; + case OPC_MXU_D16AVGR: + gen_mxu_d16avg(ctx, true); + break; + case OPC_MXU_Q8AVG: + gen_mxu_q8avg(ctx, false); + break; + case OPC_MXU_Q8AVGR: + gen_mxu_q8avg(ctx, true); + break; + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} static void decode_opc_mxu__pool04(DisasContext *ctx) { uint32_t reversed =3D extract32(ctx->opcode, 20, 1); @@ -2017,6 +2256,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_D16MAC: gen_mxu_d16mac(ctx); break; + case OPC_MXU__POOL01: + decode_opc_mxu__pool01(ctx); + break; case OPC_MXU__POOL04: decode_opc_mxu__pool04(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230580; cv=none; d=zohomail.com; s=zohoarc; b=XULtBUkx646Zr9E3VfX+eNCOfoADI6leAFz24KporHTCo5jnifBfUHz8aI4WB2E+8p/iAP6mnX+x0M5gotDOlS0kKppdgxDE+k/BuLJ23tvSrJK88evH6MHWDhM9y0go+uFkC8FcwhjRQ3wtoxhPR8M927X6AK3nw4+VaxPLVck= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230580; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lylHHh7C6wzcTOs6sJVxLs/h1D3pxOjTHqnreM1ZEnY=; b=WnF4Xssx+VKm3EiBKGck6qCM7lulHAlZS6Odz/bdk9zrA+S7/AnDyfPzCygfi1qav+kbuSq/TsHYbcKI6GJSJIWGjOGcGKEZTyj/UT2N9i0bEwcsaxGUgDZKSuz+4fT2njEvqTH3Ulu/cqmkqXtuf+vbcmKYj9UMRN3ZUCVJuqc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230580454749.8901680491832; Thu, 8 Jun 2023 06:23:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWV-0003MZ-52; Thu, 08 Jun 2023 09:17:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6C-0002IW-W4 for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:37 -0400 Received: from mail-lj1-x232.google.com ([2a00:1450:4864:20::232]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6B-0006UR-BE for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:36 -0400 Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-2b1bf74e080so6079221fa.1 for ; Thu, 08 Jun 2023 03:42:34 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220953; x=1688812953; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lylHHh7C6wzcTOs6sJVxLs/h1D3pxOjTHqnreM1ZEnY=; b=EdrF5il8FkIWLUju1vAJLI0go3onXdHTJGE6Ub7zpztf6wbw5Tl+VzPCxmFh4euOJ/ Vb/NboWVbyO/eC8a2M7cybwgFRxQGIqojvAhKuaa0y8p7mO+iHvM+SKJXjsMFovhGdTe 2ourry4BY3r0BC9wqp0jPf/uG/uEhy2hhzGVVk/3PYkqoCoHy20F6wBsJRooBdGqdwU3 1MwrOu0kjElwORSWDDy2k8NTb8uFx/aetm16KsferrHTexFx0J30NHFnud/1XqgSCJVb 2IvKQ3qkvcexDzBtLzfS6CoRcjY/DybwNbh5dO2Eu41C0+LH35avcHEnQRZMKx18C9B2 ALSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220953; x=1688812953; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lylHHh7C6wzcTOs6sJVxLs/h1D3pxOjTHqnreM1ZEnY=; b=Dc9sDHgguUbIwie8LAoR1uVA9QmJilz4y6ySemS1jdftYqkHSyxithYyP22eZjnrBu nBkMaWRQVlSx6RSR86+ublDjSdFK5lpYYnYyZU7HC7hf3WM3U9aF7PLdaENHkLqa2X3D 4hfbjMpGTIuSe7EwKIhtE6EMEJTpwyLK1Eld8ewvpxCmeBgkxtPCBiyP+W7Vcyqr3Zlp 1B+MhLL5JU3+3/IvrrCtVPBhtmSWCHaLxqjH4PsmUez5QCNdjCKwrdblGSqEIzPDi/dA Vdep9hMkm/XrXiC8y0T0lXbzN0zvX2IJYW+dMfjBkhhXudW/pVyHo/4/5wfpydwaBXHv 8jtw== X-Gm-Message-State: AC+VfDzrnk0UdLzK/Y2F0RJfmXOFzbE+v8u4xUGlJgDoyfJM8MzP4x2W sbcSBnbXhE9xX33v4gftR01j7JrUhkA= X-Google-Smtp-Source: ACHHUZ5oAbHxP5JeHZ80ZUE0QJ1KTNHJ+sAYOTbZGMCStB4vOLTaD4a/qGJonNU/16LcAQe+pGwF2w== X-Received: by 2002:a2e:b113:0:b0:2b2:621:2e60 with SMTP id p19-20020a2eb113000000b002b206212e60mr670041ljl.3.1686220953267; Thu, 08 Jun 2023 03:42:33 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 08/33] target/mips: Add emulation of Q8ADD instruction Date: Thu, 8 Jun 2023 13:41:57 +0300 Message-Id: <20230608104222.1520143-9-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::232; envelope-from=lis8215@gmail.com; helo=mail-lj1-x232.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230581974100003 Content-Type: text/plain; charset="utf-8" This instruction is used to add/subtract quadruple 8-bit values to another quadruple in parallel. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 77 +++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 2c1d7f139e..2eebdfe8ca 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -404,6 +404,7 @@ enum { OPC_MXU_D16AVGR =3D 0x03, OPC_MXU_Q8AVG =3D 0x04, OPC_MXU_Q8AVGR =3D 0x05, + OPC_MXU_Q8ADD =3D 0x07, }; =20 /* @@ -1675,6 +1676,79 @@ static void gen_mxu_q8avg(DisasContext *ctx, bool ro= und45) } =20 =20 +/* + * MXU instruction category: Arithmetic + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * Q8ADD + */ + +/* + * Q8ADD XRa, XRb, XRc, ptn2 + * Add/subtract quadruple of 8-bit packed in XRb + * to another one in XRc, put the result in XRa. + */ +static void gen_mxu_Q8ADD(DisasContext *ctx) +{ + uint32_t aptn2, pad, XRc, XRb, XRa; + + aptn2 =3D extract32(ctx->opcode, 24, 2); + pad =3D extract32(ctx->opcode, 21, 3); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely(pad !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else if (unlikely((XRb =3D=3D 0) && (XRc =3D=3D 0))) { + /* both operands zero registers -> just set destination to zero */ + tcg_gen_movi_i32(mxu_gpr[XRa - 1], 0); + } else { + /* the most general case */ + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv t4 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t3, XRb); + gen_load_mxu_gpr(t4, XRc); + + for (int i =3D 0; i < 4; i++) { + tcg_gen_andi_tl(t0, t3, 0xff); + tcg_gen_andi_tl(t1, t4, 0xff); + + if (i < 2) { + if (aptn2 & 0x01) { + tcg_gen_sub_tl(t0, t0, t1); + } else { + tcg_gen_add_tl(t0, t0, t1); + } + } else { + if (aptn2 & 0x02) { + tcg_gen_sub_tl(t0, t0, t1); + } else { + tcg_gen_add_tl(t0, t0, t1); + } + } + if (i < 3) { + tcg_gen_shri_tl(t3, t3, 8); + tcg_gen_shri_tl(t4, t4, 8); + } + if (i > 0) { + tcg_gen_deposit_tl(t2, t2, t0, 8 * i, 8); + } else { + tcg_gen_andi_tl(t0, t0, 0xff); + tcg_gen_mov_tl(t2, t0); + } + } + gen_store_mxu_gpr(t2, XRa); + } +} + + /* * MXU instruction category: align * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2004,6 +2078,9 @@ static void decode_opc_mxu__pool01(DisasContext *ctx) case OPC_MXU_Q8AVGR: gen_mxu_q8avg(ctx, true); break; + case OPC_MXU_Q8ADD: + gen_mxu_Q8ADD(ctx); + break; default: MIPS_INVAL("decode_opc_mxu"); gen_reserved_instruction(ctx); --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230340; cv=none; d=zohomail.com; s=zohoarc; b=OTK4QXjQZi4Vg38lXK383w8YOgNYwwpfZu9pNUbryyfExMgXy4gNEcgS8HMMX3vu3qXgwFdNQAoT6iABWBehaZvhBKkzQhwFyAWX1vI2yxX38fjz2DLavtalhcfVyIOWTw9aYTN3cDxdweVZpejzsA8Zd48y+bchCIqpL5CESNo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230340; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=AI+7AqSnoQezfqx21rFzO/758w7Rg9rRRO4yk1jYXRY=; b=YZD5teogHE3ji3PccVjYtJu3uhoe/Rhy45+tAaVGGYjAmm+OLiyvG5m6Xli6Q7EWF0U9VEo11UYmHDLQTZvIGuBKJhKr4Bh67wJOJEPTwjXKx92C9oRTKmtjaTw1W4hOu99z/y8LoA1f9m9Ssg1r0lSjhn7Coo35bR7zw6ZclxM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230340117139.27887570509495; Thu, 8 Jun 2023 06:19:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWb-0003Nb-2E; Thu, 08 Jun 2023 09:18:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6F-0002Is-Kg for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:39 -0400 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6C-0006Ur-Gk for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:38 -0400 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-4f61735676fso559177e87.2 for ; Thu, 08 Jun 2023 03:42:36 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220954; x=1688812954; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AI+7AqSnoQezfqx21rFzO/758w7Rg9rRRO4yk1jYXRY=; b=MgVXJDM+UNjtgU3KR2ydqu0X/J5fK9s6FK90Cu7W7jV6gy3yDRmFODRGM4UVE0ezk8 CNPDsK31y+1okYNp3hYHXA22sH1omlqixpJbUP3gcoGQrfTMhNcO7v3aqqnz1eg0e5e/ EdIhFdv6aisIAT1QA9IClgXlIqI359Yq25KDCkNlfnx/fBD0YYa69GYSHOcF0qVO0zdC jq59NTruP9S4Chwd/MEq9I4tCSvfte1Q2buQ+JQbFv27uKXMs7TPeQLD5s3HmAHeGKR0 +PGw5JkQ2jnsheolGWix1nHgbIreyAkBdyJFabEay69u/igVpgYKDBgiU503LKWYWXxh r/OQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220954; x=1688812954; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AI+7AqSnoQezfqx21rFzO/758w7Rg9rRRO4yk1jYXRY=; b=i1cdnwqpdJKZ4PGcGnwK/sY+nOjmKm7Vi0v4yuEzk67ZDTvagFXqpgAzVtc+mm4iT9 PjwU1GHzMRAHxt6Slrn484Je2DB/JJlQts7LxDFlJcrfs/0k/NoNWxtyS1w0ewkrk6+A msJ2BRBSPXnIU8RhIIOKYG0hsDx50KyKsearHK0eYS5zl7yhcOpUQ0qfMBbcPOL1EfnJ pgVxvIcSQH9AeJOiuiRoOjklTvgPakH0pcZJvAd13M6jSOwleP2KU4xE5KNabHR4A/U6 ObG1t8S1gbHdlyBeCH8AUuYkkzwF03Xqy5zeKnbhQxTYPsRuwGlQzdXvRWvWV1WXXCSj 832A== X-Gm-Message-State: AC+VfDx6SyRou8aG/IwXUl1xkYK/f6NJsxczidG9BIN152Ylx9quhDGH iU8xnIWGqkBPXp5piyNkxE+qpxw+P6M= X-Google-Smtp-Source: ACHHUZ5EoqxCgbSE+64ssjM/N+BM8UDj+5gXheqxS00pG3gzZmTn47QHgPG1MhzlgSefOSw2C8wkjg== X-Received: by 2002:ac2:4825:0:b0:4f3:a99c:fbbe with SMTP id 5-20020ac24825000000b004f3a99cfbbemr3180649lft.14.1686220954335; Thu, 08 Jun 2023 03:42:34 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 09/33] target/mips: Add emulation of MXU S32CPS D16CPS Q8ABD Q16SAT insns Date: Thu, 8 Jun 2023 13:41:58 +0300 Message-Id: <20230608104222.1520143-10-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::129; envelope-from=lis8215@gmail.com; helo=mail-lf1-x129.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230340465100005 Content-Type: text/plain; charset="utf-8" These instructions are part of pool2, see the grand tree above in the file. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 296 +++++++++++++++++++++++++++++++- 1 file changed, 293 insertions(+), 3 deletions(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 2eebdfe8ca..b3e3937545 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -361,6 +361,7 @@ enum { OPC_MXU_S32MSUB =3D 0x04, OPC_MXU_S32MSUBU =3D 0x05, OPC_MXU__POOL01 =3D 0x06, + OPC_MXU__POOL02 =3D 0x07, OPC_MXU_D16MUL =3D 0x08, OPC_MXU_D16MAC =3D 0x0A, OPC_MXU__POOL04 =3D 0x10, @@ -407,6 +408,16 @@ enum { OPC_MXU_Q8ADD =3D 0x07, }; =20 +/* + * MXU pool 02 + */ +enum { + OPC_MXU_S32CPS =3D 0x00, + OPC_MXU_D16CPS =3D 0x02, + OPC_MXU_Q8ABD =3D 0x04, + OPC_MXU_Q16SAT =3D 0x06, +}; + /* * MXU pool 04 05 06 07 08 09 10 11 */ @@ -1677,11 +1688,154 @@ static void gen_mxu_q8avg(DisasContext *ctx, bool = round45) =20 =20 /* - * MXU instruction category: Arithmetic - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * MXU instruction category: Addition and subtraction + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * - * Q8ADD + * S32CPS D16CPS + * Q8ADD + */ + +/* + * S32CPS + * Update XRa if XRc < 0 by value of 0 - XRb + * else XRa =3D XRb + */ +static void gen_mxu_S32CPS(DisasContext *ctx) +{ + uint32_t pad, XRc, XRb, XRa; + + pad =3D extract32(ctx->opcode, 21, 5); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely(pad !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else if (unlikely(XRb =3D=3D 0)) { + /* XRc make no sense 0 - 0 =3D 0 -> just set destination to zero */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else if (unlikely(XRc =3D=3D 0)) { + /* condition always false -> just move XRb to XRa */ + tcg_gen_mov_tl(mxu_gpr[XRa - 1], mxu_gpr[XRb - 1]); + } else { + /* the most general case */ + TCGv t0 =3D tcg_temp_new(); + TCGLabel *l_not_less =3D gen_new_label(); + TCGLabel *l_done =3D gen_new_label(); + + tcg_gen_brcondi_tl(TCG_COND_GE, mxu_gpr[XRc - 1], 0, l_not_less); + tcg_gen_neg_tl(t0, mxu_gpr[XRb - 1]); + tcg_gen_br(l_done); + gen_set_label(l_not_less); + gen_load_mxu_gpr(t0, XRb); + gen_set_label(l_done); + gen_store_mxu_gpr(t0, XRa); + } +} + +/* + * D16CPS + * Update XRa[0..1] if XRc[0..1] < 0 by value of 0 - XRb[0..1] + * else XRa[0..1] =3D XRb[0..1] */ +static void gen_mxu_D16CPS(DisasContext *ctx) +{ + uint32_t pad, XRc, XRb, XRa; + + pad =3D extract32(ctx->opcode, 21, 5); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely(pad !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else if (unlikely(XRb =3D=3D 0)) { + /* XRc make no sense 0 - 0 =3D 0 -> just set destination to zero */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else if (unlikely(XRc =3D=3D 0)) { + /* condition always false -> just move XRb to XRa */ + tcg_gen_mov_tl(mxu_gpr[XRa - 1], mxu_gpr[XRb - 1]); + } else { + /* the most general case */ + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGLabel *l_done_hi =3D gen_new_label(); + TCGLabel *l_not_less_lo =3D gen_new_label(); + TCGLabel *l_done_lo =3D gen_new_label(); + + tcg_gen_sextract_tl(t0, mxu_gpr[XRc - 1], 16, 16); + tcg_gen_sextract_tl(t1, mxu_gpr[XRb - 1], 16, 16); + tcg_gen_brcondi_tl(TCG_COND_GE, t0, 0, l_done_hi); + tcg_gen_subfi_tl(t1, 0, t1); + + gen_set_label(l_done_hi); + tcg_gen_shli_i32(t1, t1, 16); + + tcg_gen_sextract_tl(t0, mxu_gpr[XRc - 1], 0, 16); + tcg_gen_brcondi_tl(TCG_COND_GE, t0, 0, l_not_less_lo); + tcg_gen_sextract_tl(t0, mxu_gpr[XRb - 1], 0, 16); + tcg_gen_subfi_tl(t0, 0, t0); + tcg_gen_br(l_done_lo); + + gen_set_label(l_not_less_lo); + tcg_gen_extract_tl(t0, mxu_gpr[XRb - 1], 0, 16); + + gen_set_label(l_done_lo); + tcg_gen_deposit_tl(mxu_gpr[XRa - 1], t1, t0, 0, 16); + } +} + +/* + * Q8ABD XRa, XRb, XRc + * Gets absolute difference for quadruple of 8-bit + * packed in XRb to another one in XRc, + * put the result in XRa. + * a.k.a. XRa[0..3] =3D abs(XRb[0..3] - XRc[0..3]); + */ +static void gen_mxu_Q8ABD(DisasContext *ctx) +{ + uint32_t pad, XRc, XRb, XRa; + + pad =3D extract32(ctx->opcode, 21, 3); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely(pad !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else if (unlikely((XRb =3D=3D 0) && (XRc =3D=3D 0))) { + /* both operands zero registers -> just set destination to zero */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else { + /* the most general case */ + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv t4 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t3, XRb); + gen_load_mxu_gpr(t4, XRc); + tcg_gen_movi_tl(t2, 0); + + for (int i =3D 0; i < 4; i++) { + tcg_gen_extract_tl(t0, t3, 8 * i, 8); + tcg_gen_extract_tl(t1, t4, 8 * i, 8); + + tcg_gen_sub_tl(t0, t0, t1); + tcg_gen_abs_tl(t0, t0); + + tcg_gen_deposit_tl(t2, t2, t0, 8 * i, 8); + } + gen_store_mxu_gpr(t2, XRa); + } +} =20 /* * Q8ADD XRa, XRb, XRc, ptn2 @@ -1748,6 +1902,114 @@ static void gen_mxu_Q8ADD(DisasContext *ctx) } } =20 +/* + * MXU instruction category: Miscellaneous + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * Q16SAT + */ + +/* + * Q16SAT XRa, XRb, XRc + * Packs four 16-bit signed integers in XRb and XRc to + * four saturated unsigned 8-bit into XRa. + * + */ +static void gen_mxu_Q16SAT(DisasContext *ctx) +{ + uint32_t pad, XRc, XRb, XRa; + + pad =3D extract32(ctx->opcode, 21, 3); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely(pad !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else { + /* the most general case */ + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + + tcg_gen_movi_tl(t2, 0); + if (XRb !=3D 0) { + TCGLabel *l_less_hi =3D gen_new_label(); + TCGLabel *l_less_lo =3D gen_new_label(); + TCGLabel *l_lo =3D gen_new_label(); + TCGLabel *l_greater_hi =3D gen_new_label(); + TCGLabel *l_greater_lo =3D gen_new_label(); + TCGLabel *l_done =3D gen_new_label(); + + tcg_gen_sari_tl(t0, mxu_gpr[XRb - 1], 16); + tcg_gen_brcondi_tl(TCG_COND_LT, t0, 0, l_less_hi); + tcg_gen_brcondi_tl(TCG_COND_GT, t0, 255, l_greater_hi); + tcg_gen_br(l_lo); + gen_set_label(l_less_hi); + tcg_gen_movi_tl(t0, 0); + tcg_gen_br(l_lo); + gen_set_label(l_greater_hi); + tcg_gen_movi_tl(t0, 255); + + gen_set_label(l_lo); + tcg_gen_shli_tl(t1, mxu_gpr[XRb - 1], 16); + tcg_gen_sari_tl(t1, t1, 16); + tcg_gen_brcondi_tl(TCG_COND_LT, t1, 0, l_less_lo); + tcg_gen_brcondi_tl(TCG_COND_GT, t1, 255, l_greater_lo); + tcg_gen_br(l_done); + gen_set_label(l_less_lo); + tcg_gen_movi_tl(t1, 0); + tcg_gen_br(l_done); + gen_set_label(l_greater_lo); + tcg_gen_movi_tl(t1, 255); + + gen_set_label(l_done); + tcg_gen_shli_tl(t2, t0, 24); + tcg_gen_shli_tl(t1, t1, 16); + tcg_gen_or_tl(t2, t2, t1); + } + + if (XRc !=3D 0) { + TCGLabel *l_less_hi =3D gen_new_label(); + TCGLabel *l_less_lo =3D gen_new_label(); + TCGLabel *l_lo =3D gen_new_label(); + TCGLabel *l_greater_hi =3D gen_new_label(); + TCGLabel *l_greater_lo =3D gen_new_label(); + TCGLabel *l_done =3D gen_new_label(); + + tcg_gen_sari_tl(t0, mxu_gpr[XRc - 1], 16); + tcg_gen_brcondi_tl(TCG_COND_LT, t0, 0, l_less_hi); + tcg_gen_brcondi_tl(TCG_COND_GT, t0, 255, l_greater_hi); + tcg_gen_br(l_lo); + gen_set_label(l_less_hi); + tcg_gen_movi_tl(t0, 0); + tcg_gen_br(l_lo); + gen_set_label(l_greater_hi); + tcg_gen_movi_tl(t0, 255); + + gen_set_label(l_lo); + tcg_gen_shli_tl(t1, mxu_gpr[XRc - 1], 16); + tcg_gen_sari_tl(t1, t1, 16); + tcg_gen_brcondi_tl(TCG_COND_LT, t1, 0, l_less_lo); + tcg_gen_brcondi_tl(TCG_COND_GT, t1, 255, l_greater_lo); + tcg_gen_br(l_done); + gen_set_label(l_less_lo); + tcg_gen_movi_tl(t1, 0); + tcg_gen_br(l_done); + gen_set_label(l_greater_lo); + tcg_gen_movi_tl(t1, 255); + + gen_set_label(l_done); + tcg_gen_shli_tl(t0, t0, 8); + tcg_gen_or_tl(t2, t2, t0); + tcg_gen_or_tl(t2, t2, t1); + } + gen_store_mxu_gpr(t2, XRa); + } +} + =20 /* * MXU instruction category: align @@ -2087,6 +2349,31 @@ static void decode_opc_mxu__pool01(DisasContext *ctx) break; } } + +static void decode_opc_mxu__pool02(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 18, 3); + + switch (opcode) { + case OPC_MXU_S32CPS: + gen_mxu_S32CPS(ctx); + break; + case OPC_MXU_D16CPS: + gen_mxu_D16CPS(ctx); + break; + case OPC_MXU_Q8ABD: + gen_mxu_Q8ABD(ctx); + break; + case OPC_MXU_Q16SAT: + gen_mxu_Q16SAT(ctx); + break; + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + static void decode_opc_mxu__pool04(DisasContext *ctx) { uint32_t reversed =3D extract32(ctx->opcode, 20, 1); @@ -2336,6 +2623,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU__POOL01: decode_opc_mxu__pool01(ctx); break; + case OPC_MXU__POOL02: + decode_opc_mxu__pool02(ctx); + break; case OPC_MXU__POOL04: decode_opc_mxu__pool04(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230534; cv=none; d=zohomail.com; s=zohoarc; b=Vqk+ZNNid0qVsxtqmscfZwQ9YlFBiYj7NLOWyxeol7J/UomqLC5zs0OAodrcmpSg1kyT08cCJokeIa3h6EYvnyFwoxF9XkGELk9b7l1j5Q6MpnZApBC3xf7D/sUJS5OzHI38g2rYNjqqNAVQOmRyvCstM3Vxg+FrJbKmdlDG4dI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230534; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=VOKWKGLAIXv9YiGFIoj/OF3at1WTFXY+plOc1+ku6cg=; b=AJj+yvAcxXbJjhve1qRkyroHcl3Ov2KCqa36S0JecdApw/MzcfwUHzzO0RDv64jvBNOJraitgAXTKNTukz5Z1mMvgBwn2Pw9Brb3KmQmd2tdk/Mz2tatbtsm06cJC3F+hD2qgsrJniDgsd03BW49dH3LgFP6G9/Anh4PP7VwXA0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230534246525.6866566194825; Thu, 8 Jun 2023 06:22:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWh-0003R7-OA; Thu, 08 Jun 2023 09:18:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6F-0002J1-U8 for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:39 -0400 Received: from mail-lf1-x136.google.com ([2a00:1450:4864:20::136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6D-0006V6-53 for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:39 -0400 Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-4f122ff663eso550659e87.2 for ; Thu, 08 Jun 2023 03:42:36 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220955; x=1688812955; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VOKWKGLAIXv9YiGFIoj/OF3at1WTFXY+plOc1+ku6cg=; b=PMkrJPldKugqj1+qbWKmcs7i7i5Kn0zqE+dtlGOMOX9kS687Dj7SEjzbM7bz8JG352 A7ywmAmkr32wsGPhDyfdsrILaxny5B3cr8ixHMCVm8Zmav/Awqtj8zqwtSGzXDJ0ZY4Z fqAlyNoDSYYyiHmESOL1mZ6gkEPvBRGPdhmeR2mZQHSnZXDcjR0LJjOKQaCJ3GYDMELu k0M7pNt1hCnS8VNQFDvrKgnihu72XuD035wXOw4/5aXpwWX2t49jXggx7J2PKXxSUu1e 5tOS+v7qOt3dMCU1b1/Rnb9Nm7GJxM83/uJFsjvIhVQi2JUb6uL5ANXKBo2/4U6Hd5t1 owQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220955; x=1688812955; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VOKWKGLAIXv9YiGFIoj/OF3at1WTFXY+plOc1+ku6cg=; b=QE4XjsNh/ExpsgE7fneX3gqvQUFALrIVjVUw7azY47aMkFTYax97BY3AiLEJ7nfmkU S9/fv2LQqP/LzAQPPfDPUQWVubDeD4agBwMqAWyHJlImtDSkMHr3PUlgqXQzpAmFKYfE gG5fG/zlbimDFBW2/dE8p10/yzwdGlDpflZoeDNMDHwo6GLB+uoYwiBMxfTzZjqY1mKA jKQYDMZzpzKNYLNBYa2KogU3nATOBO96xfqHYXnsumXNlebfW41/5XjUWpqWJz+vTj/5 1d9mZ2IhVyIBMNrLwYSfQkkrPazaI6K4MdivXeSwyp0o2GgMUPGNBe+V93max1woGIPl viGQ== X-Gm-Message-State: AC+VfDychpL2BNQ/I3jUtk0ecYwlS+HMJNq11HXre6TcypMZDSSTvKRF kd3PVmKEGXUJvUZ86ZTGI8opSkRDDdE= X-Google-Smtp-Source: ACHHUZ59xw8r0w5bd2NKru5o2v90CKh+qLQ6d5Z5qu659dsYoAfofI2ks2jdKcdmw+LsCx/60g514g== X-Received: by 2002:a19:ee07:0:b0:4f3:a812:5ae with SMTP id g7-20020a19ee07000000b004f3a81205aemr2979000lfb.37.1686220955382; Thu, 08 Jun 2023 03:42:35 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 10/33] target/mips: Add emulation of MXU D16MULF D16MULE instructions Date: Thu, 8 Jun 2023 13:41:59 +0300 Message-Id: <20230608104222.1520143-11-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::136; envelope-from=lis8215@gmail.com; helo=mail-lf1-x136.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230535639100009 Content-Type: text/plain; charset="utf-8" These instructions are part of pool3, see the grand tree above in the file. The instructions are close to D16MUL so common generation function provided. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 95 +++++++++++++++++++++++++++++++-- 1 file changed, 90 insertions(+), 5 deletions(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index b3e3937545..d1f4fc79de 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -363,6 +363,7 @@ enum { OPC_MXU__POOL01 =3D 0x06, OPC_MXU__POOL02 =3D 0x07, OPC_MXU_D16MUL =3D 0x08, + OPC_MXU__POOL03 =3D 0x09, OPC_MXU_D16MAC =3D 0x0A, OPC_MXU__POOL04 =3D 0x10, OPC_MXU__POOL05 =3D 0x11, @@ -418,6 +419,14 @@ enum { OPC_MXU_Q16SAT =3D 0x06, }; =20 +/* + * MXU pool 03 + */ +enum { + OPC_MXU_D16MULF =3D 0x00, + OPC_MXU_D16MULE =3D 0x01, +}; + /* * MXU pool 04 05 06 07 08 09 10 11 */ @@ -662,9 +671,14 @@ static void gen_mxu_s8ldd(DisasContext *ctx) } =20 /* - * D16MUL XRa, XRb, XRc, XRd, optn2 - Signed 16 bit pattern multiplication + * D16MUL XRa, XRb, XRc, XRd, optn2 - Signed 16 bit pattern multiplication + * D16MULF XRa, XRb, XRc, optn2 - Signed Q15 fraction pattern multiplicati= on + * with rounding and packing result + * D16MULE XRa, XRb, XRc, XRd, optn2 - Signed Q15 fraction pattern + * multiplication with rounding */ -static void gen_mxu_d16mul(DisasContext *ctx) +static void gen_mxu_d16mul(DisasContext *ctx, bool fractional, + bool packed_result) { TCGv t0, t1, t2, t3; uint32_t XRa, XRb, XRc, XRd, optn2; @@ -680,6 +694,12 @@ static void gen_mxu_d16mul(DisasContext *ctx) XRd =3D extract32(ctx->opcode, 18, 4); optn2 =3D extract32(ctx->opcode, 22, 2); =20 + /* + * TODO: XRd field isn't used for D16MULF + * There's no knowledge how this field affect + * instruction decoding/behavior + */ + gen_load_mxu_gpr(t1, XRb); tcg_gen_sextract_tl(t0, t1, 0, 16); tcg_gen_sextract_tl(t1, t1, 16, 16); @@ -705,8 +725,52 @@ static void gen_mxu_d16mul(DisasContext *ctx) tcg_gen_mul_tl(t2, t1, t2); break; } - gen_store_mxu_gpr(t3, XRa); - gen_store_mxu_gpr(t2, XRd); + if (fractional) { + TCGLabel *l_done =3D gen_new_label(); + TCGv rounding =3D tcg_temp_new(); + + tcg_gen_shli_tl(t3, t3, 1); + tcg_gen_shli_tl(t2, t2, 1); + tcg_gen_andi_tl(rounding, mxu_CR, 0x2); + tcg_gen_brcondi_tl(TCG_COND_EQ, rounding, 0, l_done); + if (packed_result) { + TCGLabel *l_apply_bias_l =3D gen_new_label(); + TCGLabel *l_apply_bias_r =3D gen_new_label(); + TCGLabel *l_half_done =3D gen_new_label(); + TCGv bias =3D tcg_temp_new(); + + /* + * D16MULF supports unbiased rounding aka "bankers rounding", + * "round to even", "convergent rounding" + */ + tcg_gen_andi_tl(bias, mxu_CR, 0x4); + tcg_gen_brcondi_tl(TCG_COND_NE, bias, 0, l_apply_bias_l); + tcg_gen_andi_tl(t0, t3, 0x1ffff); + tcg_gen_brcondi_tl(TCG_COND_EQ, t0, 0x8000, l_half_done); + gen_set_label(l_apply_bias_l); + tcg_gen_addi_tl(t3, t3, 0x8000); + gen_set_label(l_half_done); + tcg_gen_brcondi_tl(TCG_COND_NE, bias, 0, l_apply_bias_r); + tcg_gen_andi_tl(t0, t2, 0x1ffff); + tcg_gen_brcondi_tl(TCG_COND_EQ, t0, 0x8000, l_done); + gen_set_label(l_apply_bias_r); + tcg_gen_addi_tl(t2, t2, 0x8000); + } else { + /* D16MULE doesn't support unbiased rounding */ + tcg_gen_addi_tl(t3, t3, 0x8000); + tcg_gen_addi_tl(t2, t2, 0x8000); + } + gen_set_label(l_done); + } + if (!packed_result) { + gen_store_mxu_gpr(t3, XRa); + gen_store_mxu_gpr(t2, XRd); + } else { + tcg_gen_andi_tl(t3, t3, 0xffff0000); + tcg_gen_shri_tl(t2, t2, 16); + tcg_gen_or_tl(t3, t3, t2); + gen_store_mxu_gpr(t3, XRa); + } } =20 /* @@ -2374,6 +2438,24 @@ static void decode_opc_mxu__pool02(DisasContext *ctx) } } =20 +static void decode_opc_mxu__pool03(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 24, 2); + + switch (opcode) { + case OPC_MXU_D16MULF: + gen_mxu_d16mul(ctx, true, true); + break; + case OPC_MXU_D16MULE: + gen_mxu_d16mul(ctx, true, false); + break; + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + static void decode_opc_mxu__pool04(DisasContext *ctx) { uint32_t reversed =3D extract32(ctx->opcode, 20, 1); @@ -2615,7 +2697,7 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) decode_opc_mxu__pool00(ctx); break; case OPC_MXU_D16MUL: - gen_mxu_d16mul(ctx); + gen_mxu_d16mul(ctx, false, false); break; case OPC_MXU_D16MAC: gen_mxu_d16mac(ctx); @@ -2626,6 +2708,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU__POOL02: decode_opc_mxu__pool02(ctx); break; + case OPC_MXU__POOL03: + decode_opc_mxu__pool03(ctx); + break; case OPC_MXU__POOL04: decode_opc_mxu__pool04(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230529; cv=none; d=zohomail.com; s=zohoarc; b=h0d/LntEGly97G7t25pTnlQUH6tx6KZUT9qyC1S9N87EeyBT26f0plW7DWXLHc+cVF+S3Vn9HXzNUe45I7ZftE1okm4nBwDkX9Fh1CjMpA70b2pDaPO3Aa1hWj8bQ2dsorS1bIipoGd2xJfeOg7PYgaUSBVavArTsNX1wLy2QAo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230529; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=LwWjK9SsNWU0odkW1I3f9wANPMtQ81Hp5nXl4kMSUs8=; b=O1Z5xflctrNXxqNc33RT8qEgL4FND3HTNpjYAF9Pz2A4lm32d4iTIVaEaVWcFL5r6BBqD1OgFr9QFgJyv/4Zz3AH9yEnnhwOiY5Ao+6XxpNOH3GPc6zgYALXpdlOmzMzOFuunoj7b7qF3jIUEdA5+RUGdmD6ZeNnOerVwhTXbSE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230529476860.1628314967188; Thu, 8 Jun 2023 06:22:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWV-0003Md-SG; Thu, 08 Jun 2023 09:17:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6H-0002JB-7G for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:41 -0400 Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6E-0006VM-Fo for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:40 -0400 Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-4f4b384c09fso550808e87.3 for ; Thu, 08 Jun 2023 03:42:38 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220956; x=1688812956; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LwWjK9SsNWU0odkW1I3f9wANPMtQ81Hp5nXl4kMSUs8=; b=InEXUWeVIz+SWzq0jaDdQzO3P35PJbTYhMgULU42uCsi7ymtdNTGhh05L653GThtr3 24Dzt8+qX8Jz6dP6klbQvldQaOk1GUaRjnxBlppeipCsr6FX1tLkeL0ELRMYVUmLRR1b mAruSGhpGzVQ+5oauff6c3wLID/rP8/MNlos+dMyRvhcQsq7knXQz/g8blUq4zA8RCyC UnEEPCGR4V+onG4JVy4jmdnhjqqcK13kUW94Wiu9KoNhXv6kE6cmpN5WKPip6kL+VY1V d7ax/luyooLVJ1K7Ozp6k04joMu1xrHFiqckzdgy80mNspP9BtGFSoj/Iko4n8k/KhC5 AyrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220956; x=1688812956; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LwWjK9SsNWU0odkW1I3f9wANPMtQ81Hp5nXl4kMSUs8=; b=W6SU08M5PE43pOhLeTZ2j55ZiZqLRpZiG3lMJoO2nE0GopVf+F0grum1X3GuI0ekjy sUwgOeeulT0yUt0GS0SkbbaJBqLHrK999B8YILd4RCIl+23+XIat54mmgWy28MTEow8J W8tBxtRe+rHn7EGDwW1vYNjD3Y/Mn7K1/qpWdNgSTSTF3moJjB8O4zSlWP6iYVNUV8Ic t4nkUY9RskysmnllfD4Vx0ujm7yq0YDw6ImjSW4PNkDiM3X61rshlAsb4qa+oxWMlfmc M+ffac3CJMJFc6hPukDiHmA5kQJgJDehQUz9Pzw4Aeyxztb7Ug8hvFMDWPCEYhTyQkjf 0hmw== X-Gm-Message-State: AC+VfDzxwNEa946z/1Em3xyJA0Fmgn65A9DiSCq0A77uxqNjo8mj3GCb +1hq9pHJX8Ael0MItxT/JSnqj4aCcZ4= X-Google-Smtp-Source: ACHHUZ7o5+YQY62erb2cbtdJz58GMuI/3sJSdJPO4NqFKVjTw11P2yUkEUBTpQq04hmuvKqRdHVKdg== X-Received: by 2002:ac2:4a7c:0:b0:4f3:b32d:f72c with SMTP id q28-20020ac24a7c000000b004f3b32df72cmr2856791lfp.9.1686220956497; Thu, 08 Jun 2023 03:42:36 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 11/33] target/mips: Add emulation of MXU D16MACF D16MACE instructions Date: Thu, 8 Jun 2023 13:42:00 +0300 Message-Id: <20230608104222.1520143-12-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::132; envelope-from=lis8215@gmail.com; helo=mail-lf1-x132.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230531731100003 Content-Type: text/plain; charset="utf-8" These instructions are close to D16MAC so common generation function provided. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 74 ++++++++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 6 deletions(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index d1f4fc79de..cd93992eed 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -365,6 +365,8 @@ enum { OPC_MXU_D16MUL =3D 0x08, OPC_MXU__POOL03 =3D 0x09, OPC_MXU_D16MAC =3D 0x0A, + OPC_MXU_D16MACF =3D 0x0B, + OPC_MXU_D16MACE =3D 0x0F, OPC_MXU__POOL04 =3D 0x10, OPC_MXU__POOL05 =3D 0x11, OPC_MXU__POOL06 =3D 0x12, @@ -774,10 +776,15 @@ static void gen_mxu_d16mul(DisasContext *ctx, bool fr= actional, } =20 /* - * D16MAC XRa, XRb, XRc, XRd, aptn2, optn2 - Signed 16 bit pattern multiply - * and accumulate + * D16MAC XRa, XRb, XRc, XRd, aptn2, optn2 + * Signed 16 bit pattern multiply and accumulate + * D16MACF XRa, XRb, XRc, aptn2, optn2 + * Signed Q15 fraction pattern multiply accumulate and pack + * D16MACE XRa, XRb, XRc, XRd, aptn2, optn2 + * Signed Q15 fraction pattern multiply and accumulate */ -static void gen_mxu_d16mac(DisasContext *ctx) +static void gen_mxu_d16mac(DisasContext *ctx, bool fractional, + bool packed_result) { TCGv t0, t1, t2, t3; uint32_t XRa, XRb, XRc, XRd, optn2, aptn2; @@ -820,6 +827,11 @@ static void gen_mxu_d16mac(DisasContext *ctx) tcg_gen_mul_tl(t2, t1, t2); break; } + + if (fractional) { + tcg_gen_shli_tl(t3, t3, 1); + tcg_gen_shli_tl(t2, t2, 1); + } gen_load_mxu_gpr(t0, XRa); gen_load_mxu_gpr(t1, XRd); =20 @@ -841,8 +853,52 @@ static void gen_mxu_d16mac(DisasContext *ctx) tcg_gen_sub_tl(t2, t1, t2); break; } - gen_store_mxu_gpr(t3, XRa); - gen_store_mxu_gpr(t2, XRd); + + if (fractional) { + TCGLabel *l_done =3D gen_new_label(); + TCGv rounding =3D tcg_temp_new(); + + tcg_gen_andi_tl(rounding, mxu_CR, 0x2); + tcg_gen_brcondi_tl(TCG_COND_EQ, rounding, 0, l_done); + if (packed_result) { + TCGLabel *l_apply_bias_l =3D gen_new_label(); + TCGLabel *l_apply_bias_r =3D gen_new_label(); + TCGLabel *l_half_done =3D gen_new_label(); + TCGv bias =3D tcg_temp_new(); + + /* + * D16MACF supports unbiased rounding aka "bankers rounding", + * "round to even", "convergent rounding" + */ + tcg_gen_andi_tl(bias, mxu_CR, 0x4); + tcg_gen_brcondi_tl(TCG_COND_NE, bias, 0, l_apply_bias_l); + tcg_gen_andi_tl(t0, t3, 0x1ffff); + tcg_gen_brcondi_tl(TCG_COND_EQ, t0, 0x8000, l_half_done); + gen_set_label(l_apply_bias_l); + tcg_gen_addi_tl(t3, t3, 0x8000); + gen_set_label(l_half_done); + tcg_gen_brcondi_tl(TCG_COND_NE, bias, 0, l_apply_bias_r); + tcg_gen_andi_tl(t0, t2, 0x1ffff); + tcg_gen_brcondi_tl(TCG_COND_EQ, t0, 0x8000, l_done); + gen_set_label(l_apply_bias_r); + tcg_gen_addi_tl(t2, t2, 0x8000); + } else { + /* D16MACE doesn't support unbiased rounding */ + tcg_gen_addi_tl(t3, t3, 0x8000); + tcg_gen_addi_tl(t2, t2, 0x8000); + } + gen_set_label(l_done); + } + + if (!packed_result) { + gen_store_mxu_gpr(t3, XRa); + gen_store_mxu_gpr(t2, XRd); + } else { + tcg_gen_andi_tl(t3, t3, 0xffff0000); + tcg_gen_shri_tl(t2, t2, 16); + tcg_gen_or_tl(t3, t3, t2); + gen_store_mxu_gpr(t3, XRa); + } } =20 /* @@ -2700,7 +2756,13 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) gen_mxu_d16mul(ctx, false, false); break; case OPC_MXU_D16MAC: - gen_mxu_d16mac(ctx); + gen_mxu_d16mac(ctx, false, false); + break; + case OPC_MXU_D16MACF: + gen_mxu_d16mac(ctx, true, true); + break; + case OPC_MXU_D16MACE: + gen_mxu_d16mac(ctx, true, false); break; case OPC_MXU__POOL01: decode_opc_mxu__pool01(ctx); --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230560; cv=none; d=zohomail.com; s=zohoarc; b=FtT4Z9NMER/orz4fHGH/Ky+EZ+pHmtSma2vf78cVt4QOBeUYfMGHXDGSOQkxba/yb28fNiwW9qXl4gjpMOdLWHBMAr/YxMNILcg8KwcL0Z3uOgKiB6lyW/U/MRGKNzlBFpRMaYRjFqCp1T57+q5kSptIBQ3HKsv3+J72ljKzyJU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230560; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=k6TCvwqDAGxfcAseFytqW5BhRh4D+q19S8dd4eqVH4o=; b=U/9ikqEuObAHR350cFnuvonIgecI508XfnlsSkKYCKgrtd9arVG3xR4yv+FM7y35VuYKDPSu2B239mpMF4//pIiooHvr0+Qegu7o7y5zPzYBbXAlxGF4cZyps1eRhcO+w6txRpt+7yv04ndNzZjL/9obTGAbEjskMfz65b8B1wE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230560572928.7879376288531; Thu, 8 Jun 2023 06:22:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWV-0003Mc-F2; Thu, 08 Jun 2023 09:17:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6I-0002Jy-Hk for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:42 -0400 Received: from mail-lf1-x135.google.com ([2a00:1450:4864:20::135]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6G-0006VZ-Nb for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:42 -0400 Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-4f642a24555so558751e87.3 for ; Thu, 08 Jun 2023 03:42:40 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220958; x=1688812958; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=k6TCvwqDAGxfcAseFytqW5BhRh4D+q19S8dd4eqVH4o=; b=ItBm+p+KznccAmpBeOtqjAXaN+KXKIu1sMwUM9UJ76tzs3PPOysPaegzHT0R0jdv+5 zAZyoxcrGJZpLBfbn2VF8WjIkhGpcOJkTWYB8owmltfLVlfAHt63wWOhxjOlfYWrXTKP 901bD7XSN41barKBWKKObuax+OUSuOVl8n/P3YlSl62rZzfQMPzKAnoql35QidiIInwG t89vUMelPrRElxf86dGl0IRCCRl5UrC73dBEPX8HGV4rRj2uEAoYZPyaPQUXUtkGkFtp 8CKmBipbxQa1qigbJd1yQgnU/QZeNmhIljZHAqXK6Q/YcbfPSdj4eKRHi1YbQVsh9C2d OS0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220958; x=1688812958; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=k6TCvwqDAGxfcAseFytqW5BhRh4D+q19S8dd4eqVH4o=; b=mGenhYWEo2ovOWitOFZQVsm8lIBqIVSO2y0Sa42vOTqUIj1SOJWdtZMflzMPa5ApLj 86iYDG8qgEGhC7TLZa/eMVm05wHFG8TlsAbVhP+vAYYShQuF3cbBMSRoid6otB09RZi6 bkkkTI7iFWFapZkSosNmob/hiqwhTnAr1Y5wCfzDHSOgWhBlFgXOVUFMNCzH2zd58lZk hWdYEm157SupVeBg3HCLJn2IjVxAQ36fwflYAQpCbwvRY0EP+rq0DMHWeCcbABbwLErU jS9XSPQ5GDc1y6APwFUgBrsvYmQM8ONB5Rjm+QhQExFI0O4Itj1wMa9HfXa8ICTL1m3T ih7A== X-Gm-Message-State: AC+VfDwmg1JjEvfcflRyM9AXv8BIvnQR9qif0XXM94kDnuw8qA8Xx3cQ TCFCWLTO9C+3uK4MtjJ8T5YPTx0J7Ak= X-Google-Smtp-Source: ACHHUZ6l3BrFkbyMid9KreVpyrEnTnU50j/pzqg4YTk69TJhenb+Y9Asw7O7z4WBogMrC/Y5MQYYIg== X-Received: by 2002:ac2:4a76:0:b0:4f4:aea9:2a2f with SMTP id q22-20020ac24a76000000b004f4aea92a2fmr2697847lfp.57.1686220957812; Thu, 08 Jun 2023 03:42:37 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 12/33] target/mips: Add emulation of MXU D16MADL instruction Date: Thu, 8 Jun 2023 13:42:01 +0300 Message-Id: <20230608104222.1520143-13-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::135; envelope-from=lis8215@gmail.com; helo=mail-lf1-x135.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230562604100005 Content-Type: text/plain; charset="utf-8" The instruction is similar to multiply and accumulate but works with MXU registers set. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 82 +++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index cd93992eed..85f3e47ee3 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -366,6 +366,7 @@ enum { OPC_MXU__POOL03 =3D 0x09, OPC_MXU_D16MAC =3D 0x0A, OPC_MXU_D16MACF =3D 0x0B, + OPC_MXU_D16MADL =3D 0x0C, OPC_MXU_D16MACE =3D 0x0F, OPC_MXU__POOL04 =3D 0x10, OPC_MXU__POOL05 =3D 0x11, @@ -901,6 +902,84 @@ static void gen_mxu_d16mac(DisasContext *ctx, bool fra= ctional, } } =20 +/* + * D16MADL XRa, XRb, XRc, XRd, aptn2, optn2 - Double packed + * unsigned 16 bit pattern multiply and add/subtract. + */ +static void gen_mxu_d16madl(DisasContext *ctx) +{ + TCGv t0, t1, t2, t3; + uint32_t XRa, XRb, XRc, XRd, optn2, aptn2; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + t2 =3D tcg_temp_new(); + t3 =3D tcg_temp_new(); + + XRa =3D extract32(ctx->opcode, 6, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRd =3D extract32(ctx->opcode, 18, 4); + optn2 =3D extract32(ctx->opcode, 22, 2); + aptn2 =3D extract32(ctx->opcode, 24, 2); + + gen_load_mxu_gpr(t1, XRb); + tcg_gen_sextract_tl(t0, t1, 0, 16); + tcg_gen_sextract_tl(t1, t1, 16, 16); + + gen_load_mxu_gpr(t3, XRc); + tcg_gen_sextract_tl(t2, t3, 0, 16); + tcg_gen_sextract_tl(t3, t3, 16, 16); + + switch (optn2) { + case MXU_OPTN2_WW: /* XRB.H*XRC.H =3D=3D lop, XRB.L*XRC.L =3D=3D rop */ + tcg_gen_mul_tl(t3, t1, t3); + tcg_gen_mul_tl(t2, t0, t2); + break; + case MXU_OPTN2_LW: /* XRB.L*XRC.H =3D=3D lop, XRB.L*XRC.L =3D=3D rop */ + tcg_gen_mul_tl(t3, t0, t3); + tcg_gen_mul_tl(t2, t0, t2); + break; + case MXU_OPTN2_HW: /* XRB.H*XRC.H =3D=3D lop, XRB.H*XRC.L =3D=3D rop */ + tcg_gen_mul_tl(t3, t1, t3); + tcg_gen_mul_tl(t2, t1, t2); + break; + case MXU_OPTN2_XW: /* XRB.L*XRC.H =3D=3D lop, XRB.H*XRC.L =3D=3D rop */ + tcg_gen_mul_tl(t3, t0, t3); + tcg_gen_mul_tl(t2, t1, t2); + break; + } + tcg_gen_extract_tl(t2, t2, 0, 16); + tcg_gen_extract_tl(t3, t3, 0, 16); + + gen_load_mxu_gpr(t1, XRa); + tcg_gen_extract_tl(t0, t1, 0, 16); + tcg_gen_extract_tl(t1, t1, 16, 16); + + switch (aptn2) { + case MXU_APTN2_AA: + tcg_gen_add_tl(t3, t1, t3); + tcg_gen_add_tl(t2, t0, t2); + break; + case MXU_APTN2_AS: + tcg_gen_add_tl(t3, t1, t3); + tcg_gen_sub_tl(t2, t0, t2); + break; + case MXU_APTN2_SA: + tcg_gen_sub_tl(t3, t1, t3); + tcg_gen_add_tl(t2, t0, t2); + break; + case MXU_APTN2_SS: + tcg_gen_sub_tl(t3, t1, t3); + tcg_gen_sub_tl(t2, t0, t2); + break; + } + + tcg_gen_andi_tl(t2, t2, 0xffff); + tcg_gen_shli_tl(t3, t3, 16); + tcg_gen_or_tl(mxu_gpr[XRd - 1], t3, t2); +} + /* * Q8MUL XRa, XRb, XRc, XRd - Parallel unsigned 8 bit pattern multiply * Q8MULSU XRa, XRb, XRc, XRd - Parallel signed 8 bit pattern multiply @@ -2761,6 +2840,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_D16MACF: gen_mxu_d16mac(ctx, true, true); break; + case OPC_MXU_D16MADL: + gen_mxu_d16madl(ctx); + break; case OPC_MXU_D16MACE: gen_mxu_d16mac(ctx, true, false); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230417; cv=none; d=zohomail.com; s=zohoarc; b=fjFkNyZHuSuI8jTm8sQm/Wv3IxgCV/x/WWspa7E3OMi7XCAd3zGdBDFfzcLL61hM3gYQrG0xz76dVQl9Nlo6WChWHwvQOB0R6Q1/3zAXAB5ZNAff/T8R2cn1Y/PKcR00AUvXdyScMH4QPWkeJ0ES4zI+adZjFDqIEwtFlL63AmU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230417; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=h+S8dhmOgf4fP0vwFSn+XfASHgw2tPEqLZSr7jov0PI=; b=eEHjoaZDF7bVLsSvjry9n/ww+rgJUK69ZIDx4KwKzCRCg/zi7r0XDVO8a1H5SGp77ivVlqpRocvKBMBBkW9eb/YS5SQoefkfiqXH8GEOeU6sw+qdxxl6ngmPsCmzZUctSiQKzV2CvVaqMx9R2jr7rxIj7wHI7HeaNTrRmPrX3v8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230417452731.4417696283593; Thu, 8 Jun 2023 06:20:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWg-0003Qs-OO; Thu, 08 Jun 2023 09:18:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6I-0002Js-FB for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:42 -0400 Received: from mail-lf1-x12b.google.com ([2a00:1450:4864:20::12b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6G-0006Vk-OB for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:42 -0400 Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-4f649db9b25so588734e87.0 for ; Thu, 08 Jun 2023 03:42:40 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220959; x=1688812959; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=h+S8dhmOgf4fP0vwFSn+XfASHgw2tPEqLZSr7jov0PI=; b=o/Lpe2enwtz8gMzb9YzYhGsc/rshKBAqcAYBWe14kaQG8/OHNEdOdQTzdnD1DXS4DZ S46hSsg7nQPF2gJ2cmAx2ikrRVlHqARl24MF85EweAtsLu3pi7ydSaOZx7EPaRe1KPRq EwL31YLslGOq8bKyRh/J+WrhID23E02sVjHVPcJnF78SGJkThvT9D94MiTTKu03faLIC QDA9KB7i7rjgWDrwOvhc9+lmDreynMQz3O5c/sMjhE5NPRP2ByquRxAQa5bwxDOGjWKW fp4r6SALY4eca2aPgxrBjToI68CkBtTjirXbYscvl5MSeEOSdm3C30NfV4hlpKoKXkuj O0xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220959; x=1688812959; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=h+S8dhmOgf4fP0vwFSn+XfASHgw2tPEqLZSr7jov0PI=; b=gbhxGIP2dYGRfFtCkVP4MNrqiTmxL58wfyFUSdLlJT8U5xRUDo+xbofAX99GNug9Jm EPSPMLatmdgov/JjYyndNRWjwHhbh0ZDaaBpYV9p4bpveWMfKSQh70k7V/mQiGkchYqO VhQ1I89x43NKS+xrIvDS1vy8Ys5WNcBsCfSLCOEjmGqhKUj4TPsGm4DJMFmYoONU9rNt pUuj5+uYZZ5X3F/QENt52WGAkWqMhR+GV8MU2FNjqCiLAnCsFPzlfkMnSujoGpOZ6jBs X9Kvkzi8p8EUCN1em5/LFEVVZXFlnuLxxKrd8j/LKmtTIfztNERIX4kFkjG01B78HR74 rhlw== X-Gm-Message-State: AC+VfDxv9QvIzWwtJugiTIR3XgG5oWln6FxjtwePitMvC5qTcYQubvzX cWb2KcWSTog0xJKclYeBGLdgzs9wABA= X-Google-Smtp-Source: ACHHUZ7B+ekk9uTuYieN2VLzXuIgqQxuHlJ2RtW4u5JSIwHKZ1rw8iHRenGTNXGbXWkpVBWxMHvgkw== X-Received: by 2002:ac2:53a1:0:b0:4f6:2afd:c17 with SMTP id j1-20020ac253a1000000b004f62afd0c17mr3586845lfh.4.1686220958803; Thu, 08 Jun 2023 03:42:38 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 13/33] target/mips: Add emulation of MXU S16MAD instruction Date: Thu, 8 Jun 2023 13:42:02 +0300 Message-Id: <20230608104222.1520143-14-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::12b; envelope-from=lis8215@gmail.com; helo=mail-lf1-x12b.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230419074100001 Content-Type: text/plain; charset="utf-8" The instruction is similar to multiply and accumulate but works with MXU registers set. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 65 +++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 85f3e47ee3..c1a38d7a0d 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -367,6 +367,7 @@ enum { OPC_MXU_D16MAC =3D 0x0A, OPC_MXU_D16MACF =3D 0x0B, OPC_MXU_D16MADL =3D 0x0C, + OPC_MXU_S16MAD =3D 0x0D, OPC_MXU_D16MACE =3D 0x0F, OPC_MXU__POOL04 =3D 0x10, OPC_MXU__POOL05 =3D 0x11, @@ -980,6 +981,67 @@ static void gen_mxu_d16madl(DisasContext *ctx) tcg_gen_or_tl(mxu_gpr[XRd - 1], t3, t2); } =20 +/* + * S16MAD XRa, XRb, XRc, XRd, aptn2, optn2 - Single packed + * signed 16 bit pattern multiply and 32-bit add/subtract. + */ +static void gen_mxu_s16mad(DisasContext *ctx) +{ + TCGv t0, t1; + uint32_t XRa, XRb, XRc, XRd, optn2, aptn1, pad; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + + XRa =3D extract32(ctx->opcode, 6, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRd =3D extract32(ctx->opcode, 18, 4); + optn2 =3D extract32(ctx->opcode, 22, 2); + aptn1 =3D extract32(ctx->opcode, 24, 1); + pad =3D extract32(ctx->opcode, 25, 1); + + if (pad) { + /* FIXME check if it influence the result */ + } + + gen_load_mxu_gpr(t0, XRb); + gen_load_mxu_gpr(t1, XRc); + + switch (optn2) { + case MXU_OPTN2_WW: /* XRB.H*XRC.H */ + tcg_gen_sextract_tl(t0, t0, 16, 16); + tcg_gen_sextract_tl(t1, t1, 16, 16); + break; + case MXU_OPTN2_LW: /* XRB.L*XRC.L */ + tcg_gen_sextract_tl(t0, t0, 0, 16); + tcg_gen_sextract_tl(t1, t1, 0, 16); + break; + case MXU_OPTN2_HW: /* XRB.H*XRC.L */ + tcg_gen_sextract_tl(t0, t0, 16, 16); + tcg_gen_sextract_tl(t1, t1, 0, 16); + break; + case MXU_OPTN2_XW: /* XRB.L*XRC.H */ + tcg_gen_sextract_tl(t0, t0, 0, 16); + tcg_gen_sextract_tl(t1, t1, 16, 16); + break; + } + tcg_gen_mul_tl(t0, t0, t1); + + gen_load_mxu_gpr(t1, XRa); + + switch (aptn1) { + case MXU_APTN1_A: + tcg_gen_add_tl(t1, t1, t0); + break; + case MXU_APTN1_S: + tcg_gen_sub_tl(t1, t1, t0); + break; + } + + gen_store_mxu_gpr(t1, XRd); +} + /* * Q8MUL XRa, XRb, XRc, XRd - Parallel unsigned 8 bit pattern multiply * Q8MULSU XRa, XRb, XRc, XRd - Parallel signed 8 bit pattern multiply @@ -2843,6 +2905,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_D16MADL: gen_mxu_d16madl(ctx); break; + case OPC_MXU_S16MAD: + gen_mxu_s16mad(ctx); + break; case OPC_MXU_D16MACE: gen_mxu_d16mac(ctx, true, false); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230386; cv=none; d=zohomail.com; s=zohoarc; b=XQrg5sWjBRSts/SPSeVe9QzTrXKwCCkQIJ1Ct5pNtDJM/rSs864TwIalciut6axSM6gIDvRuIv7D5Ga3ZCYYgrxBghw68TOlpPAxy8vk59Z8jTBMTG5yJ6bbom0pPe7/etTAj17DD4WnM9g9uKyXd4f0jSFZOK9y/eeOV0nkWVo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230386; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=rgMtj4IeQdJKKus9yQaWaspRFTecj+2QYeHTVJzlJTc=; b=fX7hbZhu+BbtgxnEns7oK0FBfubCh7nCMlsPQaTk/QTXTtfVpYSImlYB8qK462OL5j4i80mqqQzzMIXUhWt3oPt4S7vChoJteHm3po239c9Nyw1wPt/4sWsbeT2zQQhmMFKKJedhdN0szUehSYHW4Oihv8dSUTeQ6728PSpRFyA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230386383381.64972210185954; Thu, 8 Jun 2023 06:19:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FX0-0003pz-2D; Thu, 08 Jun 2023 09:18:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6J-0002Kg-IA for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:43 -0400 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6H-0006W0-MZ for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:43 -0400 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-4f620583bc2so558055e87.1 for ; Thu, 08 Jun 2023 03:42:41 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220960; x=1688812960; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rgMtj4IeQdJKKus9yQaWaspRFTecj+2QYeHTVJzlJTc=; b=ETAQlxtGWMleWlMXRf87icFbHfzanaxp6cDIeaETva/xATFXAD6YUUz+vzrMKF4ppC +Epoops3gpHOIr/jr92LyzLMW5fhzO+oi8a1BnAyfyVWKHnmAt51yTTN6DjAIaFJgwMW raPAwnGjJO7Re9ViM+KgbJ+K05dD6lSpIqfLtHJUTGRToorb6/PLHn8unoK7B7kUDW8k OVXbEd+JRI2sSwP2Yvm1I5Q1rNiO7ingFWeuajMS1TgOc3nqSIELv2PlmnzOyURsQ1P9 Z3f0U8hiTzo904SXwPnP0ydq4iQpBv3djPvNuklvfzQSMLsXa4RVp1jnCIP6sSZrd/iE IlQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220960; x=1688812960; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rgMtj4IeQdJKKus9yQaWaspRFTecj+2QYeHTVJzlJTc=; b=NXbrvY5UIN6FBxuLTtZj8S0N4YQknDbmnX2cUoXxTJYxtzP/29oD1l3ShY2n4M7gfD FieTWF2euqk2PxYQEozHTOlUf9B92NVlf71t+aQ1iSk72j9m7UIQ6A28ibXHAgQYsRam i5f/iRjuKWoxsoIPh+9W+1/yFnx4W99WSVz56y+j/fmU/wmZBu42M5sy/hBtOI81DhrQ IHL4FDtoS37hI9CCPuBf5Z+NX1u7lVr7jiQOO9l1TeHPcssmdB7FlVXu59B4ghVz0iLb LNRjuVmHndxdhZIGFeYIrLbWp0l1TQEx3QSUI1M+VRK6MOlF9nyLVnVPEUPxXhML8fi4 YTSA== X-Gm-Message-State: AC+VfDxwPCwaTPgKyzbDJrm30yyAtqo/oOaCK62aCL1GBLNNnmwUWKgn HZ4M4+NFOEN7E7MxJPdQQ4stTgvGE8s= X-Google-Smtp-Source: ACHHUZ4uFj40ekofuoxkYvCiPWdTz5QKYaMlEdx3vI79N3JsTmXHst6QvOlH7AruYu3lIKm4lR4sCw== X-Received: by 2002:ac2:51b1:0:b0:4f6:21db:e584 with SMTP id f17-20020ac251b1000000b004f621dbe584mr2902911lfk.0.1686220959726; Thu, 08 Jun 2023 03:42:39 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 14/33] target/mips: Add emulation of MXU Q16ADD instruction Date: Thu, 8 Jun 2023 13:42:03 +0300 Message-Id: <20230608104222.1520143-15-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::12c; envelope-from=lis8215@gmail.com; helo=mail-lf1-x12c.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230386852100001 Content-Type: text/plain; charset="utf-8" The instruction adds/subtracts four 16-bit packed in XRb and XRc. Placing packed 16-bit results in XRa and XRd. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 89 +++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index c1a38d7a0d..5596d86234 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -368,6 +368,7 @@ enum { OPC_MXU_D16MACF =3D 0x0B, OPC_MXU_D16MADL =3D 0x0C, OPC_MXU_S16MAD =3D 0x0D, + OPC_MXU_Q16ADD =3D 0x0E, OPC_MXU_D16MACE =3D 0x0F, OPC_MXU__POOL04 =3D 0x10, OPC_MXU__POOL05 =3D 0x11, @@ -2163,6 +2164,91 @@ static void gen_mxu_Q8ADD(DisasContext *ctx) } } =20 +/* + * Q16ADD XRa, XRb, XRc, XRd, aptn2, optn2 - Quad packed + * 16-bit pattern addition. + */ +static void gen_mxu_q16add(DisasContext *ctx) +{ + uint32_t aptn2, optn2, XRc, XRb, XRa, XRd; + + aptn2 =3D extract32(ctx->opcode, 24, 2); + optn2 =3D extract32(ctx->opcode, 22, 2); + XRd =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv t4 =3D tcg_temp_new(); + TCGv t5 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t1, XRb); + tcg_gen_extract_tl(t0, t1, 0, 16); + tcg_gen_extract_tl(t1, t1, 16, 16); + + gen_load_mxu_gpr(t3, XRc); + tcg_gen_extract_tl(t2, t3, 0, 16); + tcg_gen_extract_tl(t3, t3, 16, 16); + + switch (optn2) { + case MXU_OPTN2_WW: /* XRB.H+XRC.H =3D=3D lop, XRB.L+XRC.L =3D=3D rop */ + tcg_gen_mov_tl(t4, t1); + tcg_gen_mov_tl(t5, t0); + break; + case MXU_OPTN2_LW: /* XRB.L+XRC.H =3D=3D lop, XRB.L+XRC.L =3D=3D rop */ + tcg_gen_mov_tl(t4, t0); + tcg_gen_mov_tl(t5, t0); + break; + case MXU_OPTN2_HW: /* XRB.H+XRC.H =3D=3D lop, XRB.H+XRC.L =3D=3D rop */ + tcg_gen_mov_tl(t4, t1); + tcg_gen_mov_tl(t5, t1); + break; + case MXU_OPTN2_XW: /* XRB.L+XRC.H =3D=3D lop, XRB.H+XRC.L =3D=3D rop */ + tcg_gen_mov_tl(t4, t0); + tcg_gen_mov_tl(t5, t1); + break; + } + + switch (aptn2) { + case MXU_APTN2_AA: /* lop +, rop + */ + tcg_gen_add_tl(t0, t4, t3); + tcg_gen_add_tl(t1, t5, t2); + tcg_gen_add_tl(t4, t4, t3); + tcg_gen_add_tl(t5, t5, t2); + break; + case MXU_APTN2_AS: /* lop +, rop + */ + tcg_gen_sub_tl(t0, t4, t3); + tcg_gen_sub_tl(t1, t5, t2); + tcg_gen_add_tl(t4, t4, t3); + tcg_gen_add_tl(t5, t5, t2); + break; + case MXU_APTN2_SA: /* lop +, rop + */ + tcg_gen_add_tl(t0, t4, t3); + tcg_gen_add_tl(t1, t5, t2); + tcg_gen_sub_tl(t4, t4, t3); + tcg_gen_sub_tl(t5, t5, t2); + break; + case MXU_APTN2_SS: /* lop +, rop + */ + tcg_gen_sub_tl(t0, t4, t3); + tcg_gen_sub_tl(t1, t5, t2); + tcg_gen_sub_tl(t4, t4, t3); + tcg_gen_sub_tl(t5, t5, t2); + break; + } + + tcg_gen_shli_tl(t0, t0, 16); + tcg_gen_extract_tl(t1, t1, 0, 16); + tcg_gen_shli_tl(t4, t4, 16); + tcg_gen_extract_tl(t5, t5, 0, 16); + + tcg_gen_or_tl(mxu_gpr[XRa - 1], t4, t5); + tcg_gen_or_tl(mxu_gpr[XRd - 1], t0, t1); +} + /* * MXU instruction category: Miscellaneous * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2908,6 +2994,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_S16MAD: gen_mxu_s16mad(ctx); break; + case OPC_MXU_Q16ADD: + gen_mxu_q16add(ctx); + break; case OPC_MXU_D16MACE: gen_mxu_d16mac(ctx, true, false); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230463; cv=none; d=zohomail.com; s=zohoarc; b=L3p+iHFm+Rq5CvFlRwKWEmqjhPlb0Vr3i+EYVxwrrtuUd4wO5rQynEBjSbjEmBAm59mvN/CW8i2li1wLPNG6axadxvCdm2rqJ67l+fDzFWgJIIR9G/fBzWPOnW5hCcwvOl5MmE96+nIY6veDTKxVq45dCju8Z6P8wNjjrTjwbz0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230463; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=t3uE4GaEsW/x50YRMMv7uHN9X9c9wJxLCodd7Qq/a4k=; b=dNjxSNYjpm5MDkFgQOYbCS0QWOtaDPJ6rBdUfM+V2ZKIf3M1w1I2X+oQW2BT3Va4eoGN+374XV51cSNEAEdkYkyiAd6FVI4y0CPkwO17TFcRZzpfq53z1GDMOzEpOKdRBuCsax5Jk8JVVZg0yKWBab06onrXwsWLlxS1YTPadiQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230463653777.5347282639297; Thu, 8 Jun 2023 06:21:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWX-0003Mk-Nu; Thu, 08 Jun 2023 09:17:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6K-0002L4-CK for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:44 -0400 Received: from mail-lf1-x135.google.com ([2a00:1450:4864:20::135]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6I-0006WI-Px for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:44 -0400 Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-4effb818c37so562529e87.3 for ; Thu, 08 Jun 2023 03:42:42 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220961; x=1688812961; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=t3uE4GaEsW/x50YRMMv7uHN9X9c9wJxLCodd7Qq/a4k=; b=PPtJrrgnlDXCTgZ5p6UOS6Kl0y8XvauVx/zdf4KcUn24Nx7CyjdlVKlFGXiacyeAoR w+zD44fx1njnHVHfGRmTqkvjCZGqB8rNO+BxUhuBbWjNOIhozBteNAXmFPZIFZcMts+/ 4IHaCbzFczcQ/wmqozuRGUKTnZkGeCHzhpltyBydCW41jgXF60Cm6iRM7CeDxQH9X3On k5WUsZPOqqElPTm3mRJmPtWslb5LIF61SJy5DUa8IvE+EIt8g99CB4BRGdqyriesTCgj Y1wDuJtkhAps6e0ysdg4lwM72TTuVz4YhkjEfEtvAuOMnur+604DDJTk/Y/0oYcj2Gbr w0QQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220961; x=1688812961; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=t3uE4GaEsW/x50YRMMv7uHN9X9c9wJxLCodd7Qq/a4k=; b=PiCwBnSM/VCHIWWgERmF6dufOxqWokzi/PNVa9sgSmLoHKtEVkEXjOlMvHYJ+qtY+r ZmjCh3uvP9i26cZCAHwxrmEJS9oBNCOYlnfetk/eDPLNCGtNXpo+GmRGXw1Wp9lvx0S6 rxsISBtoKpTTz4Cp8E8IADR1WhpHKJaGxb8dIrV4HK/qmpxc+Vkq4wRhtdrDoCb3fVWd eE1cWvVTrFygbtcE0MCdzmR3KIi5RukF0RxRgKUZA8dmMhZYbJP9NFn9hEQ5OLtGiaso 5wIuayhJ0sYhtxd6ScWKbzmKxY6NeJF6e1lRl6+/40C0Qzss0StEkMHYvXTEdGNOxh9G 0mnA== X-Gm-Message-State: AC+VfDxHX2U7AS4fK6PUxR3vF+MDwrYd+axhMCX/3kItncOy390Puwjl Vgp/kK3uT30BlMIq7ZalhWRdg7GGmfQ= X-Google-Smtp-Source: ACHHUZ5EeqQ/qYji1q2KXxnYRHLAzOO8ZEbBash7rVT/BkR6+ZZ7uELRo/ZGeVJ3mxzhXSuiuOX/Vg== X-Received: by 2002:ac2:510b:0:b0:4dc:807a:d144 with SMTP id q11-20020ac2510b000000b004dc807ad144mr2908319lfb.39.1686220960744; Thu, 08 Jun 2023 03:42:40 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 15/33] target/mips: Add emulation of MXU D32ADD instruction Date: Thu, 8 Jun 2023 13:42:04 +0300 Message-Id: <20230608104222.1520143-16-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::135; envelope-from=lis8215@gmail.com; helo=mail-lf1-x135.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230465292100005 Content-Type: text/plain; charset="utf-8" The instruction adds/subtracts two 32-bit values in XRb and XRc. Placing results in XRa and XRd and updates carry bits for each path in the MXU control register. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 64 +++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 5596d86234..03be624d86 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -378,6 +378,7 @@ enum { OPC_MXU__POOL09 =3D 0x15, OPC_MXU__POOL10 =3D 0x16, OPC_MXU__POOL11 =3D 0x17, + OPC_MXU_D32ADD =3D 0x18, OPC_MXU_S8LDD =3D 0x22, OPC_MXU__POOL16 =3D 0x27, OPC_MXU__POOL17 =3D 0x28, @@ -2249,6 +2250,66 @@ static void gen_mxu_q16add(DisasContext *ctx) tcg_gen_or_tl(mxu_gpr[XRd - 1], t0, t1); } =20 +/* + * D32ADD XRa, XRb, XRc, XRd, aptn2 - Double + * 32 bit pattern addition/subtraction. + */ +static void gen_mxu_d32add(DisasContext *ctx) +{ + uint32_t aptn2, pad, XRc, XRb, XRa, XRd; + + aptn2 =3D extract32(ctx->opcode, 24, 2); + pad =3D extract32(ctx->opcode, 22, 2); + XRd =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv carry =3D tcg_temp_new(); + TCGv cr =3D tcg_temp_new(); + + if (unlikely(pad !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0 && XRd =3D=3D 0)) { + /* destinations are zero register -> do nothing */ + } else { + /* common case */ + gen_load_mxu_gpr(t0, XRb); + gen_load_mxu_gpr(t1, XRc); + gen_load_mxu_cr(cr); + if (XRa !=3D 0) { + if (aptn2 & 2) { + tcg_gen_sub_i32(t2, t0, t1); + tcg_gen_setcond_tl(TCG_COND_GTU, carry, t0, t1); + } else { + tcg_gen_add_i32(t2, t0, t1); + tcg_gen_setcond_tl(TCG_COND_GTU, carry, t0, t2); + } + tcg_gen_andi_tl(cr, cr, 0x7fffffff); + tcg_gen_shli_tl(carry, carry, 31); + tcg_gen_or_tl(cr, cr, carry); + gen_store_mxu_gpr(t2, XRa); + } + if (XRd !=3D 0) { + if (aptn2 & 1) { + tcg_gen_sub_i32(t2, t0, t1); + tcg_gen_setcond_tl(TCG_COND_GTU, carry, t0, t1); + } else { + tcg_gen_add_i32(t2, t0, t1); + tcg_gen_setcond_tl(TCG_COND_GTU, carry, t0, t2); + } + tcg_gen_andi_tl(cr, cr, 0xbfffffff); + tcg_gen_shli_tl(carry, carry, 30); + tcg_gen_or_tl(cr, cr, carry); + gen_store_mxu_gpr(t2, XRd); + } + gen_store_mxu_cr(cr); + } +} + /* * MXU instruction category: Miscellaneous * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -3033,6 +3094,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU__POOL11: decode_opc_mxu__pool11(ctx); break; + case OPC_MXU_D32ADD: + gen_mxu_d32add(ctx); + break; case OPC_MXU_S8LDD: gen_mxu_s8ldd(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230567; cv=none; d=zohomail.com; s=zohoarc; b=cJPGDrfP5klkpvRhYLINXt6K5IGZAlqc+9eXblr8HQUx2JPzvLFN8JgnVYM8BLco5Nk4GmjzGhUEAKrmwtw197BQPtLUrXk8JOXKFScGs9wyAmWE+lv+7VONSfCaDRe7zv2stmG93Im664efk/8vVs5Q++SoiQTNqEB83mDzoAg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230567; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ocX6egucweClanHXPfUXGJgty6BQ9b/kn/b9p27gG9o=; b=DWCBDDZ1C5jA+2tkw9bzZGghBMrruzFmfwHRnCFpZPVPCDHZrGqj6Z209kROe3oDdTSADI8yK2Qw4rv538Zqw24DYYXeZbJy1o5QIrRWipO5EsS4e3j+jFhb1O+syy1lTE5kr/XLusqdtfl3fPRWImBJ3aqCPfXUoLLH8aE4GZ8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230567907935.0652457081156; Thu, 8 Jun 2023 06:22:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWV-0003Mb-EP; Thu, 08 Jun 2023 09:17:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6L-0002LK-Ou for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:45 -0400 Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6K-0006Wu-1W for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:45 -0400 Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-4f4b2bc1565so569966e87.2 for ; Thu, 08 Jun 2023 03:42:43 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220962; x=1688812962; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ocX6egucweClanHXPfUXGJgty6BQ9b/kn/b9p27gG9o=; b=rKrwVdUJVCiTMyMRax6FWokuutYxrlcSI5kdaBl7CRms+h/EjWBQ6+gsdTP4F5UyuE xy2nTQLYfpZywtXdfD2TKmQif0q6isZ5DkF8781JfoQUo1q/qURTIitryPwqGzWkNI6f fRJ2WPK8SIg6pnYItvQ/0T1HXh694aHwsGrTEI8q70OiTg64bMruff89jWRtFqHn8hiS lulic2k1+aJQt4YimQPg07yysc5iwcPKdXhRCISnXyU3M63/6I/gmlQ4dzBua8Bu6ZYO UHIIoKP1NWXE0TRuSEwasM83vQFCS2QC1v7zI8oTnpkfjq5cGHjT+aINmgqZjWzBqRr2 833w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220962; x=1688812962; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ocX6egucweClanHXPfUXGJgty6BQ9b/kn/b9p27gG9o=; b=XqoHZWGo09zKteuMa9Sf5TCM36WbJe11FOD0Fqy3nebGzolweiZoyBzqli9HCp9pMm O/PJe5QeBdI72JXIBpDla/lttEeESPDIpItN+u7uescJGfl/hYR0Y+aL3cqP8skWpOkQ y7gF3lqvtxXetLpftf7MNuvMorUhd4jibfvNNp7qPoaHEQ9r99YSQga+cRNVxzq95Xwt KIcQX6XW/x1/IF9uGbEOueIaOJ2fmtngWO4jtchNgtk7GTOvFFgE1gAgFptfTZYpvQIO utxhHI3c6iN0Z9rGltsQS5rfT+mh9J4yLie48xPTZhNG/434qVT08fbRCQ/pr1SLOrVZ 9HIA== X-Gm-Message-State: AC+VfDxbF3N0wvPEtuMcQecHLyfALdkTSBrtgnObQIW6eknDI4vDhxcH zzQC5cvhE4K2QiJzar1PQs1DdR5yz/k= X-Google-Smtp-Source: ACHHUZ5imLwg7/tvftN1ny4ieTLJ3jQgtun1p8FEL01qGoAt1hK/Qsj3iH8qJGS6Wxb3kST8MFGymA== X-Received: by 2002:a19:4f0c:0:b0:4f6:4bf6:59a1 with SMTP id d12-20020a194f0c000000b004f64bf659a1mr1210820lfb.34.1686220961752; Thu, 08 Jun 2023 03:42:41 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 16/33] target/mips: Add emulation of MXU D32ACC D32ACCM D32ASUM instructions Date: Thu, 8 Jun 2023 13:42:05 +0300 Message-Id: <20230608104222.1520143-17-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::12d; envelope-from=lis8215@gmail.com; helo=mail-lf1-x12d.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230569951100003 Content-Type: text/plain; charset="utf-8" These instructions are all dual 32-bit addition/subtraction in various combinations. The instructions are grouped in pool12, see the opcode organization in the file. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 160 ++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 03be624d86..56c894f4c7 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -379,6 +379,7 @@ enum { OPC_MXU__POOL10 =3D 0x16, OPC_MXU__POOL11 =3D 0x17, OPC_MXU_D32ADD =3D 0x18, + OPC_MXU__POOL12 =3D 0x19, OPC_MXU_S8LDD =3D 0x22, OPC_MXU__POOL16 =3D 0x27, OPC_MXU__POOL17 =3D 0x28, @@ -441,6 +442,15 @@ enum { OPC_MXU_S32LDSTR =3D 0x01, }; =20 +/* + * MXU pool 12 + */ +enum { + OPC_MXU_D32ACC =3D 0x00, + OPC_MXU_D32ACCM =3D 0x01, + OPC_MXU_D32ASUM =3D 0x02, +}; + /* * MXU pool 16 */ @@ -2310,6 +2320,132 @@ static void gen_mxu_d32add(DisasContext *ctx) } } =20 +/* + * D32ACC XRa, XRb, XRc, XRd, aptn2 - Double + * 32 bit pattern addition/subtraction and accumulate. + */ +static void gen_mxu_d32acc(DisasContext *ctx) +{ + uint32_t aptn2, XRc, XRb, XRa, XRd; + + aptn2 =3D extract32(ctx->opcode, 24, 2); + XRd =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + + if (unlikely(XRa =3D=3D 0 && XRd =3D=3D 0)) { + /* destinations are zero register -> do nothing */ + } else { + /* common case */ + gen_load_mxu_gpr(t0, XRb); + gen_load_mxu_gpr(t1, XRc); + if (XRa !=3D 0) { + if (aptn2 & 2) { + tcg_gen_sub_tl(t2, t0, t1); + } else { + tcg_gen_add_tl(t2, t0, t1); + } + tcg_gen_add_tl(mxu_gpr[XRa - 1], mxu_gpr[XRa - 1], t2); + } + if (XRd !=3D 0) { + if (aptn2 & 1) { + tcg_gen_sub_tl(t2, t0, t1); + } else { + tcg_gen_add_tl(t2, t0, t1); + } + tcg_gen_add_tl(mxu_gpr[XRd - 1], mxu_gpr[XRd - 1], t2); + } + } +} + +/* + * D32ACCM XRa, XRb, XRc, XRd, aptn2 - Double + * 32 bit pattern addition/subtraction and accumulate. + */ +static void gen_mxu_d32accm(DisasContext *ctx) +{ + uint32_t aptn2, XRc, XRb, XRa, XRd; + + aptn2 =3D extract32(ctx->opcode, 24, 2); + XRd =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + + if (unlikely(XRa =3D=3D 0 && XRd =3D=3D 0)) { + /* destinations are zero register -> do nothing */ + } else { + /* common case */ + gen_load_mxu_gpr(t0, XRb); + gen_load_mxu_gpr(t1, XRc); + if (XRa !=3D 0) { + tcg_gen_add_tl(t2, t0, t1); + if (aptn2 & 2) { + tcg_gen_sub_tl(mxu_gpr[XRa - 1], mxu_gpr[XRa - 1], t2); + } else { + tcg_gen_add_tl(mxu_gpr[XRa - 1], mxu_gpr[XRa - 1], t2); + } + } + if (XRd !=3D 0) { + tcg_gen_sub_tl(t2, t0, t1); + if (aptn2 & 1) { + tcg_gen_sub_tl(mxu_gpr[XRd - 1], mxu_gpr[XRd - 1], t2); + } else { + tcg_gen_add_tl(mxu_gpr[XRd - 1], mxu_gpr[XRd - 1], t2); + } + } + } +} + +/* + * D32ASUM XRa, XRb, XRc, XRd, aptn2 - Double + * 32 bit pattern addition/subtraction. + */ +static void gen_mxu_d32asum(DisasContext *ctx) +{ + uint32_t aptn2, XRc, XRb, XRa, XRd; + + aptn2 =3D extract32(ctx->opcode, 24, 2); + XRd =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + + if (unlikely(XRa =3D=3D 0 && XRd =3D=3D 0)) { + /* destinations are zero register -> do nothing */ + } else { + /* common case */ + gen_load_mxu_gpr(t0, XRb); + gen_load_mxu_gpr(t1, XRc); + if (XRa !=3D 0) { + if (aptn2 & 2) { + tcg_gen_sub_tl(mxu_gpr[XRa - 1], mxu_gpr[XRa - 1], t0); + } else { + tcg_gen_add_tl(mxu_gpr[XRa - 1], mxu_gpr[XRa - 1], t0); + } + } + if (XRd !=3D 0) { + if (aptn2 & 1) { + tcg_gen_sub_tl(mxu_gpr[XRd - 1], mxu_gpr[XRd - 1], t1); + } else { + tcg_gen_add_tl(mxu_gpr[XRd - 1], mxu_gpr[XRd - 1], t1); + } + } + } +} + /* * MXU instruction category: Miscellaneous * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -2932,6 +3068,27 @@ static void decode_opc_mxu__pool11(DisasContext *ctx) } } =20 +static void decode_opc_mxu__pool12(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 22, 2); + + switch (opcode) { + case OPC_MXU_D32ACC: + gen_mxu_d32acc(ctx); + break; + case OPC_MXU_D32ACCM: + gen_mxu_d32accm(ctx); + break; + case OPC_MXU_D32ASUM: + gen_mxu_d32asum(ctx); + break; + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + static void decode_opc_mxu__pool16(DisasContext *ctx) { uint32_t opcode =3D extract32(ctx->opcode, 18, 3); @@ -3097,6 +3254,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_D32ADD: gen_mxu_d32add(ctx); break; + case OPC_MXU__POOL12: + decode_opc_mxu__pool12(ctx); + break; case OPC_MXU_S8LDD: gen_mxu_s8ldd(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230433; cv=none; d=zohomail.com; s=zohoarc; b=Lg6Kuf17UhIfB5OaEy0TKjqygFNzKQ8w/X3DcLA98qCCRTj6vcv+OR0alFbbAnesPlxlIxATOopCaLA/vXN801QKM7gk186Xh9S/aiNbSONS0ov5OHYyzIsnXQRKWx5IAMsCbDS/msnsBe+R6+3HPOKBLIY1Wl1umfZer3kgR/E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230433; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7HdtqCpfs4XvWuoJWtomEMbaUt+zWKnppoDSDVHuEQE=; b=WQFsq3w1cp1BHBVrDlzUktW92kCq4RuQ7RdMkbPSjkH/SNytT83F+txCE5Z4G6p2DngZEcioRxcx+PNsrC31SMscPdJM7VXrspcc7zGX3AH39a5cwoVjs5XQ9M+R3pw2kFdgaElSQsmKvJtJQLLWw/G+7tTnIJEfZ8qJOJV/GBI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230433690403.02791635739686; Thu, 8 Jun 2023 06:20:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FXB-00048N-Ci; Thu, 08 Jun 2023 09:18:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6M-0002Ln-ME for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:46 -0400 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6L-0006XP-3x for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:46 -0400 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-4f654d713c0so190507e87.3 for ; Thu, 08 Jun 2023 03:42:44 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220963; x=1688812963; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7HdtqCpfs4XvWuoJWtomEMbaUt+zWKnppoDSDVHuEQE=; b=OxdZaEbfrrzTIkLZzgBVme0Naw3ocsiQWJLXQsxz6PRL8kcLo6JnJ7BI45rOqJwPlw Yj4fT5seJ48193xUlxpgJ6fyd8bWwkz0FNuPzQPXFT5yvPNB6NBmHNp9++OnVQJjARBo ZYldRczc4/iI2gFukxYDj4PKjYCewVa/yylALiJ5lylAtwHV9chpgPUPrSPOi6UYVMCp fmKC3ozCzyFn3KFQj4H3W7/9uzAB7NfWdrWguLHCvW6YpvTXYBvl7AlNPZO8tdkx58lq 1zRuvdJ4Um1DrYnVB7jsi713OLevOQkeW/xFRC67F0zQxplUBwld4COI3rLQRF3r9FdR dCdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220963; x=1688812963; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7HdtqCpfs4XvWuoJWtomEMbaUt+zWKnppoDSDVHuEQE=; b=BuOmpYfu2qIVlO3zJbZJVwOouljTXMzvchjRX5m4txR9jyLxsGQ2Ss3yQxVDJPjjbE bbOCwDHliSKHQ9ATvoKkHPW0WeDOPqirYq42sOIccX75ldK5xvNTd8KavjqeV3EoQ58Y mWYYbx2KaJUDx1M8nEJApfYFCBaEe1Hr6IqUeyG+ml69S3xcAjjfVwW6PyYj6/uTJ8nw pGNkOjxzTL6tTqXJGy/r4Avd1GiJZg2u93rJwTbUjLhE9EE7OkumTSqqH/SsZ9AAuYuN 7UAQ/vomU7GibRGm/Zw5mJkdbMSK+dqMe/NJjZiIKim+lm2TSebvAMnD5+r1TTkORzi0 Ze6Q== X-Gm-Message-State: AC+VfDwOTD2zYWsrEJyhfdG5FO6FU+l7LdhjMul9R/pWwZLG+/1WoWQX wfvx17oOxt7WFdszI6R6474/ZPyeW1Y= X-Google-Smtp-Source: ACHHUZ74/uVG637g0OoUOv6385ef6laXZOoY82VlE2LDyqYsB2U02bEV1MR8KrASSF8wY7yzOrCkrQ== X-Received: by 2002:ac2:5ecf:0:b0:4e8:c81b:1a11 with SMTP id d15-20020ac25ecf000000b004e8c81b1a11mr3429196lfq.49.1686220963067; Thu, 08 Jun 2023 03:42:43 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 17/33] target/mips: Add emulation of MXU D32ADDC instruction Date: Thu, 8 Jun 2023 13:42:06 +0300 Message-Id: <20230608104222.1520143-18-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::12c; envelope-from=lis8215@gmail.com; helo=mail-lf1-x12c.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230435243100002 The instruction adds two 32-bit values with respect to corresponding carry flags in MXU_CR. XRa +=3D XRb + LeftCarry flag; XRd +=3D XRc + RightCarry flag; Suddenly, it doesn't modify carry flags as a result of addition. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 39 +++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 56c894f4c7..2b677407d5 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -270,7 +270,7 @@ * =E2=94=82 13..10 * =E2=94=9C=E2=94=80 010111 =E2=94=80 OPC_MXU__POOL11 =E2=94=80= =E2=94=AC=E2=94=80 0000 =E2=94=80 OPC_MXU_S32SDIV * =E2=94=82 =E2=94=94=E2=94=80 0001 = =E2=94=80 OPC_MXU_S32SDIVR - * =E2=94=9C=E2=94=80 011000 =E2=94=80 OPC_MXU_D32ADD + * =E2=94=9C=E2=94=80 011000 =E2=94=80 OPC_MXU_D32ADD (catches D= 32ADDC too) * =E2=94=82 23..22 * MXU =E2=94=9C=E2=94=80 011001 =E2=94=80 OPC_MXU__POOL12 =E2=94=80= =E2=94=AC=E2=94=80 00 =E2=94=80 OPC_MXU_D32ACC * opcodes =E2=94=80=E2=94=A4 =E2=94=9C=E2=94= =80 01 =E2=94=80 OPC_MXU_D32ACCM @@ -2262,14 +2262,17 @@ static void gen_mxu_q16add(DisasContext *ctx) =20 /* * D32ADD XRa, XRb, XRc, XRd, aptn2 - Double - * 32 bit pattern addition/subtraction. + * 32 bit pattern addition/subtraction, set carry. + * + * D32ADDC XRa, XRb, XRc, XRd, aptn2 - Double + * 32 bit pattern addition/subtraction with carry. */ static void gen_mxu_d32add(DisasContext *ctx) { - uint32_t aptn2, pad, XRc, XRb, XRa, XRd; + uint32_t aptn2, addc, XRc, XRb, XRa, XRd; =20 aptn2 =3D extract32(ctx->opcode, 24, 2); - pad =3D extract32(ctx->opcode, 22, 2); + addc =3D extract32(ctx->opcode, 22, 2); XRd =3D extract32(ctx->opcode, 18, 4); XRc =3D extract32(ctx->opcode, 14, 4); XRb =3D extract32(ctx->opcode, 10, 4); @@ -2278,15 +2281,37 @@ static void gen_mxu_d32add(DisasContext *ctx) TCGv t0 =3D tcg_temp_new(); TCGv t1 =3D tcg_temp_new(); TCGv t2 =3D tcg_temp_new(); - TCGv carry =3D tcg_temp_new(); TCGv cr =3D tcg_temp_new(); =20 - if (unlikely(pad !=3D 0)) { - /* opcode padding incorrect -> do nothing */ + if (unlikely(addc > 1)) { + /* opcode incorrect -> do nothing */ + } else if (addc =3D=3D 1) { + if (unlikely(XRa =3D=3D 0 && XRd =3D=3D 0)) { + /* destinations are zero register -> do nothing */ + } else { + /* FIXME ??? What if XRa =3D=3D XRd ??? */ + /* aptn2 is unused here */ + gen_load_mxu_gpr(t0, XRb); + gen_load_mxu_gpr(t1, XRc); + gen_load_mxu_cr(cr); + if (XRa !=3D 0) { + tcg_gen_extract_tl(t2, cr, 31, 1); + tcg_gen_add_tl(t0, t0, t2); + tcg_gen_add_tl(mxu_gpr[XRa - 1], mxu_gpr[XRa - 1], t0); + } + if (XRd !=3D 0) { + tcg_gen_extract_tl(t2, cr, 30, 1); + tcg_gen_add_tl(t1, t1, t2); + tcg_gen_add_tl(mxu_gpr[XRd - 1], mxu_gpr[XRd - 1], t1); + } + } } else if (unlikely(XRa =3D=3D 0 && XRd =3D=3D 0)) { /* destinations are zero register -> do nothing */ } else { /* common case */ + /* FIXME ??? What if XRa =3D=3D XRd ??? */ + TCGv carry =3D tcg_temp_new(); + gen_load_mxu_gpr(t0, XRb); gen_load_mxu_gpr(t1, XRc); gen_load_mxu_cr(cr); --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230490; cv=none; d=zohomail.com; s=zohoarc; b=gq1aqrhVQdGGlCFTAlDK1zrPgQQPLd2wSMg/Lr01O5xZjDgPUAfUAk1SS0ykSvhC267tWqbjBroAWuszmj6/igD/6DNikWMWBb7NCe9dduL8M5UJsbkqKrinkUaNnKv8TRvy4NTc7AmBIv1m5sVZSqsyLrOsggjyRZNtxDHzPQM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230490; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=3HTXM142XOt3xLh080EVxLsR+ehuZHjG8WrVgo2UK88=; b=BXqWJFjgZXNVoiL4MU9rM4Ll1nkcOImQ7eE/9WMtP4aWzTCYJCLg3yNVcJ89RF59lWZkq2AcXSH+7wO1uSR74Ji0frmfXr+BjZs5kj/Tc4akn7Rzp2dE6ymMfSZe1tfnkj/u6SLTfBQ5OmRh4P07SPXIycVMbC5i9LGVV/9JIck= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230490682348.7720832631255; Thu, 8 Jun 2023 06:21:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWi-0003RK-Ng; Thu, 08 Jun 2023 09:18:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6N-0002MB-QW for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:47 -0400 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6L-0006Xo-Sy for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:47 -0400 Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-4f4b2bc1565so569992e87.2 for ; Thu, 08 Jun 2023 03:42:45 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220964; x=1688812964; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3HTXM142XOt3xLh080EVxLsR+ehuZHjG8WrVgo2UK88=; b=QRK0FTom8niSj4tCbEiBmQskTW08/20u8Lucafx2FKUQ4IchWEVDWaNMw2hdOpix48 QEUHazT0/8WVl0HAn3K9XTyaImg3aeuKdkyEFLFabGoUXrwzsr0pAu6rfHE/RaAUFNWq 1ecMfNzRlECt/Rv6VeyW6k65orlNqG+zQjeSYd+0k+i+XYxaqtQWKDhYWoiGkSqPAJao ULeaPcEWdyhCPd1G0a02kZSGXbT9eOcDsYafolcTqdOn3xI1kH6wqZ40JOSBb7Rd1TFm Ea7Wxel8gVYmmpqg08PjDKx+Wvyqy8GTHYQUwqLdHjLfazPPJtRN4Ot78rhgjsL60wr3 vobw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220964; x=1688812964; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3HTXM142XOt3xLh080EVxLsR+ehuZHjG8WrVgo2UK88=; b=Zp7fncuIgnON3u7S793GCP8ltC8bFk9ucUs0PEtDFdkGo2gUOFxdsbeKv37ZVmOv94 tGsAfialB58F6cfuWoQElt313H9rTAPWTSHHCyrg/CvUs4K3Tk9vqCxQuIWQbwpkqwgV uBMvGz5Uzj89EM9oXt9VLtnFRFtqysN7nX1kv9G66U1M8Gs1MQ8Po5LDxMgCUeWy7Ehf OuMb2OeeMrwe507SNh9cg+fBVUxeCanl7m7NRyQ8X2HJ/UKday1vwN23JBd6nj7vrEbV F33/s7XbFLZn2t35c/o7m0Is3/idFJbwZBmx5HGirEnFw59YyjRaNhN02fdeSKBgICeK wzLw== X-Gm-Message-State: AC+VfDyL99mDJh2O8nPP/r6yYjxa1HG1y4j9nK180kviegzkCdJqOrtY v4C06e/7/rm3+4gu0XAPWfh+p/9If9o= X-Google-Smtp-Source: ACHHUZ44JYIifj0WpDWdUpGc63K578Z0sq/7iKRLANr2u2+aRYi0aAH6MH9Gaqd+3EtxYzX4+T+4iw== X-Received: by 2002:a19:ac43:0:b0:4f4:dd5d:f3e0 with SMTP id r3-20020a19ac43000000b004f4dd5df3e0mr3439816lfc.51.1686220964059; Thu, 08 Jun 2023 03:42:44 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 18/33] target/mips: Add emulation of MXU Q16ACC Q16ACCM D16ASUM instructions Date: Thu, 8 Jun 2023 13:42:07 +0300 Message-Id: <20230608104222.1520143-19-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::12f; envelope-from=lis8215@gmail.com; helo=mail-lf1-x12f.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230491438100001 These instructions are all dual 16-bit addition/subtraction in various combinations. The instructions are grouped in pool13, see the opcode organization in the file. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 228 +++++++++++++++++++++++++++++++- 1 file changed, 227 insertions(+), 1 deletion(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 2b677407d5..73edf24229 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -279,7 +279,7 @@ * =E2=94=82 23..22 * =E2=94=9C=E2=94=80 011011 =E2=94=80 OPC_MXU__POOL13 =E2=94=80= =E2=94=AC=E2=94=80 00 =E2=94=80 OPC_MXU_Q16ACC * =E2=94=82 =E2=94=9C=E2=94=80 01 =E2= =94=80 OPC_MXU_Q16ACCM - * =E2=94=82 =E2=94=94=E2=94=80 10 =E2= =94=80 OPC_MXU_Q16ASUM + * =E2=94=82 =E2=94=94=E2=94=80 10 =E2= =94=80 OPC_MXU_D16ASUM * =E2=94=82 * =E2=94=82 23..22 * =E2=94=9C=E2=94=80 011100 =E2=94=80 OPC_MXU__POOL14 =E2=94=80= =E2=94=AC=E2=94=80 00 =E2=94=80 OPC_MXU_Q8ADDE @@ -380,6 +380,7 @@ enum { OPC_MXU__POOL11 =3D 0x17, OPC_MXU_D32ADD =3D 0x18, OPC_MXU__POOL12 =3D 0x19, + OPC_MXU__POOL13 =3D 0x1B, OPC_MXU_S8LDD =3D 0x22, OPC_MXU__POOL16 =3D 0x27, OPC_MXU__POOL17 =3D 0x28, @@ -451,6 +452,15 @@ enum { OPC_MXU_D32ASUM =3D 0x02, }; =20 +/* + * MXU pool 13 + */ +enum { + OPC_MXU_Q16ACC =3D 0x00, + OPC_MXU_Q16ACCM =3D 0x01, + OPC_MXU_D16ASUM =3D 0x02, +}; + /* * MXU pool 16 */ @@ -2260,6 +2270,198 @@ static void gen_mxu_q16add(DisasContext *ctx) tcg_gen_or_tl(mxu_gpr[XRd - 1], t0, t1); } =20 +/* + * Q16ACC XRa, XRb, XRc, XRd, aptn2 - Quad packed + * 16-bit addition/subtraction with accumulate. + */ +static void gen_mxu_q16acc(DisasContext *ctx) +{ + uint32_t aptn2, XRc, XRb, XRa, XRd; + + aptn2 =3D extract32(ctx->opcode, 24, 2); + XRd =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv s3 =3D tcg_temp_new(); + TCGv s2 =3D tcg_temp_new(); + TCGv s1 =3D tcg_temp_new(); + TCGv s0 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t1, XRb); + tcg_gen_extract_tl(t0, t1, 0, 16); + tcg_gen_extract_tl(t1, t1, 16, 16); + + gen_load_mxu_gpr(t3, XRc); + tcg_gen_extract_tl(t2, t3, 0, 16); + tcg_gen_extract_tl(t3, t3, 16, 16); + + switch (aptn2) { + case MXU_APTN2_AA: /* lop +, rop + */ + tcg_gen_add_tl(s3, t1, t3); + tcg_gen_add_tl(s2, t0, t2); + tcg_gen_add_tl(s1, t1, t3); + tcg_gen_add_tl(s0, t0, t2); + break; + case MXU_APTN2_AS: /* lop +, rop - */ + tcg_gen_sub_tl(s3, t1, t3); + tcg_gen_sub_tl(s2, t0, t2); + tcg_gen_add_tl(s1, t1, t3); + tcg_gen_add_tl(s0, t0, t2); + break; + case MXU_APTN2_SA: /* lop -, rop + */ + tcg_gen_add_tl(s3, t1, t3); + tcg_gen_add_tl(s2, t0, t2); + tcg_gen_sub_tl(s1, t1, t3); + tcg_gen_sub_tl(s0, t0, t2); + break; + case MXU_APTN2_SS: /* lop -, rop - */ + tcg_gen_sub_tl(s3, t1, t3); + tcg_gen_sub_tl(s2, t0, t2); + tcg_gen_sub_tl(s1, t1, t3); + tcg_gen_sub_tl(s0, t0, t2); + break; + } + + if (XRa !=3D 0) { + tcg_gen_add_tl(t0, mxu_gpr[XRa - 1], s0); + tcg_gen_extract_tl(t0, t0, 0, 16); + tcg_gen_extract_tl(t1, mxu_gpr[XRa - 1], 16, 16); + tcg_gen_add_tl(t1, t1, s1); + tcg_gen_shli_tl(t1, t1, 16); + tcg_gen_or_tl(mxu_gpr[XRa - 1], t1, t0); + } + + if (XRd !=3D 0) { + tcg_gen_add_tl(t0, mxu_gpr[XRd - 1], s2); + tcg_gen_extract_tl(t0, t0, 0, 16); + tcg_gen_extract_tl(t1, mxu_gpr[XRd - 1], 16, 16); + tcg_gen_add_tl(t1, t1, s3); + tcg_gen_shli_tl(t1, t1, 16); + tcg_gen_or_tl(mxu_gpr[XRd - 1], t1, t0); + } +} + +/* + * Q16ACCM XRa, XRb, XRc, XRd, aptn2 - Quad packed + * 16-bit accumulate. + */ +static void gen_mxu_q16accm(DisasContext *ctx) +{ + uint32_t aptn2, XRc, XRb, XRa, XRd; + + aptn2 =3D extract32(ctx->opcode, 24, 2); + XRd =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t2, XRb); + gen_load_mxu_gpr(t3, XRc); + + if (XRa !=3D 0) { + TCGv a0 =3D tcg_temp_new(); + TCGv a1 =3D tcg_temp_new(); + + tcg_gen_extract_tl(t0, t2, 0, 16); + tcg_gen_extract_tl(t1, t2, 16, 16); + + gen_load_mxu_gpr(a1, XRa); + tcg_gen_extract_tl(a0, a1, 0, 16); + tcg_gen_extract_tl(a1, a1, 16, 16); + + if (aptn2 & 2) { + tcg_gen_sub_tl(a0, a0, t0); + tcg_gen_sub_tl(a1, a1, t1); + } else { + tcg_gen_add_tl(a0, a0, t0); + tcg_gen_add_tl(a1, a1, t1); + } + tcg_gen_extract_tl(a0, a0, 0, 16); + tcg_gen_shli_tl(a1, a1, 16); + tcg_gen_or_tl(mxu_gpr[XRa - 1], a1, a0); + } + + if (XRd !=3D 0) { + TCGv a0 =3D tcg_temp_new(); + TCGv a1 =3D tcg_temp_new(); + + tcg_gen_extract_tl(t0, t3, 0, 16); + tcg_gen_extract_tl(t1, t3, 16, 16); + + gen_load_mxu_gpr(a1, XRd); + tcg_gen_extract_tl(a0, a1, 0, 16); + tcg_gen_extract_tl(a1, a1, 16, 16); + + if (aptn2 & 1) { + tcg_gen_sub_tl(a0, a0, t0); + tcg_gen_sub_tl(a1, a1, t1); + } else { + tcg_gen_add_tl(a0, a0, t0); + tcg_gen_add_tl(a1, a1, t1); + } + tcg_gen_extract_tl(a0, a0, 0, 16); + tcg_gen_shli_tl(a1, a1, 16); + tcg_gen_or_tl(mxu_gpr[XRd - 1], a1, a0); + } +} + + +/* + * D16ASUM XRa, XRb, XRc, XRd, aptn2 - Double packed + * 16-bit sign extended addition and accumulate. + */ +static void gen_mxu_d16asum(DisasContext *ctx) +{ + uint32_t aptn2, XRc, XRb, XRa, XRd; + + aptn2 =3D extract32(ctx->opcode, 24, 2); + XRd =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t2, XRb); + gen_load_mxu_gpr(t3, XRc); + + if (XRa !=3D 0) { + tcg_gen_sextract_tl(t0, t2, 0, 16); + tcg_gen_sextract_tl(t1, t2, 16, 16); + tcg_gen_add_tl(t0, t0, t1); + if (aptn2 & 2) { + tcg_gen_sub_tl(mxu_gpr[XRa - 1], mxu_gpr[XRa - 1], t0); + } else { + tcg_gen_add_tl(mxu_gpr[XRa - 1], mxu_gpr[XRa - 1], t0); + } + } + + if (XRd !=3D 0) { + tcg_gen_sextract_tl(t0, t3, 0, 16); + tcg_gen_sextract_tl(t1, t3, 16, 16); + tcg_gen_add_tl(t0, t0, t1); + if (aptn2 & 1) { + tcg_gen_sub_tl(mxu_gpr[XRd - 1], mxu_gpr[XRd - 1], t0); + } else { + tcg_gen_add_tl(mxu_gpr[XRd - 1], mxu_gpr[XRd - 1], t0); + } + } +} + /* * D32ADD XRa, XRb, XRc, XRd, aptn2 - Double * 32 bit pattern addition/subtraction, set carry. @@ -3114,6 +3316,27 @@ static void decode_opc_mxu__pool12(DisasContext *ctx) } } =20 +static void decode_opc_mxu__pool13(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 22, 2); + + switch (opcode) { + case OPC_MXU_Q16ACC: + gen_mxu_q16acc(ctx); + break; + case OPC_MXU_Q16ACCM: + gen_mxu_q16accm(ctx); + break; + case OPC_MXU_D16ASUM: + gen_mxu_d16asum(ctx); + break; + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + static void decode_opc_mxu__pool16(DisasContext *ctx) { uint32_t opcode =3D extract32(ctx->opcode, 18, 3); @@ -3282,6 +3505,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU__POOL12: decode_opc_mxu__pool12(ctx); break; + case OPC_MXU__POOL13: + decode_opc_mxu__pool13(ctx); + break; case OPC_MXU_S8LDD: gen_mxu_s8ldd(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230301; cv=none; d=zohomail.com; s=zohoarc; b=L0kAyYvrmdvBl2Ceb6FGsBJUguA8YdvUMqkx5WK3X6FfiakqsLhIIGMtPJ25iTSAzW2Y1WteG/uvZggSeRmBHtgKfN6mUialfG6bkFDrXNzIUq8gmCG27BcHju+91XITNB4zDEZDWaRfc8Z8/c+2y9iRIOlCooCdRsnP3G4yQoE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230301; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=D3PK5Y6oWA1AlENZN89ohhAYs/k01AvM5b9sv/EPPCw=; b=BQiJZG3UewRmx/mRcLqkXtaJ0iRb017dxgp1bIoaTwWq1gDLbgk7CoemquvqQz6GBwJ3QEQcjJc76wvImP7ZbP1SlaD7rqPscOh7qzHmLe2Z7jY3FssHQN6difhh/DcEElDpQpdlcqF7zuGjktQuktMmpScFSEZ7U/hAPfSVn8s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230301799429.9975924665464; Thu, 8 Jun 2023 06:18:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWY-0003Mp-0z; Thu, 08 Jun 2023 09:17:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6O-0002MV-TZ for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:48 -0400 Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6N-0006YN-1a for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:48 -0400 Received: by mail-lj1-x233.google.com with SMTP id 38308e7fff4ca-2b1aecef94fso3822281fa.3 for ; Thu, 08 Jun 2023 03:42:46 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220965; x=1688812965; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=D3PK5Y6oWA1AlENZN89ohhAYs/k01AvM5b9sv/EPPCw=; b=E01odcA8AxpG306QvIL5I2W4io5cMs2Z7cC7PsmhsfQceyVXACij1s+/9w/VPfXlI/ vogYgkOUdPHVd+j6KLT2kEq8JVymbPSWOVys2BD/G84E4mDvK5n8TTrEGcfKUkNtjrFr 0Y/EQDayPRPGu2sMGrMWMkHCS9B9WlTICyEcylAlR1pADKN6zpLs1Kw2YCoNFfyYT/g2 gqxAOtIBzQkZT8tSnKCujh3tUM5QyfGoMlNHQke/iCEIvt3TT8hgOwTgTWGZiVTTmXVC mzibRhnGfQp5FkQnNTGvBDh6hlW0TibS9NvuHmOFTZI/SNJgG7nt1qwIYDSV14tOS5Fq QMLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220965; x=1688812965; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=D3PK5Y6oWA1AlENZN89ohhAYs/k01AvM5b9sv/EPPCw=; b=O9PHBSxLAtIsxeKXbio+XZquy2gVmjDmjovUrP58TgOfli6gQqWdKEKW9XTHBE69ms J1rK5SU9QayuK74ua+bojDta62Im9xz4oMs0SVboKq6WJ7bvEUTStr66n4FV1SLPRJ+L rms+lLb/r13rOfZfm2sfWgWwur/8IMPUR+MVC1P3qaIXoiYSdu+txHpklepLU6KB4cxX Bn6Qb8O9vzkuuavNbSaXczi02+hvE87xWd5SsQRv75lFbJ3sAsnnBs1QywjmEfJVMxkX WWvFnmy/VsUcR7Ah26pjmJzwpGjoVfWJl4Ioieob9pc4wJ1y6s/3Z8UspGEKZpVEK2dH 3kXA== X-Gm-Message-State: AC+VfDxXCIE5jr2QyzfxBkQ9oNaCUewJ78qNIlRnRkkL3tiKzFArmmJb E347zn4/RnsHjcxPvRLFI72yQZo1vAQ= X-Google-Smtp-Source: ACHHUZ69HzT4UA6wghmNwzHM1DB1b3+b1liZeg1ySn1Z2wiWr4Tm4DqD4BIQIRumgS2GZYa6fYt3Dw== X-Received: by 2002:a05:651c:8c:b0:2b1:e8f8:e0ff with SMTP id 12-20020a05651c008c00b002b1e8f8e0ffmr3804204ljq.10.1686220965146; Thu, 08 Jun 2023 03:42:45 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 19/33] target/mips: Add emulation of MXU Q8ADDE Q8ACCE D8SUM D8SUMC instructions Date: Thu, 8 Jun 2023 13:42:08 +0300 Message-Id: <20230608104222.1520143-20-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::233; envelope-from=lis8215@gmail.com; helo=mail-lj1-x233.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230302720100001 Content-Type: text/plain; charset="utf-8" These instructions are all dual 8-bit addition/subtraction in various combinations. Most instructions are grouped in pool14, see the opcode organization in the file. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 200 ++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 73edf24229..af80cf76e4 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -381,6 +381,8 @@ enum { OPC_MXU_D32ADD =3D 0x18, OPC_MXU__POOL12 =3D 0x19, OPC_MXU__POOL13 =3D 0x1B, + OPC_MXU__POOL14 =3D 0x1C, + OPC_MXU_Q8ACCE =3D 0x1D, OPC_MXU_S8LDD =3D 0x22, OPC_MXU__POOL16 =3D 0x27, OPC_MXU__POOL17 =3D 0x28, @@ -461,6 +463,15 @@ enum { OPC_MXU_D16ASUM =3D 0x02, }; =20 +/* + * MXU pool 14 + */ +enum { + OPC_MXU_Q8ADDE =3D 0x00, + OPC_MXU_D8SUM =3D 0x01, + OPC_MXU_D8SUMC =3D 0x02, +}; + /* * MXU pool 16 */ @@ -2185,6 +2196,168 @@ static void gen_mxu_Q8ADD(DisasContext *ctx) } } =20 +/* + * Q8ADDE XRa, XRb, XRc, XRd, aptn2 + * Add/subtract quadruple of 8-bit packed in XRb + * to another one in XRc, with zero extending + * to 16-bit and put results as packed 16-bit data + * into XRa and XRd. + * aptn2 manages action add or subract of pairs of data. + * + * Q8ACCE XRa, XRb, XRc, XRd, aptn2 + * Add/subtract quadruple of 8-bit packed in XRb + * to another one in XRc, with zero extending + * to 16-bit and accumulate results as packed 16-bit data + * into XRa and XRd. + * aptn2 manages action add or subract of pairs of data. + */ +static void gen_mxu_q8adde(DisasContext *ctx, bool accumulate) +{ + uint32_t aptn2, XRd, XRc, XRb, XRa; + + aptn2 =3D extract32(ctx->opcode, 24, 2); + XRd =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely((XRb =3D=3D 0) && (XRc =3D=3D 0))) { + /* both operands zero registers -> just set destination to zero */ + if (XRa !=3D 0) { + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } + if (XRd !=3D 0) { + tcg_gen_movi_tl(mxu_gpr[XRd - 1], 0); + } + } else { + /* the most general case */ + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv t4 =3D tcg_temp_new(); + TCGv t5 =3D tcg_temp_new(); + + if (XRa !=3D 0) { + tcg_gen_extract_tl(t0, mxu_gpr[XRb - 1], 16, 8); + tcg_gen_extract_tl(t1, mxu_gpr[XRc - 1], 16, 8); + tcg_gen_extract_tl(t2, mxu_gpr[XRb - 1], 24, 8); + tcg_gen_extract_tl(t3, mxu_gpr[XRc - 1], 24, 8); + if (aptn2 & 2) { + tcg_gen_sub_tl(t0, t0, t1); + tcg_gen_sub_tl(t2, t2, t3); + } else { + tcg_gen_add_tl(t0, t0, t1); + tcg_gen_add_tl(t2, t2, t3); + } + if (accumulate) { + gen_load_mxu_gpr(t5, XRa); + tcg_gen_extract_tl(t1, t5, 0, 16); + tcg_gen_extract_tl(t3, t5, 16, 16); + tcg_gen_add_tl(t0, t0, t1); + tcg_gen_add_tl(t2, t2, t3); + } + tcg_gen_shli_tl(t2, t2, 16); + tcg_gen_extract_tl(t0, t0, 0, 16); + tcg_gen_or_tl(t4, t2, t0); + } + if (XRd !=3D 0) { + tcg_gen_extract_tl(t0, mxu_gpr[XRb - 1], 0, 8); + tcg_gen_extract_tl(t1, mxu_gpr[XRc - 1], 0, 8); + tcg_gen_extract_tl(t2, mxu_gpr[XRb - 1], 8, 8); + tcg_gen_extract_tl(t3, mxu_gpr[XRc - 1], 8, 8); + if (aptn2 & 1) { + tcg_gen_sub_tl(t0, t0, t1); + tcg_gen_sub_tl(t2, t2, t3); + } else { + tcg_gen_add_tl(t0, t0, t1); + tcg_gen_add_tl(t2, t2, t3); + } + if (accumulate) { + gen_load_mxu_gpr(t5, XRd); + tcg_gen_extract_tl(t1, t5, 0, 16); + tcg_gen_extract_tl(t3, t5, 16, 16); + tcg_gen_add_tl(t0, t0, t1); + tcg_gen_add_tl(t2, t2, t3); + } + tcg_gen_shli_tl(t2, t2, 16); + tcg_gen_extract_tl(t0, t0, 0, 16); + tcg_gen_or_tl(t5, t2, t0); + } + + gen_store_mxu_gpr(t4, XRa); + gen_store_mxu_gpr(t5, XRd); + } +} + +/* + * D8SUM XRa, XRb, XRc + * Double parallel add of quadruple unsigned 8-bit together + * with zero extending to 16-bit data. + * D8SUMC XRa, XRb, XRc + * Double parallel add of quadruple unsigned 8-bit together + * with zero extending to 16-bit data and adding 2 to each + * parallel result. + */ +static void gen_mxu_d8sum(DisasContext *ctx, bool sumc) +{ + uint32_t pad, pad2, XRc, XRb, XRa; + + pad =3D extract32(ctx->opcode, 24, 2); + pad2 =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely(pad !=3D 0 || pad2 !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else if (unlikely((XRb =3D=3D 0) && (XRc =3D=3D 0))) { + /* both operands zero registers -> just set destination to zero */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else { + /* the most general case */ + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv t4 =3D tcg_temp_new(); + TCGv t5 =3D tcg_temp_new(); + + if (XRb !=3D 0) { + tcg_gen_extract_tl(t0, mxu_gpr[XRb - 1], 0, 8); + tcg_gen_extract_tl(t1, mxu_gpr[XRb - 1], 8, 8); + tcg_gen_extract_tl(t2, mxu_gpr[XRb - 1], 16, 8); + tcg_gen_extract_tl(t3, mxu_gpr[XRb - 1], 24, 8); + tcg_gen_add_tl(t4, t0, t1); + tcg_gen_add_tl(t4, t4, t2); + tcg_gen_add_tl(t4, t4, t3); + } else { + tcg_gen_mov_tl(t4, 0); + } + if (XRc !=3D 0) { + tcg_gen_extract_tl(t0, mxu_gpr[XRc - 1], 0, 8); + tcg_gen_extract_tl(t1, mxu_gpr[XRc - 1], 8, 8); + tcg_gen_extract_tl(t2, mxu_gpr[XRc - 1], 16, 8); + tcg_gen_extract_tl(t3, mxu_gpr[XRc - 1], 24, 8); + tcg_gen_add_tl(t5, t0, t1); + tcg_gen_add_tl(t5, t5, t2); + tcg_gen_add_tl(t5, t5, t3); + } else { + tcg_gen_mov_tl(t5, 0); + } + + if (sumc) { + tcg_gen_addi_tl(t4, t4, 2); + tcg_gen_addi_tl(t5, t5, 2); + } + tcg_gen_shli_tl(t4, t4, 16); + + tcg_gen_or_tl(mxu_gpr[XRa - 1], t4, t5); + } +} + /* * Q16ADD XRa, XRb, XRc, XRd, aptn2, optn2 - Quad packed * 16-bit pattern addition. @@ -3337,6 +3510,27 @@ static void decode_opc_mxu__pool13(DisasContext *ctx) } } =20 +static void decode_opc_mxu__pool14(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 22, 2); + + switch (opcode) { + case OPC_MXU_Q8ADDE: + gen_mxu_q8adde(ctx, false); + break; + case OPC_MXU_D8SUM: + gen_mxu_d8sum(ctx, false); + break; + case OPC_MXU_D8SUMC: + gen_mxu_d8sum(ctx, true); + break; + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + static void decode_opc_mxu__pool16(DisasContext *ctx) { uint32_t opcode =3D extract32(ctx->opcode, 18, 3); @@ -3508,6 +3702,12 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU__POOL13: decode_opc_mxu__pool13(ctx); break; + case OPC_MXU__POOL14: + decode_opc_mxu__pool14(ctx); + break; + case OPC_MXU_Q8ACCE: + gen_mxu_q8adde(ctx, true); + break; case OPC_MXU_S8LDD: gen_mxu_s8ldd(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230559; cv=none; d=zohomail.com; s=zohoarc; b=cd5pRMtaW6V5HdV4urGPUWueNKQVlXtNIEik+juetyTAxHEQDs5y1V52veJHezStXBD9nj5XtVXWQm0R0xQQYcBWD+Bbba7t74YHUQxW9Cyn+/PeMacz8qkSBzYOdepo/FXsmYT7E65yeQhNhfraJZ4/aZDnNCJhF9kcHc5/jh4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230559; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lrm4XrVic9VlFN8GAG0zmq+7yUo2d4//gD+0ioab/eU=; b=Pdm5t3oPthHDnD8C7yQ9zUyKzCpmoT2hgHcml/arwmCAEpJs4bL00iCfX2a2RG7N996TS/hoi07nFudma9bLdR/k/y5rvi4+GqTxFLhAwZE0cQR/WA8Q/I6HzZzcJyP7EU0tGfz80cB9CdrFItzs1VX7huWmq/ba8lQ27bBbSPs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230557887285.51994665590644; Thu, 8 Jun 2023 06:22:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWy-0003op-HU; Thu, 08 Jun 2023 09:18:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6Q-0002N1-4e for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:50 -0400 Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6O-0006Yz-90 for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:49 -0400 Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-4f63006b4e3so590572e87.1 for ; Thu, 08 Jun 2023 03:42:47 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220966; x=1688812966; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lrm4XrVic9VlFN8GAG0zmq+7yUo2d4//gD+0ioab/eU=; b=BV3YAInRfjO7DxssoboM1CKx5OjIvTGIFTSBkRzqOR5EgalrlEBvrNsn+wNiU/BHw0 rnPnpldQk2fM29jqQMyUN/RcxCzCbvAeoDnMXsRKE9BnE/XTMzZk0jtEwZrRhQID8t9E QV7A+z+8CNz0om1+hjmeRSrbcSewUaMVWNnR95TCXX6a7GxLrZyfIDMUo4KIAEsh76Ir rhlbXYBwUXX7fmvGDuKvuoV1zixp5+I0QJNW/h/T5X/DAa4ipyP6OIzbiNWDqNeGmy3s cewh3ThqCt34fTtbZ/snFyViA76V91F2Xeq6mtPTf75OO0LmcaL23a/R1nT1Vstclls1 oA9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220966; x=1688812966; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lrm4XrVic9VlFN8GAG0zmq+7yUo2d4//gD+0ioab/eU=; b=Fr3LuDbJuqKxPdB58zGHmlr4Zsg7geoHD2ABNpO8Krd8pTbPotg6gjybs7aJkcKVmi V6OTHnTYoZxXz6XPbkEdFxnf+hdUy2Am9hSDbB1imM4fOh+Sy277l1YS69dD0d7Ep24N dcxo2sDyZ5wmEVhJRsSVT3DcpQGCtEVKLRLHRI27k4k7Ld+CLDyNNBEmnR4yM6H75Rsp yObODzmRqZxMfjXKLkJ9SzjI0kUThSOInofYhC/txB5G6g5UgZida4R3VGhQumXf729Q dUg7bHsWCbcS5bv1k3Fi5AVvOws4G2U9EUKjf7s/WUKPGBSaxxn9TungZUf7YlGexwB6 JrZg== X-Gm-Message-State: AC+VfDxMACVIgWwJ+I9PzM2XV08EUnJAjcyx9Kk4zrd0uJdmyhccmHLM MD0+FHwLizN6WTRi1eo8rzP65FofewI= X-Google-Smtp-Source: ACHHUZ6hxi44BCozp1t2e5bC83gF36AnWBNAaF+mU+i/mRUF4MyIA9zzOLyVd7aGsJbYky3IwW4FzA== X-Received: by 2002:a05:6512:374a:b0:4f3:a87f:a87b with SMTP id a10-20020a056512374a00b004f3a87fa87bmr2920687lfs.39.1686220966207; Thu, 08 Jun 2023 03:42:46 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 20/33] target/mips: Add emulation of MXU S8STD S8LDI S8SDI instructions Date: Thu, 8 Jun 2023 13:42:09 +0300 Message-Id: <20230608104222.1520143-21-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::132; envelope-from=lis8215@gmail.com; helo=mail-lf1-x132.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230562605100006 Content-Type: text/plain; charset="utf-8" These instructions are all load/store a byte from memory and put it into/get it from MXU register in various combinations. I-suffix instructions modify the base address GPR by offset provided. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 74 ++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index af80cf76e4..6460846149 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -384,6 +384,9 @@ enum { OPC_MXU__POOL14 =3D 0x1C, OPC_MXU_Q8ACCE =3D 0x1D, OPC_MXU_S8LDD =3D 0x22, + OPC_MXU_S8STD =3D 0x23, + OPC_MXU_S8LDI =3D 0x24, + OPC_MXU_S8SDI =3D 0x25, OPC_MXU__POOL16 =3D 0x27, OPC_MXU__POOL17 =3D 0x28, OPC_MXU_S32M2I =3D 0x2E, @@ -635,8 +638,11 @@ static void gen_mxu_s32m2i(DisasContext *ctx) =20 /* * S8LDD XRa, Rb, s8, optn3 - Load a byte from memory to XRF + * + * S8LDI XRa, Rb, s8, optn3 - Load a byte from memory to XRF, + * post modify address register */ -static void gen_mxu_s8ldd(DisasContext *ctx) +static void gen_mxu_s8ldd(DisasContext *ctx, bool postmodify) { TCGv t0, t1; uint32_t XRa, Rb, s8, optn3; @@ -651,6 +657,9 @@ static void gen_mxu_s8ldd(DisasContext *ctx) =20 gen_load_gpr(t0, Rb); tcg_gen_addi_tl(t0, t0, (int8_t)s8); + if (postmodify) { + gen_store_gpr(t0, Rb); + } =20 switch (optn3) { /* XRa[7:0] =3D tmp8 */ @@ -707,6 +716,58 @@ static void gen_mxu_s8ldd(DisasContext *ctx) gen_store_mxu_gpr(t0, XRa); } =20 +/* + * S8STD XRa, Rb, s8, optn3 - Store a byte from XRF to memory + * + * S8SDI XRa, Rb, s8, optn3 - Store a byte from XRF to memory, + * post modify address register + */ +static void gen_mxu_s8std(DisasContext *ctx, bool postmodify) +{ + TCGv t0, t1; + uint32_t XRa, Rb, s8, optn3; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + + XRa =3D extract32(ctx->opcode, 6, 4); + s8 =3D extract32(ctx->opcode, 10, 8); + optn3 =3D extract32(ctx->opcode, 18, 3); + Rb =3D extract32(ctx->opcode, 21, 5); + + if (optn3 > 3) { + /* reserved, do nothing */ + return; + } + + gen_load_gpr(t0, Rb); + tcg_gen_addi_tl(t0, t0, (int8_t)s8); + if (postmodify) { + gen_store_gpr(t0, Rb); + } + gen_load_mxu_gpr(t1, XRa); + + switch (optn3) { + /* XRa[7:0] =3D> tmp8 */ + case MXU_OPTN3_PTN0: + tcg_gen_extract_tl(t1, t1, 0, 8); + break; + /* XRa[15:8] =3D> tmp8 */ + case MXU_OPTN3_PTN1: + tcg_gen_extract_tl(t1, t1, 8, 8); + break; + /* XRa[23:16] =3D> tmp8 */ + case MXU_OPTN3_PTN2: + tcg_gen_extract_tl(t1, t1, 16, 8); + break; + /* XRa[31:24] =3D> tmp8 */ + case MXU_OPTN3_PTN3: + tcg_gen_extract_tl(t1, t1, 24, 8); + break; + } + + tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_UB); +} /* * D16MUL XRa, XRb, XRc, XRd, optn2 - Signed 16 bit pattern multiplication * D16MULF XRa, XRb, XRc, optn2 - Signed Q15 fraction pattern multiplicati= on @@ -3709,7 +3770,16 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) gen_mxu_q8adde(ctx, true); break; case OPC_MXU_S8LDD: - gen_mxu_s8ldd(ctx); + gen_mxu_s8ldd(ctx, false); + break; + case OPC_MXU_S8STD: + gen_mxu_s8std(ctx, false); + break; + case OPC_MXU_S8LDI: + gen_mxu_s8ldd(ctx, true); + break; + case OPC_MXU_S8SDI: + gen_mxu_s8std(ctx, true); break; case OPC_MXU__POOL16: decode_opc_mxu__pool16(ctx); --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230564; cv=none; d=zohomail.com; s=zohoarc; b=lSU/mQqRvpPRj3Fl6Pbv19ezeiPuykrvqy/EMr1UAlsMEeFsyv132ZcLEdAj4pNMIX4LyFijynSaCJkLNsafLggPKbuASjcGMdWR/M859IpLvT55ffSeokvrWFSToThhK/znAz6it86NVOBM/ohJufZq3iWivCdh55L8V6JsN9U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230564; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=8b7KrjCebnfWIrPsCkUgKYPJ7/0tuWaa+jvxau+kcyg=; b=elP3DdCll5noO5WUzyH7a7DASFu9AqESlUQ+l6iJBqZSQrp937/a6WQ1YCnf0aQuxkKpzMUMHXccJLfa8hz5ml/dmXJ8ta/ljTE5G4hdG15HZwo+rmroHfPEOnn3QW60zq35/Nz7HzqcK9xj7IFV0uw6DXOOpXI2DyL1idanj78= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230564482518.272486214876; Thu, 8 Jun 2023 06:22:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWy-0003pJ-O4; Thu, 08 Jun 2023 09:18:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6Q-0002NM-Tx for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:50 -0400 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6P-0006Za-50 for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:50 -0400 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-4f4b2bc1565so570038e87.2 for ; Thu, 08 Jun 2023 03:42:48 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220967; x=1688812967; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8b7KrjCebnfWIrPsCkUgKYPJ7/0tuWaa+jvxau+kcyg=; b=MIWD8MS7a8LCbKOcRUPgojiAMscDVLCzgZntyRnN32L8z4ZeXU/kZq3mF5XsUj0YYX 9iEBgQvktT1mXddRX00DKKZ1hSPHBJR+l2Z38qNrG7Li7pGL8gtikVfX+zvM2K9QRrJS 4VYhGg6le7cGONAyog4AuX038Xw6U+qCzrE+NxVnHSh9f6ZSfEovknReDnQw/szR5zea RW8vnOSDWjV0IIc6Z1QMT8w9u8qk8xFnmioySsV1j3+wZcPsmBl/ulSQUnbdKlUhNwik 8NrHohr1q8HBd7cOnX/vLGlVFQSIECN23D83vfv5ZYYi2MO37MC/ohA8ZUPVmGxlBpLF qe2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220967; x=1688812967; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8b7KrjCebnfWIrPsCkUgKYPJ7/0tuWaa+jvxau+kcyg=; b=A6zWBWbbJyB99Vj0PHL6JNJLCbOMNl+lSHSRGdkNZG/aEllT+i7K0lWr4dobRLUQQC D3pj//p8DIhSgZ7pmE7W0XgSYLe9h3p0OVRXTPkoPrV8UK85JP1Epiyd3VsMtxTrVgrC CkB66dqFOwAotDAmN3oeHsfHTkpa4maDAIhP+P6dAu2q1jFCPtAGM86rKPhAXPCJO3Kd qF8RqUmUs6tG3ZsYE04WPXZiBGTTCZP13uJ1tCIV97jIZse7EDwvkOGhNrKLxhvHjDVn k5Ur9Rb+tv3ErdytIEJ+NxmSfJjoH3PaX/0DWP4nZsNzYcyRcernu38MF3gFsVSY/9FT fkcQ== X-Gm-Message-State: AC+VfDxX6h2hM9Y2Vmil4evZJW6sf5M9FFLT8u3N28Tn3btt53uLZGYr lcTiHUbLELD0FaSMBjtzNnXlsmVxdUI= X-Google-Smtp-Source: ACHHUZ6/HkcmsuLdSq8xVxn8btOwJ+12wu0pD6L85zS0YVg5yuOxSdRl82RpKN3P9oV6AEU0HiZvuQ== X-Received: by 2002:ac2:4a7a:0:b0:4f2:6bc3:5e33 with SMTP id q26-20020ac24a7a000000b004f26bc35e33mr3139872lfp.9.1686220967238; Thu, 08 Jun 2023 03:42:47 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 21/33] target/mips: Add emulation of MXU S16LDD S16STD S16LDI S16SDI instructions Date: Thu, 8 Jun 2023 13:42:10 +0300 Message-Id: <20230608104222.1520143-22-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::133; envelope-from=lis8215@gmail.com; helo=mail-lf1-x133.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230565933100018 Content-Type: text/plain; charset="utf-8" These instructions are all load/store a halfword from memory and put it into/get it from MXU register in various combinations. I-suffix instructions modify the base address GPR by offset provided. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 117 ++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 6460846149..f867950f3d 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -389,6 +389,10 @@ enum { OPC_MXU_S8SDI =3D 0x25, OPC_MXU__POOL16 =3D 0x27, OPC_MXU__POOL17 =3D 0x28, + OPC_MXU_S16LDD =3D 0x2A, + OPC_MXU_S16STD =3D 0x2B, + OPC_MXU_S16LDI =3D 0x2C, + OPC_MXU_S16SDI =3D 0x2D, OPC_MXU_S32M2I =3D 0x2E, OPC_MXU_S32I2M =3D 0x2F, OPC_MXU__POOL19 =3D 0x38, @@ -768,6 +772,107 @@ static void gen_mxu_s8std(DisasContext *ctx, bool pos= tmodify) =20 tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_UB); } + +/* + * S16LDD XRa, Rb, s10, optn2 - Load a halfword from memory to XRF + * + * S16LDI XRa, Rb, s10, optn2 - Load a halfword from memory to XRF, + * post modify address register + */ +static void gen_mxu_s16ldd(DisasContext *ctx, bool postmodify) +{ + TCGv t0, t1; + uint32_t XRa, Rb, optn2; + int32_t s10; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + + XRa =3D extract32(ctx->opcode, 6, 4); + s10 =3D sextract32(ctx->opcode, 10, 9) * 2; + optn2 =3D extract32(ctx->opcode, 19, 2); + Rb =3D extract32(ctx->opcode, 21, 5); + + gen_load_gpr(t0, Rb); + tcg_gen_addi_tl(t0, t0, s10); + if (postmodify) { + gen_store_gpr(t0, Rb); + } + + switch (optn2) { + /* XRa[15:0] =3D tmp16 */ + case MXU_OPTN2_PTN0: + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_UW); + gen_load_mxu_gpr(t0, XRa); + tcg_gen_deposit_tl(t0, t0, t1, 0, 16); + break; + /* XRa[31:16] =3D tmp16 */ + case MXU_OPTN2_PTN1: + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_UW); + gen_load_mxu_gpr(t0, XRa); + tcg_gen_deposit_tl(t0, t0, t1, 16, 16); + break; + /* XRa =3D sign_extend(tmp16) */ + case MXU_OPTN2_PTN2: + tcg_gen_qemu_ld_tl(t0, t0, ctx->mem_idx, MO_SW); + break; + /* XRa =3D {tmp16, tmp16} */ + case MXU_OPTN2_PTN3: + tcg_gen_qemu_ld_tl(t1, t0, ctx->mem_idx, MO_UW); + tcg_gen_deposit_tl(t0, t1, t1, 0, 16); + tcg_gen_deposit_tl(t0, t1, t1, 16, 16); + break; + } + + gen_store_mxu_gpr(t0, XRa); +} + +/* + * S16STD XRa, Rb, s8, optn2 - Store a byte from XRF to memory + * + * S16SDI XRa, Rb, s8, optn2 - Store a byte from XRF to memory, + * post modify address register + */ +static void gen_mxu_s16std(DisasContext *ctx, bool postmodify) +{ + TCGv t0, t1; + uint32_t XRa, Rb, optn2; + int32_t s10; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + + XRa =3D extract32(ctx->opcode, 6, 4); + s10 =3D sextract32(ctx->opcode, 10, 9) * 2; + optn2 =3D extract32(ctx->opcode, 19, 2); + Rb =3D extract32(ctx->opcode, 21, 5); + + if (optn2 > 1) { + /* reserved, do nothing */ + return; + } + + gen_load_gpr(t0, Rb); + tcg_gen_addi_tl(t0, t0, s10); + if (postmodify) { + gen_store_gpr(t0, Rb); + } + gen_load_mxu_gpr(t1, XRa); + + switch (optn2) { + /* XRa[15:0] =3D> tmp16 */ + case MXU_OPTN2_PTN0: + tcg_gen_extract_tl(t1, t1, 0, 16); + break; + /* XRa[31:16] =3D> tmp16 */ + case MXU_OPTN2_PTN1: + tcg_gen_extract_tl(t1, t1, 16, 16); + break; + } + + tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_UW); +} + /* * D16MUL XRa, XRb, XRc, XRd, optn2 - Signed 16 bit pattern multiplication * D16MULF XRa, XRb, XRc, optn2 - Signed Q15 fraction pattern multiplicati= on @@ -3787,6 +3892,18 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU__POOL17: decode_opc_mxu__pool17(ctx); break; + case OPC_MXU_S16LDD: + gen_mxu_s16ldd(ctx, false); + break; + case OPC_MXU_S16STD: + gen_mxu_s16std(ctx, false); + break; + case OPC_MXU_S16LDI: + gen_mxu_s16ldd(ctx, true); + break; + case OPC_MXU_S16SDI: + gen_mxu_s16std(ctx, true); + break; case OPC_MXU__POOL19: decode_opc_mxu__pool19(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230302; cv=none; d=zohomail.com; s=zohoarc; b=Z0Ps0JLcSbrXSzY+eFjYjgzg1Y/IFu+o81mvj6bashDK4PpNTn/Ic+atBRuJsxwMyH8fIIbVi3T9YPmCosR9UihdZc2y+G36lB68G0qD0QtRX1XjVskIaB79igPi5e/PnkPW7y0d1y5x7aTLgvnKgtjaH/FF447Tyfv6uetdCYw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230302; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=PmBZ7dDnFyJcc3L/gekp5fuudx9wh9cTvVl0/lG4MwQ=; b=JiZHywvf+tq0YytL+LAlB526vBE02WXBk/b+TwGtbg7z8KEsIItx5ynl5joE1tbM9YT8BJMwYDBrY2rDsxdQ67rpDlk2M9DAg4t46BQY1NS8BlMFcKe3pA9IMFJdph1raBlq7E01GVs8dckJhMO26qFZJmkkbur3IRge1rT4YLI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230302908742.0191533777198; Thu, 8 Jun 2023 06:18:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWb-0003PT-5p; Thu, 08 Jun 2023 09:18:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6S-0002Nw-6I for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:52 -0400 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6Q-0006a2-79 for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:51 -0400 Received: by mail-lj1-x236.google.com with SMTP id 38308e7fff4ca-2b1afe57bdfso4023301fa.0 for ; Thu, 08 Jun 2023 03:42:49 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220968; x=1688812968; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PmBZ7dDnFyJcc3L/gekp5fuudx9wh9cTvVl0/lG4MwQ=; b=Mi0SD0/UgkP2TFf3a3whn7wPcHK28roDD9N8VunnT1O3HA8nyz1tvOVHaTkEsjS56k cZ205n2XBGABUi/wUCXpws9Nce6T73SRzk2MlpEa41pGM1qX4J9P9K7eSvtWBEmPybTB zqWTYMXY17+hvnfk0jUmLslr5p+mcGMqtp27iVt31mmoYWzkF1UdyAIFjNyKMNPIvm/B 59blD722hEc6ex2yeGUDQEWejOzJTH9/5lsig4MWpFZIJwyIdh654zdWYMGdHeAil7q3 G9LK+ebkZpFS1mxOV8S5Dmrsk1uGxPYxIv/pJSJoziF0n1pt/bVxlL0zpi13/frF75Ix oLqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220968; x=1688812968; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PmBZ7dDnFyJcc3L/gekp5fuudx9wh9cTvVl0/lG4MwQ=; b=CmjYBy5/i2rasOVuCYiR6UX6fQwKW+EenxHox5/ox6BZxSyKf9z0ZdRRutL3ElCCPY xabm/f1QRbo2zGGkFYeJQna+GkgTdhj1jMZj6UGnVQ/UWTqbaEggbltTthOpVQdk0ycX 0RBZX84nZ01XiIYdz+DTnrhahlTrZhnUjZ12HQHCXw1Jej2RF7fIzpsBC3DBPnRZpuGB nRLiBjmsBzJZOIDK0Zotq7aIujTgJDaD7MoYj8eE+R3y1Ndi84AuUY91L9kd/X3RYDEp OFEQswkfBfUPb6DZW2ZbYvFDWkxzU4hogSERJUcPOg3VkMGUx1Zxm8XyT2ky5ldGg611 NTuw== X-Gm-Message-State: AC+VfDx8WZpK+V9wpbHjIGpPME0x1ntAu+vD/s+n64ZzK8F/luv5dCJs 4QjGJGET+h9otqpghwOq260OtPElVn8= X-Google-Smtp-Source: ACHHUZ654kDBjVl8g+4imJpivOG9EPLXxwCN3jLLnmeJv/B3HNFfgl9T03FQJaWMiKkPRZCccPS7eA== X-Received: by 2002:a2e:9009:0:b0:2a8:dcd4:6161 with SMTP id h9-20020a2e9009000000b002a8dcd46161mr3233928ljg.28.1686220968325; Thu, 08 Jun 2023 03:42:48 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 22/33] target/mips: Add emulation of MXU S32MUL S32MULU S32EXTR S32EXTRV insns Date: Thu, 8 Jun 2023 13:42:11 +0300 Message-Id: <20230608104222.1520143-23-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::236; envelope-from=lis8215@gmail.com; helo=mail-lj1-x236.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230304653100005 These instructions are part of pool15, see the grand opcode organization tree on top of the file. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 200 +++++++++++++++++++++++++++++++- 1 file changed, 196 insertions(+), 4 deletions(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index f867950f3d..79c36cf54e 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -292,9 +292,9 @@ * =E2=94=9C=E2=94=80 100010 =E2=94=80 OPC_MXU_S8LDD * =E2=94=9C=E2=94=80 100011 =E2=94=80 OPC_MXU_S8STD 15..14 * =E2=94=9C=E2=94=80 100100 =E2=94=80 OPC_MXU_S8LDI =E2=94=8C= =E2=94=80 00 =E2=94=80 OPC_MXU_S32MUL - * =E2=94=9C=E2=94=80 100101 =E2=94=80 OPC_MXU_S8SDI =E2=94=9C= =E2=94=80 00 =E2=94=80 OPC_MXU_S32MULU - * =E2=94=82 =E2=94=9C=E2=94=80 00 =E2= =94=80 OPC_MXU_S32EXTR - * =E2=94=9C=E2=94=80 100110 =E2=94=80 OPC_MXU__POOL15 =E2=94=80= =E2=94=B4=E2=94=80 00 =E2=94=80 OPC_MXU_S32EXTRV + * =E2=94=9C=E2=94=80 100101 =E2=94=80 OPC_MXU_S8SDI =E2=94=9C= =E2=94=80 01 =E2=94=80 OPC_MXU_S32MULU + * =E2=94=82 =E2=94=9C=E2=94=80 10 =E2= =94=80 OPC_MXU_S32EXTR + * =E2=94=9C=E2=94=80 100110 =E2=94=80 OPC_MXU__POOL15 =E2=94=80= =E2=94=B4=E2=94=80 11 =E2=94=80 OPC_MXU_S32EXTRV * =E2=94=82 * =E2=94=82 20..18 * =E2=94=9C=E2=94=80 100111 =E2=94=80 OPC_MXU__POOL16 =E2=94=80= =E2=94=AC=E2=94=80 000 =E2=94=80 OPC_MXU_D32SARW @@ -387,6 +387,7 @@ enum { OPC_MXU_S8STD =3D 0x23, OPC_MXU_S8LDI =3D 0x24, OPC_MXU_S8SDI =3D 0x25, + OPC_MXU__POOL15 =3D 0x26, OPC_MXU__POOL16 =3D 0x27, OPC_MXU__POOL17 =3D 0x28, OPC_MXU_S16LDD =3D 0x2A, @@ -479,6 +480,16 @@ enum { OPC_MXU_D8SUMC =3D 0x02, }; =20 +/* + * MXU pool 15 + */ +enum { + OPC_MXU_S32MUL =3D 0x00, + OPC_MXU_S32MULU =3D 0x01, + OPC_MXU_S32EXTR =3D 0x02, + OPC_MXU_S32EXTRV =3D 0x03, +}; + /* * MXU pool 16 */ @@ -873,6 +884,47 @@ static void gen_mxu_s16std(DisasContext *ctx, bool pos= tmodify) tcg_gen_qemu_st_tl(t1, t0, ctx->mem_idx, MO_UW); } =20 +/* + * S32MUL XRa, XRd, rs, rt - Signed 32x32=3D>64 bit multiplication + * of GPR's and stores result into pair of MXU registers. + * It strains HI and LO registers. + * + * S32MULU XRa, XRd, rs, rt - Unsigned 32x32=3D>64 bit multiplication + * of GPR's and stores result into pair of MXU registers. + * It strains HI and LO registers. + */ +static void gen_mxu_s32mul(DisasContext *ctx, bool mulu) +{ + TCGv t0, t1; + uint32_t XRa, XRd, rs, rt; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + + XRa =3D extract32(ctx->opcode, 6, 4); + XRd =3D extract32(ctx->opcode, 10, 4); + rs =3D extract32(ctx->opcode, 16, 5); + rt =3D extract32(ctx->opcode, 21, 5); + + if (unlikely(rs =3D=3D 0 || rt =3D=3D 0)) { + tcg_gen_movi_tl(t0, 0); + tcg_gen_movi_tl(t1, 0); + } else { + gen_load_gpr(t0, rs); + gen_load_gpr(t1, rt); + + if (mulu) { + tcg_gen_mulu2_tl(t0, t1, t0, t1); + } else { + tcg_gen_muls2_tl(t0, t1, t0, t1); + } + } + tcg_gen_mov_tl(cpu_HI[0], t1); + tcg_gen_mov_tl(cpu_LO[0], t0); + gen_store_mxu_gpr(t1, XRa); + gen_store_mxu_gpr(t0, XRd); +} + /* * D16MUL XRa, XRb, XRc, XRd, optn2 - Signed 16 bit pattern multiplication * D16MULF XRa, XRb, XRc, optn2 - Signed Q15 fraction pattern multiplicati= on @@ -3016,8 +3068,121 @@ static void gen_mxu_d32asum(DisasContext *ctx) * MXU instruction category: Miscellaneous * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * - * Q16SAT + * S32EXTR + * S32EXTRV + * Q16SAT + */ + +/* + * S32EXTR XRa, XRd, rs, bits5 + * Extract bits5 bits from 64-bit pair {XRa:XRd} + * starting from rs[4:0] offset and put to the XRa. + */ +static void gen_mxu_s32extr(DisasContext *ctx) +{ + TCGv t0, t1, t2, t3; + uint32_t XRa, XRd, rs, bits5; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + t2 =3D tcg_temp_new(); + t3 =3D tcg_temp_new(); + + XRa =3D extract32(ctx->opcode, 6, 4); + XRd =3D extract32(ctx->opcode, 10, 4); + bits5 =3D extract32(ctx->opcode, 16, 5); + rs =3D extract32(ctx->opcode, 21, 5); + + /* {tmp} =3D {XRa:XRd} >> (64 - rt - bits5); */ + /* {XRa} =3D extract({tmp}, 0, bits5); */ + if (bits5 > 0) { + TCGLabel *l_xra_only =3D gen_new_label(); + TCGLabel *l_done =3D gen_new_label(); + + gen_load_mxu_gpr(t0, XRd); + gen_load_mxu_gpr(t1, XRa); + gen_load_gpr(t2, rs); + tcg_gen_andi_tl(t2, t2, 0x1f); + tcg_gen_subfi_tl(t2, 32, t2); + tcg_gen_brcondi_tl(TCG_COND_GE, t2, bits5, l_xra_only); + tcg_gen_subfi_tl(t2, bits5, t2); + tcg_gen_subfi_tl(t3, 32, t2); + tcg_gen_shr_tl(t0, t0, t3); + tcg_gen_shl_tl(t1, t1, t2); + tcg_gen_or_tl(t0, t0, t1); + tcg_gen_br(l_done); + gen_set_label(l_xra_only); + tcg_gen_subi_tl(t2, t2, bits5); + tcg_gen_shr_tl(t0, t1, t2); + gen_set_label(l_done); + tcg_gen_extract_tl(t0, t0, 0, bits5); + } else { + /* unspecified behavior but matches tests on real hardware*/ + tcg_gen_movi_tl(t0, 0); + } + gen_store_mxu_gpr(t0, XRa); +} + +/* + * S32EXTRV XRa, XRd, rs, rt + * Extract rt[4:0] bits from 64-bit pair {XRa:XRd} + * starting from rs[4:0] offset and put to the XRa. */ +static void gen_mxu_s32extrv(DisasContext *ctx) +{ + TCGv t0, t1, t2, t3, t4; + uint32_t XRa, XRd, rs, rt; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + t2 =3D tcg_temp_new(); + t3 =3D tcg_temp_new(); + t4 =3D tcg_temp_new(); + TCGLabel *l_xra_only =3D gen_new_label(); + TCGLabel *l_done =3D gen_new_label(); + TCGLabel *l_zero =3D gen_new_label(); + TCGLabel *l_extract =3D gen_new_label(); + + XRa =3D extract32(ctx->opcode, 6, 4); + XRd =3D extract32(ctx->opcode, 10, 4); + rt =3D extract32(ctx->opcode, 16, 5); + rs =3D extract32(ctx->opcode, 21, 5); + + /* {tmp} =3D {XRa:XRd} >> (64 - rs - rt) */ + gen_load_mxu_gpr(t0, XRd); + gen_load_mxu_gpr(t1, XRa); + gen_load_gpr(t2, rs); + gen_load_gpr(t4, rt); + tcg_gen_brcondi_tl(TCG_COND_EQ, t4, 0, l_zero); + tcg_gen_andi_tl(t2, t2, 0x1f); + tcg_gen_subfi_tl(t2, 32, t2); + tcg_gen_brcond_tl(TCG_COND_GE, t2, t4, l_xra_only); + tcg_gen_sub_tl(t2, t4, t2); + tcg_gen_subfi_tl(t3, 32, t2); + tcg_gen_shr_tl(t0, t0, t3); + tcg_gen_shl_tl(t1, t1, t2); + tcg_gen_or_tl(t0, t0, t1); + tcg_gen_br(l_extract); + + gen_set_label(l_xra_only); + tcg_gen_sub_tl(t2, t2, t4); + tcg_gen_shr_tl(t0, t1, t2); + tcg_gen_br(l_extract); + + /* unspecified behavior but matches tests on real hardware*/ + gen_set_label(l_zero); + tcg_gen_movi_tl(t0, 0); + tcg_gen_br(l_done); + + /* {XRa} =3D extract({tmp}, 0, rt) */ + gen_set_label(l_extract); + tcg_gen_subfi_tl(t4, 32, t4); + tcg_gen_shl_tl(t0, t0, t4); + tcg_gen_shr_tl(t0, t0, t4); + + gen_set_label(l_done); + gen_store_mxu_gpr(t0, XRa); +} =20 /* * Q16SAT XRa, XRb, XRc @@ -3697,6 +3862,30 @@ static void decode_opc_mxu__pool14(DisasContext *ctx) } } =20 +static void decode_opc_mxu__pool15(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 14, 2); + + switch (opcode) { + case OPC_MXU_S32MUL: + gen_mxu_s32mul(ctx, false); + break; + case OPC_MXU_S32MULU: + gen_mxu_s32mul(ctx, true); + break; + case OPC_MXU_S32EXTR: + gen_mxu_s32extr(ctx); + break; + case OPC_MXU_S32EXTRV: + gen_mxu_s32extrv(ctx); + break; + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + static void decode_opc_mxu__pool16(DisasContext *ctx) { uint32_t opcode =3D extract32(ctx->opcode, 18, 3); @@ -3886,6 +4075,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_S8SDI: gen_mxu_s8std(ctx, true); break; + case OPC_MXU__POOL15: + decode_opc_mxu__pool15(ctx); + break; case OPC_MXU__POOL16: decode_opc_mxu__pool16(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230508; cv=none; d=zohomail.com; s=zohoarc; b=L07LXhtNvTPTuM2CsPZoPYqRsxDcgmlBL+oMZI7/qp5wXoQmJpNqAPmdPUJwYoKolDltNRkCEFM2phyDIrDBU3rAeBcW7pC3bGDgGeJDDhcug5Iq2+fVt9aXD4ApOd40vtUSs2JAfQoFqRHu/vrwOTOD6mn0/thr0yNav0WDv7U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230508; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BWWmBI/GczjQJo7V4t04yZusnXF3X7oxx3gC41AP1PM=; b=Q/zI0WHbMC6odKLmhDcZoAo+YFVbw+JiPVH0uPNXiwCWBj81lNu2wMICoVzy78EyGTOJj22kXBHytPIOzORsvVyWfOvxvqaWmBCddjDqm7sVzZW3KaaULA93mJ43QPJWGDe68T0FcS/rlwlpNGs0FliUOTjCmuZu96Jf1/GqI0s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230508815178.2605664969892; Thu, 8 Jun 2023 06:21:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWp-0003XK-NX; Thu, 08 Jun 2023 09:18:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6S-0002ON-Vc for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:53 -0400 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6R-0006aH-6A for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:52 -0400 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-4f642a24555so558943e87.3 for ; Thu, 08 Jun 2023 03:42:50 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220969; x=1688812969; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BWWmBI/GczjQJo7V4t04yZusnXF3X7oxx3gC41AP1PM=; b=OSB3NfJwjUoqpqECzeVSOJhDGUjkZYPGaCmO910NQRijaO4xyqs3G2VA3Xj4IrRTm0 lJqysdi+jMgxt26jpq24Ao27k3dN5YPpEElVHkEP+Ix4yzxJdCc3w1yDyBp6DPlkeYQT So57xPdQgH20CMmZWWHHwS+FZ2z/8tx/1tvl+/h6BS1WmyaVJIkDPA6P6oep7AzOLGTO Z32M7sDG7YuwKw7JnOgZ5nSCdQMwH2lbmdRXznz+d4iKloHArlEDS1E4WEJzjLSmhTZy l/XD4GR/jOgYaTL1U3pChVSRBr4DT1Z+AR1pnnHJ36uwpdwTfN4HvbbmuAm3PlsZrwBF HgLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220969; x=1688812969; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BWWmBI/GczjQJo7V4t04yZusnXF3X7oxx3gC41AP1PM=; b=MXiJuW4zY3teVht+IgE8GYsdNc1bcVYMh3BwHUyd/grfNEleciNi1wrW/s2+ZeH7wE RKrsXCcn29gWGKbSfntAPoVgRtxTpRnhVU32KPcgKhmKSJ8BJGMTaubwvfIOd7cewUHR 1cSDqTOPxS7skdsCeU2Bf7wOGSvnLH14t06wQTYQSY+LNsvADPh7GJAZnN5YW+yuiofY KPLGMQ2odKsl6TYkunSm15HQrH1cy63hoCP4vl7R4ubJwXGAED4DxjYt65BfGPvpWHM1 ApRoZbZEbHx3xf/3PEbmQY7DB4cKSnwOi1zc1FCXpJugEJl4b2in4SCg4Mg2Z7ycYYk3 VP2g== X-Gm-Message-State: AC+VfDyhcIok3FVLykSlKmbJVVPTKj2omn2NBVzx05HuNo/bz+3RUbeD 3zUlGvjTvEpJYifNP8xoNBq7hzIzKZY= X-Google-Smtp-Source: ACHHUZ7QUCOVDjleWp7C9T6pJoVhpuFfVGNwj2RCLxOBo9omJ9HvtzBr2EdY0S5l8A7AoOGp6VkVeg== X-Received: by 2002:ac2:4303:0:b0:4f3:5038:5857 with SMTP id l3-20020ac24303000000b004f350385857mr2965845lfh.55.1686220969378; Thu, 08 Jun 2023 03:42:49 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 23/33] target/mips: Add emulation of MXU S32ALN S32LUI insns Date: Thu, 8 Jun 2023 13:42:12 +0300 Message-Id: <20230608104222.1520143-24-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::133; envelope-from=lis8215@gmail.com; helo=mail-lf1-x133.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230509548100007 Content-Type: text/plain; charset="utf-8" These instructions are part of pool16, see the grand opcode organization tree on top of the file. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 122 +++++++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 1 deletion(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 79c36cf54e..d67c6ecb0d 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -494,7 +494,9 @@ enum { * MXU pool 16 */ enum { + OPC_MXU_S32ALN =3D 0x01, OPC_MXU_S32ALNI =3D 0x02, + OPC_MXU_S32LUI =3D 0x03, OPC_MXU_S32NOR =3D 0x04, OPC_MXU_S32AND =3D 0x05, OPC_MXU_S32OR =3D 0x06, @@ -3068,7 +3070,7 @@ static void gen_mxu_d32asum(DisasContext *ctx) * MXU instruction category: Miscellaneous * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * - * S32EXTR + * S32EXTR S32LUI * S32EXTRV * Q16SAT */ @@ -3184,6 +3186,59 @@ static void gen_mxu_s32extrv(DisasContext *ctx) gen_store_mxu_gpr(t0, XRa); } =20 +/* + * S32LUI XRa, S8, optn3 + * Permutate the immediate S8 value to form a word + * to update XRa. + */ +static void gen_mxu_s32lui(DisasContext *ctx) +{ + uint32_t XRa, s8, optn3, pad; + + XRa =3D extract32(ctx->opcode, 6, 4); + s8 =3D extract32(ctx->opcode, 10, 8); + pad =3D extract32(ctx->opcode, 21, 2); + optn3 =3D extract32(ctx->opcode, 23, 3); + + if (unlikely(pad !=3D 0)) { + /* opcode padding incorrect -> do nothing */ + } else if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else { + uint32_t s16; + TCGv t0 =3D tcg_temp_new(); + + switch (optn3) { + case 0: + tcg_gen_movi_tl(t0, s8); + break; + case 1: + tcg_gen_movi_tl(t0, s8 << 8); + break; + case 2: + tcg_gen_movi_tl(t0, s8 << 16); + break; + case 3: + tcg_gen_movi_tl(t0, s8 << 24); + break; + case 4: + tcg_gen_movi_tl(t0, (s8 << 16) | s8); + break; + case 5: + tcg_gen_movi_tl(t0, (s8 << 24) | (s8 << 8)); + break; + case 6: + s16 =3D (uint16_t)(int16_t)(int8_t)s8; + tcg_gen_movi_tl(t0, (s16 << 16) | s16); + break; + case 7: + tcg_gen_movi_tl(t0, (s8 << 24) | (s8 << 16) | (s8 << 8) | s8); + break; + } + gen_store_mxu_gpr(t0, XRa); + } +} + /* * Q16SAT XRa, XRb, XRc * Packs four 16-bit signed integers in XRb and XRc to @@ -3463,6 +3518,65 @@ static void gen_mxu_S32ALNI(DisasContext *ctx) } } =20 +/* + * S32ALN XRc, XRb, XRa, rs + * Arrange bytes from XRb and XRc according to one of five sets of + * rules determined by rs[2:0], and place the result in XRa. + */ +static void gen_mxu_S32ALN(DisasContext *ctx) +{ + uint32_t rs, XRc, XRb, XRa; + + rs =3D extract32(ctx->opcode, 21, 5); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else if (unlikely((XRb =3D=3D 0) && (XRc =3D=3D 0))) { + /* both operands zero registers -> just set destination to all 0s = */ + tcg_gen_movi_tl(mxu_gpr[XRa - 1], 0); + } else { + /* the most general case */ + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGLabel *l_exit =3D gen_new_label(); + TCGLabel *l_b_only =3D gen_new_label(); + TCGLabel *l_c_only =3D gen_new_label(); + + gen_load_mxu_gpr(t0, XRb); + gen_load_mxu_gpr(t1, XRc); + gen_load_gpr(t2, rs); + tcg_gen_andi_tl(t2, t2, 0x07); + + /* do nothing for undefined cases */ + tcg_gen_brcondi_tl(TCG_COND_GE, t2, 5, l_exit); + + tcg_gen_brcondi_tl(TCG_COND_EQ, t2, 0, l_b_only); + tcg_gen_brcondi_tl(TCG_COND_EQ, t2, 4, l_c_only); + + tcg_gen_shli_tl(t2, t2, 3); + tcg_gen_subfi_tl(t3, 32, t2); + + tcg_gen_shl_tl(t0, t0, t2); + tcg_gen_shr_tl(t1, t1, t3); + tcg_gen_or_tl(mxu_gpr[XRa - 1], t0, t1); + tcg_gen_br(l_exit); + + gen_set_label(l_b_only); + gen_store_mxu_gpr(t0, XRa); + tcg_gen_br(l_exit); + + gen_set_label(l_c_only); + gen_store_mxu_gpr(t1, XRa); + + gen_set_label(l_exit); + } +} + /* * S32MADD XRa, XRd, rb, rc * 32 to 64 bit signed multiply with subsequent add @@ -3891,9 +4005,15 @@ static void decode_opc_mxu__pool16(DisasContext *ctx) uint32_t opcode =3D extract32(ctx->opcode, 18, 3); =20 switch (opcode) { + case OPC_MXU_S32ALN: + gen_mxu_S32ALN(ctx); + break; case OPC_MXU_S32ALNI: gen_mxu_S32ALNI(ctx); break; + case OPC_MXU_S32LUI: + gen_mxu_s32lui(ctx); + break; case OPC_MXU_S32NOR: gen_mxu_S32NOR(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230412; cv=none; d=zohomail.com; s=zohoarc; b=l5LFQb3JYZAjVDMQHD4ewv86xDiJTAqQRTxeeAEi3/pL7FsTDhA9F+wtz5ZGQoB14ZxCtxEadX+pDbh7Vr2iO+uweh9MjpCOKuubNxbPguiCAfGdxj3uR53XVuwPQFQzzLCSDqC5/QkoM1YeuOK7So2thXko7eAL4YP+i/F7yIE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230412; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=1csWmmT3ijoAR1lJUCJk3GmLmgxjOq7UEKKYd20Tasg=; b=PUFHOx6Pv396yjMwbgWt5be61HUQous0BqnYFFFSFhttm3EICWaU6vJ3whEcSqE7E1QTt3yKSvZML0X0aURKjNyhmUcx5XFzOB6oeDEInDJrnngBjhvzoUB5iPsM3TWx7dO1tpmW/HbbWoTZyyw5NBmEd4CSW9pj95gk7VlZBok= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230411991830.6355677024661; Thu, 8 Jun 2023 06:20:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWz-0003pa-Bz; Thu, 08 Jun 2023 09:18:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6T-0002OX-P5 for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:53 -0400 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6S-0006af-5C for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:53 -0400 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-4f61d79b0f2so572189e87.3 for ; Thu, 08 Jun 2023 03:42:51 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220970; x=1688812970; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1csWmmT3ijoAR1lJUCJk3GmLmgxjOq7UEKKYd20Tasg=; b=OEyyw7Udw3tZSVxS/Dez+hujD/eeYF3BNlwhDqU8T6s70sxiD+4PJQrAQTvwvTTor/ PTPlXk9OQ1GyDkW+787OpH+XgMO0SBct/epYNjqu9yESpT1OIHtJPM3zW+/qhllHxDIo JrS3F5mcEtGCEm0ro6wYecVOUXWaWtT/JWsC3Kw1pxmc0jmT8F3idBqPEO6M3VXQGAYe +nc1DpVxyRURuVlbzEjCpOh4p0if570cNlle5EqgH25d23WBUvon2/AJt6DqBwsfZ32K Ln5oGaCu0yMx0jkJ+fOi/8rtwAfT0SWNfVj8wSHXZML1Bi4ZEd6n0tTW6Vl4eqvD0ITL sBnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220970; x=1688812970; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1csWmmT3ijoAR1lJUCJk3GmLmgxjOq7UEKKYd20Tasg=; b=GSA3jZDgDNqVjZ1/Utq+a//nGf5qNhfhGooRiYWzgwLTq4WwBCKY63n6bZJS2ib/Vp gJNaBpgKPLOx345mUlTHzEC7+Bsg4qSv8S7N1Ir6NmBksiibSOOj/keBtSpVBH2SSUXv QaGtlO3OBZDzqPaFmQYqAO2JipkqGEsza7xSrMg85+KU3EZ0ndlrqCG09TCoGFmuSA76 QtrxRBzlfDnSdvVRIWVAMC6F5SQUJGJHcyrXNu4VKjlSm089lUrxvl2Ojx1a1niY8JhT 96dRYmF6gwMMrSuLOtOWO3WslZo4vOWkyGc5nrGYaDopn00bM9KIjW049ltadwMSok6W VhBQ== X-Gm-Message-State: AC+VfDz5TEJ2YspSzpe//9PVJSRi7w9Oe92Z6PhirDZ9u8FptTJjToJB qbifHd7mJ/bKZcAyJoDN8BC+ivLPlvs= X-Google-Smtp-Source: ACHHUZ6wqIe8OjD1jcI0URh7jv7D5VR5vk8lQgPdlkthYMxWzlBUC9U431PTIANj289kK5JKTJNzLw== X-Received: by 2002:a19:ca5b:0:b0:4f6:4d92:a001 with SMTP id h27-20020a19ca5b000000b004f64d92a001mr603893lfj.27.1686220970352; Thu, 08 Jun 2023 03:42:50 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 24/33] target/mips: Add emulation of MXU D32SARL D32SARW instructions Date: Thu, 8 Jun 2023 13:42:13 +0300 Message-Id: <20230608104222.1520143-25-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::12e; envelope-from=lis8215@gmail.com; helo=mail-lf1-x12e.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230413051100001 Content-Type: text/plain; charset="utf-8" These instructions are dual 32-bit arithmetic shift right and pack LSBs to 2x 16-bit into a MXU register. The difference is the shift amount source: immediate or GP reg. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 59 +++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index d67c6ecb0d..da6ffffaa4 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -396,6 +396,7 @@ enum { OPC_MXU_S16SDI =3D 0x2D, OPC_MXU_S32M2I =3D 0x2E, OPC_MXU_S32I2M =3D 0x2F, + OPC_MXU_D32SARL =3D 0x32, OPC_MXU__POOL19 =3D 0x38, }; =20 @@ -494,6 +495,7 @@ enum { * MXU pool 16 */ enum { + OPC_MXU_D32SARW =3D 0x00, OPC_MXU_S32ALN =3D 0x01, OPC_MXU_S32ALNI =3D 0x02, OPC_MXU_S32LUI =3D 0x03, @@ -1691,6 +1693,57 @@ static void gen_mxu_S32XOR(DisasContext *ctx) } } =20 +/* + * MXU instruction category: shift + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * D32SLL D32SLR D32SAR D32SARL + * D32SLLV D32SLRV D32SARV D32SARW + * Q16SLL Q16SLR Q16SAR + * Q16SLLV Q16SLRV Q16SARV + */ + +/* + * D32SARL XRa, XRb, XRc, SFT4 + * Dual shift arithmetic right 32-bit integers in XRb and XRc + * to SFT4 bits (0..15). Pack 16 LSBs of each into XRa. + * + * D32SARW XRa, XRb, XRc, rb + * Dual shift arithmetic right 32-bit integers in XRb and XRc + * to rb[3:0] bits. Pack 16 LSBs of each into XRa. + */ +static void gen_mxu_d32sarl(DisasContext *ctx, bool sarw) +{ + uint32_t XRa, XRb, XRc, rb; + + XRa =3D extract32(ctx->opcode, 6, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + rb =3D extract32(ctx->opcode, 21, 5); + + if (unlikely(XRa =3D=3D 0)) { + /* destination is zero register -> do nothing */ + } else { + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + + if (!sarw) { + /* Make SFT4 from rb field */ + tcg_gen_movi_tl(t2, rb >> 1); + } else { + gen_load_gpr(t2, rb); + tcg_gen_andi_tl(t2, t2, 0x0f); + } + gen_load_mxu_gpr(t0, XRb); + gen_load_mxu_gpr(t1, XRc); + tcg_gen_sar_tl(t0, t0, t2); + tcg_gen_sar_tl(t1, t1, t2); + tcg_gen_extract_tl(t2, t1, 0, 16); + tcg_gen_deposit_tl(t2, t2, t0, 16, 16); + gen_store_mxu_gpr(t2, XRa); + } +} =20 /* * MXU instruction category max/min/avg @@ -4005,6 +4058,9 @@ static void decode_opc_mxu__pool16(DisasContext *ctx) uint32_t opcode =3D extract32(ctx->opcode, 18, 3); =20 switch (opcode) { + case OPC_MXU_D32SARW: + gen_mxu_d32sarl(ctx, true); + break; case OPC_MXU_S32ALN: gen_mxu_S32ALN(ctx); break; @@ -4216,6 +4272,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_S16SDI: gen_mxu_s16std(ctx, true); break; + case OPC_MXU_D32SARL: + gen_mxu_d32sarl(ctx, false); + break; case OPC_MXU__POOL19: decode_opc_mxu__pool19(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230454; cv=none; d=zohomail.com; s=zohoarc; b=JDSdFUC5Xi0vpAQmvNNkK4hlbV3eACNM9Dyukw3pbZiSCDzl2aIm71OLt28Uncl8dfEOqFuwh4JaQu/1pGJFX3n3T4459+Y7kyPSDYqZt/DL+KAIGzxCIQoY+7Euq4wOJ5wVbrqWtaGLHoRbaGpl4M1LIJEAoqG9HuROiAcfRUA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230454; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=nIt74xnOWuiFkSLaBnFmfokWx+l2oBjGHuHY8MrmuKU=; b=RhPyXLS9/BDFaxw13onKH5n7BOK+P2aZ/u0Om/s41ttGtNe+uXTt9kScCzUJ+Tz6nMAMyJY32L+zGcdVId3Fw+Dj39g9rIgbXEOqYeuzg8Y24WDxiSmEkTevtKHT0qQQbYLGlW4vx+KZmPwJzJC7qZFeZB2Oo53ZN1Ig3N+12vk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230453938941.9187433396609; Thu, 8 Jun 2023 06:20:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FX4-00040z-Tp; Thu, 08 Jun 2023 09:18:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6U-0002PL-QR for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:54 -0400 Received: from mail-lf1-x136.google.com ([2a00:1450:4864:20::136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6T-0006au-4Q for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:54 -0400 Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-4f4b2bc1565so570094e87.2 for ; Thu, 08 Jun 2023 03:42:52 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220971; x=1688812971; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nIt74xnOWuiFkSLaBnFmfokWx+l2oBjGHuHY8MrmuKU=; b=MqvuwpGDW8YqcrGnnkGq6qpehawt0ZqbBpBmVUu/qXy63NNKtJZYr1y6h6RCM/1Crv KCIiqOXhI1bXSwcHZ255wdpKwufOJw5rQK5vqrFSV9eUz8Wl7qLUc9G9UkCADCymR7D/ 3xoU/wXfZ3VA0QqxPL5Vx9HPHmuOB+S+UuTppnAhN5l+e6XwCCgknXkZjikzu2U2kLak 7TeENdeQcpHcrFhgZaPGB+rJOdfgPcyGNsfb6CJpcUYPIGnGKMhWKzyVY9BQAXGX6GQe 2ojWSuXphIJqbNEvzqg3STTvzwhHGJqeejwWCuvw+JmM2VBvQGhd9bRJYtpjKYNaJuo2 wGcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220971; x=1688812971; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nIt74xnOWuiFkSLaBnFmfokWx+l2oBjGHuHY8MrmuKU=; b=DbO8ZqdwD6GtPXxB+jaU8bJ0kS+j6edM6LBRJZSBQtseNPVjQKDm+vDhhH6Z9SPVcl ZPkpC9QS3APveWcclNzfCVysuTcaT/uuV8MXiGp+yLra08WJLIBpjdpCEVhev+yFh2SG 3hL37kt8WlGiQYi7WC2o1z+0bEt2My4ONSJuQUugPOM7ANkHqMP6SgClg50sFXFA/vvV XebYQp05JxqAWq1NpLOAk1lZhWcDnkOjUjlmCb9rrJowNpZTQfrkcDwg8lTkAH4COUNb 1OREWzilCGHM/5KGjiIi2ULVSw21e9Vh7alII26RPP36W6obzmkU1MfvTomLtyZ0byqP yd2Q== X-Gm-Message-State: AC+VfDzKxEDkiH+gthh+V2gYPzZcfN+na8jm1ScZ+nMob0ilaHtW0YXA 1WPtQvESXO+n1JL7WdJ9R+o1X2ru/qA= X-Google-Smtp-Source: ACHHUZ5vL7w7agjT93vs7jA8oI9aOFx/m/WBZHm4kaxLljQKsizTWAiTuDNq63HI18QNrBSG5Thd0Q== X-Received: by 2002:ac2:44b7:0:b0:4f6:40e1:4a92 with SMTP id c23-20020ac244b7000000b004f640e14a92mr2119910lfm.13.1686220971359; Thu, 08 Jun 2023 03:42:51 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 25/33] target/mips: Add emulation of MXU D32SLL D32SLR D32SAR instructions Date: Thu, 8 Jun 2023 13:42:14 +0300 Message-Id: <20230608104222.1520143-26-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::136; envelope-from=lis8215@gmail.com; helo=mail-lf1-x136.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230455220100003 Content-Type: text/plain; charset="utf-8" These instructions are same data shift in various directions, thus one generation function is implemented for all three. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 55 +++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index da6ffffaa4..93644d74e2 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -396,7 +396,10 @@ enum { OPC_MXU_S16SDI =3D 0x2D, OPC_MXU_S32M2I =3D 0x2E, OPC_MXU_S32I2M =3D 0x2F, + OPC_MXU_D32SLL =3D 0x30, + OPC_MXU_D32SLR =3D 0x31, OPC_MXU_D32SARL =3D 0x32, + OPC_MXU_D32SAR =3D 0x33, OPC_MXU__POOL19 =3D 0x38, }; =20 @@ -1703,6 +1706,49 @@ static void gen_mxu_S32XOR(DisasContext *ctx) * Q16SLLV Q16SLRV Q16SARV */ =20 +/* + * D32SLL XRa, XRd, XRb, XRc, SFT4 + * Dual 32-bit shift left from XRb and XRc to SFT4 + * bits (0..15). Store to XRa and XRd respectively. + * D32SLR XRa, XRd, XRb, XRc, SFT4 + * Dual 32-bit shift logic right from XRb and XRc + * to SFT4 bits (0..15). Store to XRa and XRd respectively. + * D32SAR XRa, XRd, XRb, XRc, SFT4 + * Dual 32-bit shift arithmetic right from XRb and XRc + * to SFT4 bits (0..15). Store to XRa and XRd respectively. + */ +static void gen_mxu_d32sxx(DisasContext *ctx, bool right, bool arithmetic) +{ + uint32_t XRa, XRb, XRc, XRd, sft4; + + XRa =3D extract32(ctx->opcode, 6, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRd =3D extract32(ctx->opcode, 18, 4); + sft4 =3D extract32(ctx->opcode, 22, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t0, XRb); + gen_load_mxu_gpr(t1, XRc); + + if (right) { + if (arithmetic) { + tcg_gen_sari_tl(t0, t0, sft4); + tcg_gen_sari_tl(t1, t1, sft4); + } else { + tcg_gen_shri_tl(t0, t0, sft4); + tcg_gen_shri_tl(t1, t1, sft4); + } + } else { + tcg_gen_shli_tl(t0, t0, sft4); + tcg_gen_shli_tl(t1, t1, sft4); + } + gen_store_mxu_gpr(t0, XRa); + gen_store_mxu_gpr(t1, XRd); +} + /* * D32SARL XRa, XRb, XRc, SFT4 * Dual shift arithmetic right 32-bit integers in XRb and XRc @@ -4272,9 +4318,18 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_S16SDI: gen_mxu_s16std(ctx, true); break; + case OPC_MXU_D32SLL: + gen_mxu_d32sxx(ctx, false, false); + break; + case OPC_MXU_D32SLR: + gen_mxu_d32sxx(ctx, true, false); + break; case OPC_MXU_D32SARL: gen_mxu_d32sarl(ctx, false); break; + case OPC_MXU_D32SAR: + gen_mxu_d32sxx(ctx, true, true); + break; case OPC_MXU__POOL19: decode_opc_mxu__pool19(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230507; cv=none; d=zohomail.com; s=zohoarc; b=ZxgYJlS2CV610IPpNhOgtIfntPGEznv6Bdj2ggL7580AJ0tfTniEWkT1fb6uO5HuKGwJs4I92G1+tnCdElFw/Nf6JD68tyemO3xjuFjx5YBvHcTfWNCajRww4QZVInFjQ5HrCZ5CoYqoQw1Cwo780GJD+JPd8AIn9ZHhkeAB02k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230507; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=6tYw+AoezPC+Runh3S/Ff5huRkr12otKbVI1apGCIVA=; b=a+Y4ubCyNvX0zuopx8FppgNh5ivkz75lZTUP3SDecI3GmoVzyCR4AS0aDYtXqmSdB4jHx9eY+h2L3O6aUIDXk1fwx4uMkjNX3HxOQBgbdJYHJjRxa8p4GJKygUl75O1vgslfnbcAdPX+c/tkVgTvrRHRiOIv/06pKEMhvlOs2U0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230507677661.5152938071519; Thu, 8 Jun 2023 06:21:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWz-0003pY-4X; Thu, 08 Jun 2023 09:18:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6X-0002Q2-31 for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:57 -0400 Received: from mail-lf1-x134.google.com ([2a00:1450:4864:20::134]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6V-0006bl-8o for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:56 -0400 Received: by mail-lf1-x134.google.com with SMTP id 2adb3069b0e04-4f62d93f38aso575702e87.0 for ; Thu, 08 Jun 2023 03:42:54 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220973; x=1688812973; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6tYw+AoezPC+Runh3S/Ff5huRkr12otKbVI1apGCIVA=; b=JtHImBG+bfLE08Ek9Trs80hO62LAB/94teVgVhb7daATauWqpULjVx2jKhFuZYkctd jcl67YoLYLYT0wsVyQ1X+9kg4POqKn1h/KPcCsvHe0h1Pgv/i40a2iYtZHFHg+g6IG+r NzPzXLTY8cEmPYD0B9GxFkEgi6VFKG4bT3mM+aElhUvFQm29nm0zeKYWCU8O3Hq8sxc1 Vb4TV2H9sznc2rQc/zgJ0MjVTvJ7kGl7smN34CVImKJRbqZTF5mVqv5+1zxAvM+/t/Vt E2VreETSu+99L56pzB2+Hvib14YTpv6Uwn+0Ev996nBrHYWDyrKEtH6PLih11RIdaREK 5/gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220973; x=1688812973; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6tYw+AoezPC+Runh3S/Ff5huRkr12otKbVI1apGCIVA=; b=loZZsCsSGCXBINFdXaZB7yI9sTDGsWmVZwHLfd07Yf7WUlHtMBAw4EtUScc8YcNbMC 1xruqJ3KbOzLwomUW7p6GoCHZnxRcASOna8zFXRAD/yimfwJITmC50vTuptdDRtZNYiO wNFu1nvUqIrHP/fLQSxrOzxxyvOllOKBYQqkolPVIRs4eGo/MoCOAXPKSULecKyWlhZw Z1XMAgdplNb9dSL8dsNzADitEZcLddPNyOG3jb/CRYFte0KwQ7azAsU4YbU5wkaas4uO zyyDegI6d/uNtIRCQKVI5YqeTcSr7z8Xu8svV6vvdv589ujIVsj+qQkyo1D/Nq52wSL7 uNuw== X-Gm-Message-State: AC+VfDyUo37UYYE0G523Q4m/jDRXLKiMDFfgOy7Xf6sXNdWDXH8H3F9j 53+v8iCaA2BLvIO/uKJxmsWFcqq3XeY= X-Google-Smtp-Source: ACHHUZ6EYJ7ZizzXpZaToxIhrVlbJSqQhkvxOobpG+OqPxB+KEoeTOnypXSQX4YUx3LnBK3x764uZA== X-Received: by 2002:a19:4f1b:0:b0:4f6:54f1:ea37 with SMTP id d27-20020a194f1b000000b004f654f1ea37mr148914lfb.42.1686220973022; Thu, 08 Jun 2023 03:42:53 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 26/33] target/mips: Add emulation of MXU Q16SLL Q16SLR Q16SAR instructions Date: Thu, 8 Jun 2023 13:42:15 +0300 Message-Id: <20230608104222.1520143-27-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::134; envelope-from=lis8215@gmail.com; helo=mail-lf1-x134.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230508656100001 Content-Type: text/plain; charset="utf-8" These instructions are same data shift in various directions, thus one generation function is implemented for all three. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 78 +++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 93644d74e2..418c02eb8e 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -400,6 +400,9 @@ enum { OPC_MXU_D32SLR =3D 0x31, OPC_MXU_D32SARL =3D 0x32, OPC_MXU_D32SAR =3D 0x33, + OPC_MXU_Q16SLL =3D 0x34, + OPC_MXU_Q16SLR =3D 0x35, + OPC_MXU_Q16SAR =3D 0x37, OPC_MXU__POOL19 =3D 0x38, }; =20 @@ -1791,6 +1794,72 @@ static void gen_mxu_d32sarl(DisasContext *ctx, bool = sarw) } } =20 +/* + * Q16SLL XRa, XRd, XRb, XRc, SFT4 + * Quad 16-bit shift left from XRb and XRc to SFT4 + * bits (0..15). Store to XRa and XRd respectively. + * Q16SLR XRa, XRd, XRb, XRc, SFT4 + * Quad 16-bit shift logic right from XRb and XRc + * to SFT4 bits (0..15). Store to XRa and XRd respectively. + * Q16SAR XRa, XRd, XRb, XRc, SFT4 + * Quad 16-bit shift arithmetic right from XRb and XRc + * to SFT4 bits (0..15). Store to XRa and XRd respectively. + */ +static void gen_mxu_q16sxx(DisasContext *ctx, bool right, bool arithmetic) +{ + uint32_t XRa, XRb, XRc, XRd, sft4; + + XRa =3D extract32(ctx->opcode, 6, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRd =3D extract32(ctx->opcode, 18, 4); + sft4 =3D extract32(ctx->opcode, 22, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t0, XRb); + gen_load_mxu_gpr(t2, XRc); + + if (arithmetic) { + tcg_gen_sextract_tl(t1, t0, 16, 16); + tcg_gen_sextract_tl(t0, t0, 0, 16); + tcg_gen_sextract_tl(t3, t2, 16, 16); + tcg_gen_sextract_tl(t2, t2, 0, 16); + } else { + tcg_gen_extract_tl(t1, t0, 16, 16); + tcg_gen_extract_tl(t0, t0, 0, 16); + tcg_gen_extract_tl(t3, t2, 16, 16); + tcg_gen_extract_tl(t2, t2, 0, 16); + } + + if (right) { + if (arithmetic) { + tcg_gen_sari_tl(t0, t0, sft4); + tcg_gen_sari_tl(t1, t1, sft4); + tcg_gen_sari_tl(t2, t2, sft4); + tcg_gen_sari_tl(t3, t3, sft4); + } else { + tcg_gen_shri_tl(t0, t0, sft4); + tcg_gen_shri_tl(t1, t1, sft4); + tcg_gen_shri_tl(t2, t2, sft4); + tcg_gen_shri_tl(t3, t3, sft4); + } + } else { + tcg_gen_shli_tl(t0, t0, sft4); + tcg_gen_shli_tl(t1, t1, sft4); + tcg_gen_shli_tl(t2, t2, sft4); + tcg_gen_shli_tl(t3, t3, sft4); + } + tcg_gen_deposit_tl(t0, t0, t1, 16, 16); + tcg_gen_deposit_tl(t2, t2, t3, 16, 16); + + gen_store_mxu_gpr(t0, XRa); + gen_store_mxu_gpr(t2, XRd); +} + /* * MXU instruction category max/min/avg * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -4330,6 +4399,15 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_D32SAR: gen_mxu_d32sxx(ctx, true, true); break; + case OPC_MXU_Q16SLL: + gen_mxu_q16sxx(ctx, false, false); + break; + case OPC_MXU_Q16SLR: + gen_mxu_q16sxx(ctx, true, false); + break; + case OPC_MXU_Q16SAR: + gen_mxu_q16sxx(ctx, true, true); + break; case OPC_MXU__POOL19: decode_opc_mxu__pool19(ctx); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230391; cv=none; d=zohomail.com; s=zohoarc; b=glSFYuFccxkgL/ZRql0CbB3cLZEOSrZj0WEnndkT1h8ds/ulQA48SSbpr9HhDcGCFdvkbqb6AsQeYMVjFZ0AgVkvXhDyMIqgwJGbVrkywi+4sZn5Jok1n+KgIkJRRUik7k2sBrh7KmOpe+NV/6rm//H60Ttjaawv1/2MSNtNtWY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230391; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=iIX5uN1RZ3+Do9/+iBI35ySrInqmWigdgngoGpLRp+8=; b=cONHNhVKBjBFdlSvjx9osDEpVtUMOBvr44x2igGzAihOJVIkmLcMfRA4Ns4AiadSI3eTE1IALdzQIZ7RQ5zgWtocOqYcvwgBFM4G2/AM6uicE6OJMuYKu/hjcaAq3BvY2a30SYPwfMUUUYv+PMy2SPIzLJ58mAtYGIIUq0QWf4Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230391220666.7874843881949; Thu, 8 Jun 2023 06:19:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWv-0003kA-Nb; Thu, 08 Jun 2023 09:18:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6a-0002RU-9Z for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:43:00 -0400 Received: from mail-lf1-x136.google.com ([2a00:1450:4864:20::136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6W-0006cy-To for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:59 -0400 Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-4f4b384c09fso551056e87.3 for ; Thu, 08 Jun 2023 03:42:56 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220974; x=1688812974; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=iIX5uN1RZ3+Do9/+iBI35ySrInqmWigdgngoGpLRp+8=; b=qopJ/wRDG4FV51/g5ni7bI/wgzXekSmUr95X696Y1DK4jAd2MSEX80/W8OD0UrQm6n 86plHbP5g8HrJaLgzg+idpFN0qYCkYdwbsKp8InB5CJ25R206KSyopIBDiZkpJqmtvY4 PM3rG60go/UYUbr/FtSMMcvbEp3a9WrLesAseDm1obB8ozlHJu04ZoX8Nnu0kffLnQIs QotnjfbMkfjFJeaQkTvFx3D4U2fM3XNTL0Phe6D5EXB8K9s2jG3ZivO6YNiYsfjfiDCs EdDGT7YuxApe2ALsOuGQibfKfKiEqS3tvOn99ZlPU4B65c/GORtEuillqcrq941mwnxf oIfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220974; x=1688812974; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iIX5uN1RZ3+Do9/+iBI35ySrInqmWigdgngoGpLRp+8=; b=RN7RnySpc6OWmuvilp5FsFmnrX4WOsx+3XDeNochnQU3ArO5np+lEJj8Bb9W6KfVMy 9IY3i6xugXaOFChrByIal5iKNes84kDg3YkYLX7J7Z1lBDo0YYb2ZkmaDRK9dJe+/mu3 bgn5g7JWwC30LiLKUBkBpMZRYqGpGzPaVFdfw2Am2iagfTFza3qDIPZzSHOcjyvuAZhf uS35C0gopKoNzKVsTd6WiaWujtbyaFw03goWClRkdpY8T4l8FBs8RBbakykKqkNt5x93 YlX9nUAQJuWNHP19SXqoldv+JdjesLOYZ6n8wTO4v6QdIw2OV6AR5EZoKJ1/CUHyRmLl xoUA== X-Gm-Message-State: AC+VfDzmdzQ6A1uSvSc1eEnKoOoZX0LngpwGQZezlY9446kSUqYpB7vv 9A0kaLbudg/M1bZ8zumVD90EcrYo7EU= X-Google-Smtp-Source: ACHHUZ6wlyZleunOMyF1ptixqsl8p6j9LSTHsUgcmPGyb07gwqw2Di2PMQ0Dq1zB96x4x+AtbRxTXQ== X-Received: by 2002:a05:6512:508:b0:4f6:3000:94a0 with SMTP id o8-20020a056512050800b004f6300094a0mr3130664lfb.61.1686220974377; Thu, 08 Jun 2023 03:42:54 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 27/33] target/mips: Add emulation of MXU D32/Q16- SLLV/SLRV/SARV instructions Date: Thu, 8 Jun 2023 13:42:16 +0300 Message-Id: <20230608104222.1520143-28-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::136; envelope-from=lis8215@gmail.com; helo=mail-lf1-x136.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230393537100003 These instructions are counterparts for D32/Q16-SLL/SLR/SAR with difference that the shift amount placed into GPR. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 166 +++++++++++++++++++++++++++++++- 1 file changed, 162 insertions(+), 4 deletions(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 418c02eb8e..ccc375db87 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -320,10 +320,10 @@ * =E2=94=9C=E2=94=80 110001 =E2=94=80 OPC_MXU_D32SLR 20..18 * =E2=94=9C=E2=94=80 110010 =E2=94=80 OPC_MXU_D32SARL =E2=94=8C= =E2=94=80 000 =E2=94=80 OPC_MXU_D32SLLV * =E2=94=9C=E2=94=80 110011 =E2=94=80 OPC_MXU_D32SAR =E2=94=9C= =E2=94=80 001 =E2=94=80 OPC_MXU_D32SLRV - * =E2=94=9C=E2=94=80 110100 =E2=94=80 OPC_MXU_Q16SLL =E2=94=9C= =E2=94=80 010 =E2=94=80 OPC_MXU_D32SARV - * =E2=94=9C=E2=94=80 110101 =E2=94=80 OPC_MXU_Q16SLR =E2=94=9C= =E2=94=80 011 =E2=94=80 OPC_MXU_Q16SLLV - * =E2=94=82 =E2=94=9C=E2=94=80 100 = =E2=94=80 OPC_MXU_Q16SLRV - * =E2=94=9C=E2=94=80 110110 =E2=94=80 OPC_MXU__POOL18 =E2=94=80= =E2=94=B4=E2=94=80 101 =E2=94=80 OPC_MXU_Q16SARV + * =E2=94=9C=E2=94=80 110100 =E2=94=80 OPC_MXU_Q16SLL =E2=94=9C= =E2=94=80 011 =E2=94=80 OPC_MXU_D32SARV + * =E2=94=9C=E2=94=80 110101 =E2=94=80 OPC_MXU_Q16SLR =E2=94=9C= =E2=94=80 100 =E2=94=80 OPC_MXU_Q16SLLV + * =E2=94=82 =E2=94=9C=E2=94=80 101 = =E2=94=80 OPC_MXU_Q16SLRV + * =E2=94=9C=E2=94=80 110110 =E2=94=80 OPC_MXU__POOL18 =E2=94=80= =E2=94=B4=E2=94=80 111 =E2=94=80 OPC_MXU_Q16SARV * =E2=94=82 * =E2=94=9C=E2=94=80 110111 =E2=94=80 OPC_MXU_Q16SAR * =E2=94=82 23..22 @@ -402,6 +402,7 @@ enum { OPC_MXU_D32SAR =3D 0x33, OPC_MXU_Q16SLL =3D 0x34, OPC_MXU_Q16SLR =3D 0x35, + OPC_MXU__POOL18 =3D 0x36, OPC_MXU_Q16SAR =3D 0x37, OPC_MXU__POOL19 =3D 0x38, }; @@ -522,6 +523,18 @@ enum { OPC_MXU_LXHU =3D 0x05, }; =20 +/* + * MXU pool 18 + */ +enum { + OPC_MXU_D32SLLV =3D 0x00, + OPC_MXU_D32SLRV =3D 0x01, + OPC_MXU_D32SARV =3D 0x03, + OPC_MXU_Q16SLLV =3D 0x04, + OPC_MXU_Q16SLRV =3D 0x05, + OPC_MXU_Q16SARV =3D 0x07, +}; + /* * MXU pool 19 */ @@ -1752,6 +1765,50 @@ static void gen_mxu_d32sxx(DisasContext *ctx, bool r= ight, bool arithmetic) gen_store_mxu_gpr(t1, XRd); } =20 +/* + * D32SLLV XRa, XRd, rs + * Dual 32-bit shift left from XRa and XRd to rs[3:0] + * bits. Store back to XRa and XRd respectively. + * D32SLRV XRa, XRd, rs + * Dual 32-bit shift logic right from XRa and XRd to rs[3:0] + * bits. Store back to XRa and XRd respectively. + * D32SARV XRa, XRd, rs + * Dual 32-bit shift arithmetic right from XRa and XRd to rs[3:0] + * bits. Store back to XRa and XRd respectively. + */ +static void gen_mxu_d32sxxv(DisasContext *ctx, bool right, bool arithmetic) +{ + uint32_t XRa, XRd, rs; + + XRa =3D extract32(ctx->opcode, 10, 4); + XRd =3D extract32(ctx->opcode, 14, 4); + rs =3D extract32(ctx->opcode, 21, 5); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t0, XRa); + gen_load_mxu_gpr(t1, XRd); + gen_load_gpr(t2, rs); + tcg_gen_andi_tl(t2, t2, 0x0f); + + if (right) { + if (arithmetic) { + tcg_gen_sar_tl(t0, t0, t2); + tcg_gen_sar_tl(t1, t1, t2); + } else { + tcg_gen_shr_tl(t0, t0, t2); + tcg_gen_shr_tl(t1, t1, t2); + } + } else { + tcg_gen_shl_tl(t0, t0, t2); + tcg_gen_shl_tl(t1, t1, t2); + } + gen_store_mxu_gpr(t0, XRa); + gen_store_mxu_gpr(t1, XRd); +} + /* * D32SARL XRa, XRb, XRc, SFT4 * Dual shift arithmetic right 32-bit integers in XRb and XRc @@ -1860,6 +1917,74 @@ static void gen_mxu_q16sxx(DisasContext *ctx, bool r= ight, bool arithmetic) gen_store_mxu_gpr(t2, XRd); } =20 +/* + * Q16SLLV XRa, XRd, rs + * Quad 16-bit shift left from XRa and XRd to rs[3:0] + * bits. Store to XRa and XRd respectively. + * Q16SLRV XRa, XRd, rs + * Quad 16-bit shift logic right from XRa and XRd to rs[3:0] + * bits. Store to XRa and XRd respectively. + * Q16SARV XRa, XRd, rs + * Quad 16-bit shift arithmetic right from XRa and XRd to rs[3:0] + * bits. Store to XRa and XRd respectively. + */ +static void gen_mxu_q16sxxv(DisasContext *ctx, bool right, bool arithmetic) +{ + uint32_t XRa, XRd, rs; + + XRa =3D extract32(ctx->opcode, 10, 4); + XRd =3D extract32(ctx->opcode, 14, 4); + rs =3D extract32(ctx->opcode, 21, 5); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv t5 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t0, XRa); + gen_load_mxu_gpr(t2, XRd); + gen_load_gpr(t5, rs); + tcg_gen_andi_tl(t5, t5, 0x0f); + + + if (arithmetic) { + tcg_gen_sextract_tl(t1, t0, 16, 16); + tcg_gen_sextract_tl(t0, t0, 0, 16); + tcg_gen_sextract_tl(t3, t2, 16, 16); + tcg_gen_sextract_tl(t2, t2, 0, 16); + } else { + tcg_gen_extract_tl(t1, t0, 16, 16); + tcg_gen_extract_tl(t0, t0, 0, 16); + tcg_gen_extract_tl(t3, t2, 16, 16); + tcg_gen_extract_tl(t2, t2, 0, 16); + } + + if (right) { + if (arithmetic) { + tcg_gen_sar_tl(t0, t0, t5); + tcg_gen_sar_tl(t1, t1, t5); + tcg_gen_sar_tl(t2, t2, t5); + tcg_gen_sar_tl(t3, t3, t5); + } else { + tcg_gen_shr_tl(t0, t0, t5); + tcg_gen_shr_tl(t1, t1, t5); + tcg_gen_shr_tl(t2, t2, t5); + tcg_gen_shr_tl(t3, t3, t5); + } + } else { + tcg_gen_shl_tl(t0, t0, t5); + tcg_gen_shl_tl(t1, t1, t5); + tcg_gen_shl_tl(t2, t2, t5); + tcg_gen_shl_tl(t3, t3, t5); + } + tcg_gen_deposit_tl(t0, t0, t1, 16, 16); + tcg_gen_deposit_tl(t2, t2, t3, 16, 16); + + gen_store_mxu_gpr(t0, XRa); + gen_store_mxu_gpr(t2, XRd); +} + /* * MXU instruction category max/min/avg * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -4238,6 +4363,36 @@ static void decode_opc_mxu__pool17(DisasContext *ctx) } } =20 +static void decode_opc_mxu__pool18(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 18, 3); + + switch (opcode) { + case OPC_MXU_D32SLLV: + gen_mxu_d32sxxv(ctx, false, false); + break; + case OPC_MXU_D32SLRV: + gen_mxu_d32sxxv(ctx, true, false); + break; + case OPC_MXU_D32SARV: + gen_mxu_d32sxxv(ctx, true, true); + break; + case OPC_MXU_Q16SLLV: + gen_mxu_q16sxxv(ctx, false, false); + break; + case OPC_MXU_Q16SLRV: + gen_mxu_q16sxxv(ctx, true, false); + break; + case OPC_MXU_Q16SARV: + gen_mxu_q16sxxv(ctx, true, true); + break; + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + static void decode_opc_mxu__pool19(DisasContext *ctx) { uint32_t opcode =3D extract32(ctx->opcode, 22, 2); @@ -4402,6 +4557,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_Q16SLL: gen_mxu_q16sxx(ctx, false, false); break; + case OPC_MXU__POOL18: + decode_opc_mxu__pool18(ctx); + break; case OPC_MXU_Q16SLR: gen_mxu_q16sxx(ctx, true, false); break; --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230462; cv=none; d=zohomail.com; s=zohoarc; b=ctbTPsORLGCt/nUs3kKUdyE/Bczg7kSH4Mo5pFPfAC9CbD1R/qtV7MypEo4h2hsa++POcN55O8yW+ye0SwquClT9E67ya+4j0o/POP3HHgrhvbMvYf3/w4LA4BRWSNCwAJvXhS2AB1ebc/4IqK7jMT2X4XqIm6kRNRvYwwptL4Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230462; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Oukn5IHKaqjJWbKA9kcJmNnS+g/AopOldCdE2I5lKic=; b=Po/EL+u/BADJnXESqVtqWA5D+DJujjZcTn/4iRd6/GG98natWBBp5XEiE0BH9Mwnha8vD6MR38SD69jCbtVDtJIdBHjHJp1xVQYCoxUQnfxdOSBK5tAqQo7zxaMT49sG5h7SF8BnO0NIDptbIe6C8mwlEmy76R/cbWSqETJHnTA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230462817979.6321064813973; Thu, 8 Jun 2023 06:21:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FXD-0004EX-6d; Thu, 08 Jun 2023 09:18:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6Y-0002QU-HN for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:58 -0400 Received: from mail-lj1-x234.google.com ([2a00:1450:4864:20::234]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6W-0006Ts-LO for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:42:58 -0400 Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-2b1ba018d94so4023001fa.0 for ; Thu, 08 Jun 2023 03:42:56 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220975; x=1688812975; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Oukn5IHKaqjJWbKA9kcJmNnS+g/AopOldCdE2I5lKic=; b=n3MgjGZh49AaCI9SFWpeQ7K3I47JruaN0aoq95Bw1dAvSqKQnQQCg5GhiRSMb59BDH 2FpulXISX42r9b1dhXjS4vHL48QVTm09wjQ6CnpdYekSjMLs8prTvdrlyNZBwJiUTL4g S2ClJBP5dnI5yUMCryzg7iw9e4GE44G1T+mgMtj1CspJ9IzZ7pm7gBha8iVAVHtePCWK TSOVhkwRb1YPCIXwPeHAqA9gDyhdkyGE6NBOf5IDvTp/6HhFqKyU9agRmIkPLaB1dqSH bCZcvhQ6qiHXN8syurO/nWYLorNjJZaQUxfGY7E3a4mak1rhHKz86Zv8EW7qkGLuZilO 43/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220975; x=1688812975; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Oukn5IHKaqjJWbKA9kcJmNnS+g/AopOldCdE2I5lKic=; b=SmCTH1t1qpbfiiyZf8cGblWVjseLDpnoXpWQgY705QW0ymIT4OKJ2mdgyY3fao6Z+6 2QV9KMXjIQe6qGbMiz4irNXo1uZJ+V38Cp+WeQn7vJM0VFpOrS3ylnq5rxDM8zotFiwz 1qB1clH26L6YUqlCO/zxq+ZzIkhHt5l8M5wMpXrrJ69rFBQSqlASNAMLdiVrXqSOInsp JZb2XsBEHJKWvn5MOIRGkRGjksvAPVsGCJeWhC0rA39ktwDnoRSh33KlR4AqaetF9J6c 7cGlZu/TZtDgHDKgymc2MSORnRylHLjNK2iD24QYyr+d9ksgkaFd4cw+SSQW3KjDsi7d v+HQ== X-Gm-Message-State: AC+VfDyrEOPFbDMOuFP9N1GOp2m+qKCgELS0bR/+KzGdKgErmPvGEXEj w/gR9TWAHilynOqjqtvaYUQqL2qjC7k= X-Google-Smtp-Source: ACHHUZ59SyhGrC7IRNGiNLRps4zKxM9E0U1XIZBGEKC+pjAoNSrRsaOmG6x3+/KodYPpfOqPv4G4GA== X-Received: by 2002:a2e:7219:0:b0:2ad:1ba2:eff3 with SMTP id n25-20020a2e7219000000b002ad1ba2eff3mr3398581ljc.20.1686220975396; Thu, 08 Jun 2023 03:42:55 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 28/33] target/mips: Add emulation of MXU S32/D16/Q8- MOVZ/MOVN instructions Date: Thu, 8 Jun 2023 13:42:17 +0300 Message-Id: <20230608104222.1520143-29-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::234; envelope-from=lis8215@gmail.com; helo=mail-lj1-x234.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230463408100001 Content-Type: text/plain; charset="utf-8" These instructions are: - single 32-bit - dual 16-bit packed - quad 8-bit packed conditional moves. They are grouped in pool20 in the source code. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 188 ++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index ccc375db87..74b2712d8d 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -405,6 +405,7 @@ enum { OPC_MXU__POOL18 =3D 0x36, OPC_MXU_Q16SAR =3D 0x37, OPC_MXU__POOL19 =3D 0x38, + OPC_MXU__POOL20 =3D 0x39, }; =20 =20 @@ -543,6 +544,18 @@ enum { OPC_MXU_Q8MULSU =3D 0x01, }; =20 +/* + * MXU pool 20 + */ +enum { + OPC_MXU_Q8MOVZ =3D 0x00, + OPC_MXU_Q8MOVN =3D 0x01, + OPC_MXU_D16MOVZ =3D 0x02, + OPC_MXU_D16MOVN =3D 0x03, + OPC_MXU_S32MOVZ =3D 0x04, + OPC_MXU_S32MOVN =3D 0x05, +}; + /* MXU accumulate add/subtract 1-bit pattern 'aptn1' */ #define MXU_APTN1_A 0 #define MXU_APTN1_S 1 @@ -1995,6 +2008,8 @@ static void gen_mxu_q16sxxv(DisasContext *ctx, bool r= ight, bool arithmetic) * Q8SLTU * D16AVG Q8AVG * D16AVGR Q8AVGR + * S32MOVZ D16MOVZ Q8MOVZ + * S32MOVN D16MOVN Q8MOVN */ =20 /* @@ -2493,6 +2508,146 @@ static void gen_mxu_q8avg(DisasContext *ctx, bool r= ound45) } } =20 +/* + * Q8MOVZ + * Quadruple 8-bit packed conditional move where + * XRb contains conditions, XRc what to move and + * XRa is the destination. + * a.k.a. if (XRb[0..3] =3D=3D 0) { XRa[0..3] =3D XRc[0..3] } + * + * Q8MOVN + * Quadruple 8-bit packed conditional move where + * XRb contains conditions, XRc what to move and + * XRa is the destination. + * a.k.a. if (XRb[0..3] !=3D 0) { XRa[0..3] =3D XRc[0..3] } + */ +static void gen_mxu_q8movzn(DisasContext *ctx, TCGCond cond) +{ + uint32_t XRc, XRb, XRa; + + XRa =3D extract32(ctx->opcode, 6, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGLabel *l_quarterdone =3D gen_new_label(); + TCGLabel *l_halfdone =3D gen_new_label(); + TCGLabel *l_quarterrest =3D gen_new_label(); + TCGLabel *l_done =3D gen_new_label(); + + gen_load_mxu_gpr(t0, XRc); + gen_load_mxu_gpr(t1, XRb); + gen_load_mxu_gpr(t2, XRa); + + tcg_gen_extract_tl(t3, t1, 24, 8); + tcg_gen_brcondi_tl(cond, t3, 0, l_quarterdone); + tcg_gen_extract_tl(t3, t0, 24, 8); + tcg_gen_deposit_tl(t2, t2, t3, 24, 8); + + gen_set_label(l_quarterdone); + tcg_gen_extract_tl(t3, t1, 16, 8); + tcg_gen_brcondi_tl(cond, t3, 0, l_halfdone); + tcg_gen_extract_tl(t3, t0, 16, 8); + tcg_gen_deposit_tl(t2, t2, t3, 16, 8); + + gen_set_label(l_halfdone); + tcg_gen_extract_tl(t3, t1, 8, 8); + tcg_gen_brcondi_tl(cond, t3, 0, l_quarterrest); + tcg_gen_extract_tl(t3, t0, 8, 8); + tcg_gen_deposit_tl(t2, t2, t3, 8, 8); + + gen_set_label(l_quarterrest); + tcg_gen_extract_tl(t3, t1, 0, 8); + tcg_gen_brcondi_tl(cond, t3, 0, l_done); + tcg_gen_extract_tl(t3, t0, 0, 8); + tcg_gen_deposit_tl(t2, t2, t3, 0, 8); + + gen_set_label(l_done); + gen_store_mxu_gpr(t2, XRa); +} + +/* + * D16MOVZ + * Double 16-bit packed conditional move where + * XRb contains conditions, XRc what to move and + * XRa is the destination. + * a.k.a. if (XRb[0..1] =3D=3D 0) { XRa[0..1] =3D XRc[0..1] } + * + * D16MOVN + * Double 16-bit packed conditional move where + * XRb contains conditions, XRc what to move and + * XRa is the destination. + * a.k.a. if (XRb[0..3] !=3D 0) { XRa[0..1] =3D XRc[0..1] } + */ +static void gen_mxu_d16movzn(DisasContext *ctx, TCGCond cond) +{ + uint32_t XRc, XRb, XRa; + + XRa =3D extract32(ctx->opcode, 6, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGLabel *l_halfdone =3D gen_new_label(); + TCGLabel *l_done =3D gen_new_label(); + + gen_load_mxu_gpr(t0, XRc); + gen_load_mxu_gpr(t1, XRb); + gen_load_mxu_gpr(t2, XRa); + + tcg_gen_extract_tl(t3, t1, 16, 16); + tcg_gen_brcondi_tl(cond, t3, 0, l_halfdone); + tcg_gen_extract_tl(t3, t0, 16, 16); + tcg_gen_deposit_tl(t2, t2, t3, 16, 16); + + gen_set_label(l_halfdone); + tcg_gen_extract_tl(t3, t1, 0, 16); + tcg_gen_brcondi_tl(cond, t3, 0, l_done); + tcg_gen_extract_tl(t3, t0, 0, 16); + tcg_gen_deposit_tl(t2, t2, t3, 0, 16); + + gen_set_label(l_done); + gen_store_mxu_gpr(t2, XRa); +} + +/* + * S32MOVZ + * Quadruple 32-bit conditional move where + * XRb contains conditions, XRc what to move and + * XRa is the destination. + * a.k.a. if (XRb =3D=3D 0) { XRa =3D XRc } + * + * S32MOVN + * Single 32-bit conditional move where + * XRb contains conditions, XRc what to move and + * XRa is the destination. + * a.k.a. if (XRb !=3D 0) { XRa =3D XRc } + */ +static void gen_mxu_s32movzn(DisasContext *ctx, TCGCond cond) +{ + uint32_t XRc, XRb, XRa; + + XRa =3D extract32(ctx->opcode, 6, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGLabel *l_done =3D gen_new_label(); + + gen_load_mxu_gpr(t0, XRc); + gen_load_mxu_gpr(t1, XRb); + + tcg_gen_brcondi_tl(cond, t1, 0, l_done); + gen_store_mxu_gpr(t0, XRa); + gen_set_label(l_done); +} =20 /* * MXU instruction category: Addition and subtraction @@ -4409,6 +4564,36 @@ static void decode_opc_mxu__pool19(DisasContext *ctx) } } =20 +static void decode_opc_mxu__pool20(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 18, 3); + + switch (opcode) { + case OPC_MXU_Q8MOVZ: + gen_mxu_q8movzn(ctx, TCG_COND_NE); + break; + case OPC_MXU_Q8MOVN: + gen_mxu_q8movzn(ctx, TCG_COND_EQ); + break; + case OPC_MXU_D16MOVZ: + gen_mxu_d16movzn(ctx, TCG_COND_NE); + break; + case OPC_MXU_D16MOVN: + gen_mxu_d16movzn(ctx, TCG_COND_EQ); + break; + case OPC_MXU_S32MOVZ: + gen_mxu_s32movzn(ctx, TCG_COND_NE); + break; + case OPC_MXU_S32MOVN: + gen_mxu_s32movzn(ctx, TCG_COND_EQ); + break; + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) { uint32_t opcode =3D extract32(insn, 0, 6); @@ -4569,6 +4754,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU__POOL19: decode_opc_mxu__pool19(ctx); break; + case OPC_MXU__POOL20: + decode_opc_mxu__pool20(ctx); + break; default: return false; } --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230531; cv=none; d=zohomail.com; s=zohoarc; b=VAlWO5mtZfrpbERGck3BYCFJQJIe2eqq4gBRkWZqY+p/0zYl4i0Z2om8ZfDZcXF8YFxrYqWujAi6ItsSM6H40lvOIZa7PhT6kiyb10bd511AUIujAkOPfU3pOf9om8F8S6NewMVmY7+ZLCrpJqavMzARRLYeZlouN2X7GhxxeNA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230531; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=QeZBVKiRoAuXavabMg1ubmBNf1WEzNO4ztDQF0y8S5o=; b=fkp5r6/Cngq/DXtuT9shg+4uyiq6zC5nkNjutzHwvG5cvgouRxkiXrJxZZlquPvkJJzMSI5RquOPi0IRRJ9DJLx8hDi9IgGHrwFb+YtUbhlbdtlyCinTKOEapAMdXr1uybV/a80M46cKRsCbwdsDVmbfnb1Gly9BBsnSDoZovTU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230531912138.99383580741255; Thu, 8 Jun 2023 06:22:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWi-0003RJ-Jv; Thu, 08 Jun 2023 09:18:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6a-0002RV-B5 for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:43:00 -0400 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6Y-0006dh-Cx for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:43:00 -0400 Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-4f62cf9755eso577031e87.1 for ; Thu, 08 Jun 2023 03:42:57 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220976; x=1688812976; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QeZBVKiRoAuXavabMg1ubmBNf1WEzNO4ztDQF0y8S5o=; b=IkWN7SdDWocbULcwAahTxc6hwnQ2qN6zCQ0nx9A00rKi+mLllTcIKdjPRivIWjOS3o VcpXNPWQLlqdxMADlkgZa9iSIWF80Rfkp0LEO14zDA/jd9cQ7kYpP51xBWqe6NHkHID/ t5tXSyHOAGl8o2cTgDkzk4yZzX5nOIrzYH5eEuJVRm6qiUmG/aa58rGQblIqO/3jRo8s gxzQhENzsRpgJ6/f/YkxQw0TW83L+9T8WPgHdJCmhErzU7bSHQAj8LiiAZ69/SBrVM0x 7hx7KhGkAvm/lec0Du+rzttkoqfB11PSMud4jnjn6kJnhicwNuS8Sk+sn3KMGLDLMJhg 5a8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220976; x=1688812976; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QeZBVKiRoAuXavabMg1ubmBNf1WEzNO4ztDQF0y8S5o=; b=A4ql6ombgpRwlZP1iMP3HHa6K4C5SJuVeMWFUveHn/Jz+V3fmj1kj1sJ+epHDJsGFF aSAvmWvS68OL/iQbTLw+af78Yr8/0SHsQbR+ymMDDpCUij2Oos75/eSM+Sk5EBgEh6MH CVq+CS/23MhO5vLHSvdgDYZewTAUfP2L9//yB1OXFRwTFP6O376Im0CznKULeB4fLo3Y c7rzts7NOPafHgDYq1Hp8lpG12OHEVa6cHbWIdeQp11oK5eM5FxSDvZQQOqlDw3NBxlX vuANvvoiVUA/yf0oiwJJnXWAa7nD6PClN3JmX+FfKWVDY2SYolRoCuCnplKhJhZxULWz c+mQ== X-Gm-Message-State: AC+VfDyhUxZhRLjCVHeyied/RBkQRHdVLKIxsvPWiEoWlMWXnG3YvXEQ TWrv+bjbi0D6wGMhRArmm06fsYkxkeM= X-Google-Smtp-Source: ACHHUZ6nQZC28TwhvSho0aoHkK4eCp4GQdoVqMY2+RrGRvJy1rWuTFzsrUOfXM55xFqKfphEgsKn8w== X-Received: by 2002:ac2:44d7:0:b0:4f2:5338:d0a8 with SMTP id d23-20020ac244d7000000b004f25338d0a8mr3549485lfm.56.1686220976495; Thu, 08 Jun 2023 03:42:56 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 29/33] target/mips: Add emulation of MXU Q8MAC Q8MACSU instructions Date: Thu, 8 Jun 2023 13:42:18 +0300 Message-Id: <20230608104222.1520143-30-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::12f; envelope-from=lis8215@gmail.com; helo=mail-lf1-x12f.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230533605100005 These instructions do parallel quad 8-bit multiply and accumulate. They are close to existing Q8MUL Q8MULSU so the generation function modified to support all of them. Also the patch fixes decoding of Q8MULSU according to tests on hardware. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 128 +++++++++++++++++++++----------- 1 file changed, 86 insertions(+), 42 deletions(-) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 74b2712d8d..dc985342d6 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -328,7 +328,7 @@ * =E2=94=9C=E2=94=80 110111 =E2=94=80 OPC_MXU_Q16SAR * =E2=94=82 23..22 * =E2=94=9C=E2=94=80 111000 =E2=94=80 OPC_MXU__POOL19 =E2=94=80= =E2=94=AC=E2=94=80 00 =E2=94=80 OPC_MXU_Q8MUL - * =E2=94=82 =E2=94=94=E2=94=80 01 =E2= =94=80 OPC_MXU_Q8MULSU + * =E2=94=82 =E2=94=94=E2=94=80 10 =E2= =94=80 OPC_MXU_Q8MULSU * =E2=94=82 * =E2=94=82 20..18 * =E2=94=9C=E2=94=80 111001 =E2=94=80 OPC_MXU__POOL20 =E2=94=80= =E2=94=AC=E2=94=80 000 =E2=94=80 OPC_MXU_Q8MOVZ @@ -406,6 +406,7 @@ enum { OPC_MXU_Q16SAR =3D 0x37, OPC_MXU__POOL19 =3D 0x38, OPC_MXU__POOL20 =3D 0x39, + OPC_MXU__POOL21 =3D 0x3A, }; =20 =20 @@ -541,7 +542,7 @@ enum { */ enum { OPC_MXU_Q8MUL =3D 0x00, - OPC_MXU_Q8MULSU =3D 0x01, + OPC_MXU_Q8MULSU =3D 0x02, }; =20 /* @@ -556,6 +557,15 @@ enum { OPC_MXU_S32MOVN =3D 0x05, }; =20 +/* + * MXU pool 21 + */ +enum { + OPC_MXU_Q8MAC =3D 0x00, + OPC_MXU_Q8MACSU =3D 0x02, +}; + + /* MXU accumulate add/subtract 1-bit pattern 'aptn1' */ #define MXU_APTN1_A 0 #define MXU_APTN1_S 1 @@ -1330,13 +1340,17 @@ static void gen_mxu_s16mad(DisasContext *ctx) } =20 /* - * Q8MUL XRa, XRb, XRc, XRd - Parallel unsigned 8 bit pattern multiply - * Q8MULSU XRa, XRb, XRc, XRd - Parallel signed 8 bit pattern multiply + * Q8MUL XRa, XRb, XRc, XRd - Parallel quad unsigned 8 bit multiply + * Q8MULSU XRa, XRb, XRc, XRd - Parallel quad signed 8 bit multiply + * Q8MAC XRa, XRb, XRc, XRd - Parallel quad unsigned 8 bit multiply + * and accumulate + * Q8MACSU XRa, XRb, XRc, XRd - Parallel quad signed 8 bit multiply + * and accumulate */ -static void gen_mxu_q8mul_q8mulsu(DisasContext *ctx) +static void gen_mxu_q8mul_mac(DisasContext *ctx, bool su, bool mac) { TCGv t0, t1, t2, t3, t4, t5, t6, t7; - uint32_t XRa, XRb, XRc, XRd, sel; + uint32_t XRa, XRb, XRc, XRd, aptn2; =20 t0 =3D tcg_temp_new(); t1 =3D tcg_temp_new(); @@ -1351,54 +1365,60 @@ static void gen_mxu_q8mul_q8mulsu(DisasContext *ctx) XRb =3D extract32(ctx->opcode, 10, 4); XRc =3D extract32(ctx->opcode, 14, 4); XRd =3D extract32(ctx->opcode, 18, 4); - sel =3D extract32(ctx->opcode, 22, 2); + aptn2 =3D extract32(ctx->opcode, 24, 2); =20 gen_load_mxu_gpr(t3, XRb); gen_load_mxu_gpr(t7, XRc); =20 - if (sel =3D=3D 0x2) { - /* Q8MULSU */ - tcg_gen_ext8s_tl(t0, t3); - tcg_gen_shri_tl(t3, t3, 8); - tcg_gen_ext8s_tl(t1, t3); - tcg_gen_shri_tl(t3, t3, 8); - tcg_gen_ext8s_tl(t2, t3); - tcg_gen_shri_tl(t3, t3, 8); - tcg_gen_ext8s_tl(t3, t3); + if (su) { + /* Q8MULSU / Q8MACSU */ + tcg_gen_sextract_tl(t0, t3, 0, 8); + tcg_gen_sextract_tl(t1, t3, 8, 8); + tcg_gen_sextract_tl(t2, t3, 16, 8); + tcg_gen_sextract_tl(t3, t3, 24, 8); } else { - /* Q8MUL */ - tcg_gen_ext8u_tl(t0, t3); - tcg_gen_shri_tl(t3, t3, 8); - tcg_gen_ext8u_tl(t1, t3); - tcg_gen_shri_tl(t3, t3, 8); - tcg_gen_ext8u_tl(t2, t3); - tcg_gen_shri_tl(t3, t3, 8); - tcg_gen_ext8u_tl(t3, t3); + /* Q8MUL / Q8MAC */ + tcg_gen_extract_tl(t0, t3, 0, 8); + tcg_gen_extract_tl(t1, t3, 8, 8); + tcg_gen_extract_tl(t2, t3, 16, 8); + tcg_gen_extract_tl(t3, t3, 24, 8); } =20 - tcg_gen_ext8u_tl(t4, t7); - tcg_gen_shri_tl(t7, t7, 8); - tcg_gen_ext8u_tl(t5, t7); - tcg_gen_shri_tl(t7, t7, 8); - tcg_gen_ext8u_tl(t6, t7); - tcg_gen_shri_tl(t7, t7, 8); - tcg_gen_ext8u_tl(t7, t7); + tcg_gen_extract_tl(t4, t7, 0, 8); + tcg_gen_extract_tl(t5, t7, 8, 8); + tcg_gen_extract_tl(t6, t7, 16, 8); + tcg_gen_extract_tl(t7, t7, 24, 8); =20 tcg_gen_mul_tl(t0, t0, t4); tcg_gen_mul_tl(t1, t1, t5); tcg_gen_mul_tl(t2, t2, t6); tcg_gen_mul_tl(t3, t3, t7); =20 - tcg_gen_andi_tl(t0, t0, 0xFFFF); - tcg_gen_andi_tl(t1, t1, 0xFFFF); - tcg_gen_andi_tl(t2, t2, 0xFFFF); - tcg_gen_andi_tl(t3, t3, 0xFFFF); - - tcg_gen_shli_tl(t1, t1, 16); - tcg_gen_shli_tl(t3, t3, 16); + if (mac) { + gen_load_mxu_gpr(t4, XRd); + gen_load_mxu_gpr(t5, XRa); + tcg_gen_extract_tl(t6, t4, 0, 16); + tcg_gen_extract_tl(t7, t4, 16, 16); + if (aptn2 & 1) { + tcg_gen_sub_tl(t0, t6, t0); + tcg_gen_sub_tl(t1, t7, t1); + } else { + tcg_gen_add_tl(t0, t6, t0); + tcg_gen_add_tl(t1, t7, t1); + } + tcg_gen_extract_tl(t6, t5, 0, 16); + tcg_gen_extract_tl(t7, t5, 16, 16); + if (aptn2 & 2) { + tcg_gen_sub_tl(t2, t6, t2); + tcg_gen_sub_tl(t3, t7, t3); + } else { + tcg_gen_add_tl(t2, t6, t2); + tcg_gen_add_tl(t3, t7, t3); + } + } =20 - tcg_gen_or_tl(t0, t0, t1); - tcg_gen_or_tl(t1, t2, t3); + tcg_gen_deposit_tl(t0, t0, t1, 16, 16); + tcg_gen_deposit_tl(t1, t2, t3, 16, 16); =20 gen_store_mxu_gpr(t0, XRd); gen_store_mxu_gpr(t1, XRa); @@ -4550,12 +4570,14 @@ static void decode_opc_mxu__pool18(DisasContext *ct= x) =20 static void decode_opc_mxu__pool19(DisasContext *ctx) { - uint32_t opcode =3D extract32(ctx->opcode, 22, 2); + uint32_t opcode =3D extract32(ctx->opcode, 22, 4); =20 switch (opcode) { case OPC_MXU_Q8MUL: + gen_mxu_q8mul_mac(ctx, false, false); + break; case OPC_MXU_Q8MULSU: - gen_mxu_q8mul_q8mulsu(ctx); + gen_mxu_q8mul_mac(ctx, true, false); break; default: MIPS_INVAL("decode_opc_mxu"); @@ -4594,6 +4616,25 @@ static void decode_opc_mxu__pool20(DisasContext *ctx) } } =20 +static void decode_opc_mxu__pool21(DisasContext *ctx) +{ + uint32_t opcode =3D extract32(ctx->opcode, 22, 2); + + switch (opcode) { + case OPC_MXU_Q8MAC: + gen_mxu_q8mul_mac(ctx, false, true); + break; + case OPC_MXU_Q8MACSU: + gen_mxu_q8mul_mac(ctx, true, true); + break; + default: + MIPS_INVAL("decode_opc_mxu"); + gen_reserved_instruction(ctx); + break; + } +} + + bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) { uint32_t opcode =3D extract32(insn, 0, 6); @@ -4757,6 +4798,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU__POOL20: decode_opc_mxu__pool20(ctx); break; + case OPC_MXU__POOL21: + decode_opc_mxu__pool21(ctx); + break; default: return false; } --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230405; cv=none; d=zohomail.com; s=zohoarc; b=YzMurMmCQ7AlsvXWgjdQukDgPzgj2fOoXklGqzyaFaLgePBP6UnoBM3/5fAKTEmBeydKpxpVhktUCuvSmYmT9kWLHG3wekke81o5/qZk5wjbB726+xUi9rfWlpoCIoAYb+1/3oEJfsBVmorYkkya9RBLtvuhsT325y/bk9GAZME= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230405; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=1LIn3wNgu7EGhq1U0nYq9G2gdyuS3dd3r667RMOa7xk=; b=Ub7RICQqkcq5QAQq+nkNpc3bwQu7dBDzF5BjOMWp7cVegqlS2jA9IU0aggHatS7pL/ZqPe6qxBr747WhoiGXchvoK1UKMwlSHYsEoRpFvujT4JeCQS8783gWPoIg5JRQPyZ1yDqpeVv2CYTeysrCVO9i0tZj7QGv+7z7kVx+IF8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230405163780.6652461896513; Thu, 8 Jun 2023 06:20:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWo-0003XC-KM; Thu, 08 Jun 2023 09:18:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6b-0002SF-5R for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:43:01 -0400 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6Z-0006e5-8k for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:43:00 -0400 Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-4f4e71a09a7so585710e87.1 for ; Thu, 08 Jun 2023 03:42:58 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220977; x=1688812977; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1LIn3wNgu7EGhq1U0nYq9G2gdyuS3dd3r667RMOa7xk=; b=s2rFXhT+mNgaDplVVpsjiX8eChLKOF+/Y5jpfGfuSNTg67t2AebVwS41NO1/OwpyIb DfzTUwhlZbKl0M4/l41izkgq3wwxYn49nxAYIzz/zMhuQGwnbRKz4L/XFJcXy1m5nU6L DDp2uMuGtrO2LaaL2sw4wFHwTr071TFToWOAoHX0SO+F/VWELHKsyqRMtbEHhQrUTpAO gP2vDE/PBKkpb+1h9WpVyAevN6UUEpoz0oSi6VIrwlkw4WaTEU4Vmshj3pnj79HwbJSL 7jyQKrNHdHCYLSV/nW9ArhFpkHG8mODBilSCEXmhYBcHrWFVo0l9K1LVTegkJoZ6GIJk 5KSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220977; x=1688812977; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1LIn3wNgu7EGhq1U0nYq9G2gdyuS3dd3r667RMOa7xk=; b=exWsel2NFFQ/GbaXmOn8v1oFLIQzqR/wni/fcoLTCVY/9arB0WtoUujXUVTcu64FV2 SH0hab6ZazWU86pLxB4W1SgJClW6mtbkXtfnrAfIRWX+jmbMhriVjGfviolko7L+NZi/ cZ70XEHqPOk8JA0oFdwu8GeJP1068Uc2xTDxM2Vc2+hCUbKnMzTGyseKa2OMRZc9Bsd+ WHvarvn8PrvEUAvh1l4bA7nKMLiSYhbmUy8oItOjlPrsau8PWd01Y2jqHYKiJAnvGL7B 2TSFsSKsVjy2/ZWRQ1o+lQ8hu0yHCSn4PWtT3K1iKs7gfdXaO/M+DFhT7bhDyxpdhV+4 Zedg== X-Gm-Message-State: AC+VfDzOoZCISj+rQjdIintwhlBuFrEVV5kUXMWpmgvO9/v3AhQpgYbY fAxZUtB/Z6MGQIcLd4A5RPlQ1MgPUj8= X-Google-Smtp-Source: ACHHUZ6YreAvRT7QyN3PmqIJ0iIN+RO5QARo5mpgTFCUp3brRcA/omoKSbtufABNhpq1uMrLAXb39w== X-Received: by 2002:a05:6512:b94:b0:4f0:3e1:9ada with SMTP id b20-20020a0565120b9400b004f003e19adamr706307lfv.31.1686220977404; Thu, 08 Jun 2023 03:42:57 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 30/33] target/mips: Add emulation of MXU Q16SCOP instruction Date: Thu, 8 Jun 2023 13:42:19 +0300 Message-Id: <20230608104222.1520143-31-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::12c; envelope-from=lis8215@gmail.com; helo=mail-lf1-x12c.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230406998100002 Content-Type: text/plain; charset="utf-8" The instruction is used to determine sign of four 16-bit packed data in parallel. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 85 +++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index dc985342d6..7970b70fe1 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -407,6 +407,7 @@ enum { OPC_MXU__POOL19 =3D 0x38, OPC_MXU__POOL20 =3D 0x39, OPC_MXU__POOL21 =3D 0x3A, + OPC_MXU_Q16SCOP =3D 0x3B, }; =20 =20 @@ -3541,6 +3542,7 @@ static void gen_mxu_d32asum(DisasContext *ctx) * S32EXTR S32LUI * S32EXTRV * Q16SAT + * Q16SCOP */ =20 /* @@ -3808,6 +3810,86 @@ static void gen_mxu_Q16SAT(DisasContext *ctx) } } =20 +/* + * Q16SCOP XRa, XRd, XRb, XRc + * Determine sign of quad packed 16-bit signed values + * in XRb and XRc put result in XRa and XRd respectively. + */ +static void gen_mxu_q16scop(DisasContext *ctx) +{ + uint32_t XRd, XRc, XRb, XRa; + + XRd =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv t4 =3D tcg_temp_new(); + + TCGLabel *l_b_hi_lt =3D gen_new_label(); + TCGLabel *l_b_hi_gt =3D gen_new_label(); + TCGLabel *l_b_lo =3D gen_new_label(); + TCGLabel *l_b_lo_lt =3D gen_new_label(); + TCGLabel *l_c_hi =3D gen_new_label(); + TCGLabel *l_c_hi_lt =3D gen_new_label(); + TCGLabel *l_c_hi_gt =3D gen_new_label(); + TCGLabel *l_c_lo =3D gen_new_label(); + TCGLabel *l_c_lo_lt =3D gen_new_label(); + TCGLabel *l_done =3D gen_new_label(); + + gen_load_mxu_gpr(t0, XRb); + gen_load_mxu_gpr(t1, XRc); + + tcg_gen_sextract_tl(t2, t0, 16, 16); + tcg_gen_brcondi_tl(TCG_COND_LT, t2, 0, l_b_hi_lt); + tcg_gen_brcondi_tl(TCG_COND_GT, t2, 0, l_b_hi_gt); + tcg_gen_movi_tl(t3, 0); + tcg_gen_br(l_b_lo); + gen_set_label(l_b_hi_lt); + tcg_gen_movi_tl(t3, 0xffff0000); + tcg_gen_br(l_b_lo); + gen_set_label(l_b_hi_gt); + tcg_gen_movi_tl(t3, 0x00010000); + + gen_set_label(l_b_lo); + tcg_gen_sextract_tl(t2, t0, 0, 16); + tcg_gen_brcondi_tl(TCG_COND_EQ, t2, 0, l_c_hi); + tcg_gen_brcondi_tl(TCG_COND_LT, t2, 0, l_b_lo_lt); + tcg_gen_ori_tl(t3, t3, 0x00000001); + tcg_gen_br(l_c_hi); + gen_set_label(l_b_lo_lt); + tcg_gen_ori_tl(t3, t3, 0x0000ffff); + tcg_gen_br(l_c_hi); + + gen_set_label(l_c_hi); + tcg_gen_sextract_tl(t2, t1, 16, 16); + tcg_gen_brcondi_tl(TCG_COND_LT, t2, 0, l_c_hi_lt); + tcg_gen_brcondi_tl(TCG_COND_GT, t2, 0, l_c_hi_gt); + tcg_gen_movi_tl(t4, 0); + tcg_gen_br(l_c_lo); + gen_set_label(l_c_hi_lt); + tcg_gen_movi_tl(t4, 0xffff0000); + tcg_gen_br(l_c_lo); + gen_set_label(l_c_hi_gt); + tcg_gen_movi_tl(t4, 0x00010000); + + gen_set_label(l_c_lo); + tcg_gen_sextract_tl(t2, t1, 0, 16); + tcg_gen_brcondi_tl(TCG_COND_EQ, t2, 0, l_done); + tcg_gen_brcondi_tl(TCG_COND_LT, t2, 0, l_c_lo_lt); + tcg_gen_ori_tl(t4, t4, 0x00000001); + tcg_gen_br(l_done); + gen_set_label(l_c_lo_lt); + tcg_gen_ori_tl(t4, t4, 0x0000ffff); + + gen_set_label(l_done); + gen_store_mxu_gpr(t3, XRa); + gen_store_mxu_gpr(t4, XRd); +} =20 /* * MXU instruction category: align @@ -4801,6 +4883,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU__POOL21: decode_opc_mxu__pool21(ctx); break; + case OPC_MXU_Q16SCOP: + gen_mxu_q16scop(ctx); + break; default: return false; } --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230557; cv=none; d=zohomail.com; s=zohoarc; b=MGwsrU/kI7Gh1FFBpEH3stJK+sBVlVG2ijV+kDGL/fFgMbASexvMyG85ZL9iwIRE1cWCPoKPs2qRFDN5mJS9hrapiIctAZEKYkezqB/iMxLO8sqZDO5ovPFb5mzdFbFkm/ea0t2llNt2FukIaZS8V85jJhcnX54x1fdY/3Ejixo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230557; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=NaYwJWRlrN+WhGZVGQ5O0ml1E95BvIlUrXb4RAKN81s=; b=BbZ1ZxREWTaSH+x1HvJEJm3nQH4DjK+TBDCmr02uZ7vE1K0JuJXDaXdb3a0MObhukHGoQ6XDAscQjbFLnOeDHSkBseKG7c5wYGEwVSArCKidEhE6CcsiRTG5qOJz5wbo3sK195Pc4QV9Iju2fpoaldzv0zycUhzr6vVlDlPcbjI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230556471818.7757774705177; Thu, 8 Jun 2023 06:22:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWi-0003RM-RB; Thu, 08 Jun 2023 09:18:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6c-0002U7-5I for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:43:02 -0400 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6a-0006el-Cx for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:43:01 -0400 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-4f122ff663eso550956e87.2 for ; Thu, 08 Jun 2023 03:42:59 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220978; x=1688812978; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NaYwJWRlrN+WhGZVGQ5O0ml1E95BvIlUrXb4RAKN81s=; b=V2ooxEAjcgrSn7R+Ukk9ZK1GDp4qZlyFwT/M0vG4x4K0gECZuXCftvW1pQVZ53MNLl Xb8OFKwitI4jGj82OLpoMio8LfMC70QN8hfDdC03Lwdg0E4QyXAmHxHXuvv2hJAl97PA clxHd9DcXKJlPw3Pe4qEIr16G5Y1BzHikM93tjcGaV68xGWEFDSvK33fKII3Xs5G5V/B ybY6eywWssM2p0AC6WNqLtIPi81/aHwUhoemyDItAYnh80OyFywNVhnnC8MN9uVw5FVO QmkdD/aJfmE3F0TV+93Fay1F7iiisZikx5O4fX9LGGaf60MOhiq8PLgWVKd4niaTuIkh IFdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220978; x=1688812978; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NaYwJWRlrN+WhGZVGQ5O0ml1E95BvIlUrXb4RAKN81s=; b=CaIAIwNUFnljUeS6TEhw+ZzT/B1PJxKxckz2qocPywKEwHVzuJIoK/wYDJKZxSm8RC xaqSAPOygzU8hGiCUMUXBptJMpOmXdwlixg7vRe/6h+P7U0hzpH8wj0/kMYXINLzFX/4 bb5IAwS195+eUJhpBMWSUBQQk6FFBGJhtHV8DMlJFh09PJIxq9PtKd+gkkZSsaac48DG kGf8KixJkjIColhng7s7eZul5DaonA315r7TJwYD+XK0EcPV3LMH4VrpSBuHGXZHO4my 98j1F/r5BNTBr2OBRAyGsHo6UUhxgiFBwh9epbqHsLSObOaIqmV0ZOuw5+UmbcK4p6R4 IvIg== X-Gm-Message-State: AC+VfDz8gmy2kbkVJSnwezCTlibTZ4gqrsIU5Nt2KienM+MzUn5nnVuV rmb9SXE/lbzsSzO2BEyfP9hbaTS7rqQ= X-Google-Smtp-Source: ACHHUZ4AMc0l+T5nku941uHS1q/hRsBy5146+Yr8ANajnL0LCii7CJtggZ+Vurcv2fOnfyqB/sApTw== X-Received: by 2002:ac2:42c6:0:b0:4f1:4468:ee65 with SMTP id n6-20020ac242c6000000b004f14468ee65mr2820943lfl.30.1686220978425; Thu, 08 Jun 2023 03:42:58 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 31/33] target/mips: Add emulation of MXU Q8MADL instruction Date: Thu, 8 Jun 2023 13:42:20 +0300 Message-Id: <20230608104222.1520143-32-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::129; envelope-from=lis8215@gmail.com; helo=mail-lf1-x129.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230558916100002 Content-Type: text/plain; charset="utf-8" The instruction is used to parallel multiply and accumulate four 8-bit data. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 75 +++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 7970b70fe1..ea2768cd57 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -408,6 +408,7 @@ enum { OPC_MXU__POOL20 =3D 0x39, OPC_MXU__POOL21 =3D 0x3A, OPC_MXU_Q16SCOP =3D 0x3B, + OPC_MXU_Q8MADL =3D 0x3C, }; =20 =20 @@ -1425,6 +1426,77 @@ static void gen_mxu_q8mul_mac(DisasContext *ctx, boo= l su, bool mac) gen_store_mxu_gpr(t1, XRa); } =20 +/* + * Q8MADL XRd, XRa, XRb, XRc + * Parallel quad unsigned 8 bit multiply and accumulate. + * e.g. XRd[0..3] =3D XRa[0..3] + XRb[0..3] * XRc[0..3] + */ +static void gen_mxu_q8madl(DisasContext *ctx) +{ + TCGv t0, t1, t2, t3, t4, t5, t6, t7; + uint32_t XRa, XRb, XRc, XRd, aptn2; + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + t2 =3D tcg_temp_new(); + t3 =3D tcg_temp_new(); + t4 =3D tcg_temp_new(); + t5 =3D tcg_temp_new(); + t6 =3D tcg_temp_new(); + t7 =3D tcg_temp_new(); + + XRa =3D extract32(ctx->opcode, 6, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRd =3D extract32(ctx->opcode, 18, 4); + aptn2 =3D extract32(ctx->opcode, 24, 2); + + gen_load_mxu_gpr(t3, XRb); + gen_load_mxu_gpr(t7, XRc); + + tcg_gen_extract_tl(t0, t3, 0, 8); + tcg_gen_extract_tl(t1, t3, 8, 8); + tcg_gen_extract_tl(t2, t3, 16, 8); + tcg_gen_extract_tl(t3, t3, 24, 8); + + tcg_gen_extract_tl(t4, t7, 0, 8); + tcg_gen_extract_tl(t5, t7, 8, 8); + tcg_gen_extract_tl(t6, t7, 16, 8); + tcg_gen_extract_tl(t7, t7, 24, 8); + + tcg_gen_mul_tl(t0, t0, t4); + tcg_gen_mul_tl(t1, t1, t5); + tcg_gen_mul_tl(t2, t2, t6); + tcg_gen_mul_tl(t3, t3, t7); + + gen_load_mxu_gpr(t4, XRa); + tcg_gen_extract_tl(t6, t4, 0, 8); + tcg_gen_extract_tl(t7, t4, 8, 8); + if (aptn2 & 1) { + tcg_gen_sub_tl(t0, t6, t0); + tcg_gen_sub_tl(t1, t7, t1); + } else { + tcg_gen_add_tl(t0, t6, t0); + tcg_gen_add_tl(t1, t7, t1); + } + tcg_gen_extract_tl(t6, t4, 16, 8); + tcg_gen_extract_tl(t7, t4, 24, 8); + if (aptn2 & 2) { + tcg_gen_sub_tl(t2, t6, t2); + tcg_gen_sub_tl(t3, t7, t3); + } else { + tcg_gen_add_tl(t2, t6, t2); + tcg_gen_add_tl(t3, t7, t3); + } + + tcg_gen_andi_tl(t5, t0, 0xff); + tcg_gen_deposit_tl(t5, t5, t1, 8, 8); + tcg_gen_deposit_tl(t5, t5, t2, 16, 8); + tcg_gen_deposit_tl(t5, t5, t3, 24, 8); + + gen_store_mxu_gpr(t5, XRd); +} + /* * S32LDD XRa, Rb, S12 - Load a word from memory to XRF * S32LDDR XRa, Rb, S12 - Load a word from memory to XRF @@ -4886,6 +4958,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_Q16SCOP: gen_mxu_q16scop(ctx); break; + case OPC_MXU_Q8MADL: + gen_mxu_q8madl(ctx); + break; default: return false; } --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230495; cv=none; d=zohomail.com; s=zohoarc; b=mBG9Iog1gpWfrEBxTs9/8GYzIbAHrGs+skhbFeBZjF/8dqG5bspFXnUeMwV4p0PWpgYDEVK9UQZUssLMPbV8b0a4PRG8op/fYMM8sJkRMTwEWcEey3OfJSJdWG1AMfGdaNCLC0WpVkDnuZAYBR464ZsQaV47IE68Yk/T4Iyx6aA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230495; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=U3rtuQ8mHqHcvQS6StgNCviZs2g0eGCn8bpnAVuyQks=; b=btTREeIPki+Vy4ucmOOgkohUsthW9lXmWA8ppgOL9UGqo8bTgS97GCH26BRFkRT0eZH7mJrfSHkoyKVLYyGSaFJH1m8VGrRTPPYrC/wMwwFf3knEdtcT2wTsvdQz4GD7OSjCJZYeb/+vAZFuQP1JlEvPgW8plnWEg98MNUi4omo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230494611404.43278598715756; Thu, 8 Jun 2023 06:21:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWp-0003YK-PH; Thu, 08 Jun 2023 09:18:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6g-0002Un-2L for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:43:06 -0400 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6b-0006fX-Ai for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:43:03 -0400 Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-4f6370ddd27so565986e87.0 for ; Thu, 08 Jun 2023 03:43:00 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:42:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220979; x=1688812979; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=U3rtuQ8mHqHcvQS6StgNCviZs2g0eGCn8bpnAVuyQks=; b=qmAXHCFHeOHLey1eVsDA2tTEcYlaYdUBicthziP0wisc08A0ckMoUA6PYSPGOMOdHx HCwJTYEpx9qvobHur4845OH3oMWsxwjw9cYXdjFT2/V5ukJWjRmQKFlIo4B8WkNu4Jcj ccShvxMZl8PzHglvDGn4Dd0NTiTcrcPn6q373a6ZTC6zyN/+QOPH3+o7+nFHxnIyD7aJ 8E1IsRgC8DZbMSEN1M4M4kE1u0aV38yQOnQqvEqIH6YH+I8wyadre0Qpxzps098vQpON Z3Dyde4ko5QWoR76/brKan/N0mFQ9HxOPPRCIQFsLrxgPZtAkRj1M+i2Q+e52YYRh0nE F+Uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220979; x=1688812979; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=U3rtuQ8mHqHcvQS6StgNCviZs2g0eGCn8bpnAVuyQks=; b=EH0QfGfcmUyE032W3SAHLwhij3dYSNvMKX1trcS6DfSgmj2nlUMUnHacJyEd2Vj2KJ EC3LAX0WEOrLHsf75OfpDumXnCAELibqfY2qQAMZOxXf0e8hHKdJMWibcr862309+2qR SE0+XGNcNc0hSLM6m1pHocYf8TJ7OYmBJPfWUy71mV+KOtdvZfuVc35YRgyrS3FnHqnl 7l48Xgl3N1zGhA6kBpShVFHn8I8mliXa5O3cSW+9QFOexPhVlm/dKw+JDNw7x3Fww5Na Q1WW/6gheYYyNsUZWvnh52EMx9Pp2tYlaDj4vhAF5UInHQQAiEjoI8jdKUms9GwDIhfc D/Ow== X-Gm-Message-State: AC+VfDyn18OF/l0gVSfyOPmO7Zgm4rzot4caVJB8I7mo/0Qv/sbN4CYR mgzvJqqrQmFj/SLegLeILHAt/WewxfM= X-Google-Smtp-Source: ACHHUZ5V27S21RpG+7lSMYl1Vut+6dO9IPIaR+z618aWAUUZAyKpnm0Kf57sYzfouQ+IeAI9uL/T9Q== X-Received: by 2002:ac2:44d7:0:b0:4f3:859c:a01d with SMTP id d23-20020ac244d7000000b004f3859ca01dmr3137938lfm.69.1686220979401; Thu, 08 Jun 2023 03:42:59 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 32/33] target/mips: Add emulation of MXU S32SFL instruction Date: Thu, 8 Jun 2023 13:42:21 +0300 Message-Id: <20230608104222.1520143-33-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::12f; envelope-from=lis8215@gmail.com; helo=mail-lf1-x12f.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230496528100001 Content-Type: text/plain; charset="utf-8" The instruction shuffles 8 bytes in two registers by one of 4 predefined patterns. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 81 +++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index ea2768cd57..1e043908db 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -409,6 +409,7 @@ enum { OPC_MXU__POOL21 =3D 0x3A, OPC_MXU_Q16SCOP =3D 0x3B, OPC_MXU_Q8MADL =3D 0x3C, + OPC_MXU_S32SFL =3D 0x3D, }; =20 =20 @@ -3963,6 +3964,83 @@ static void gen_mxu_q16scop(DisasContext *ctx) gen_store_mxu_gpr(t4, XRd); } =20 +/* + * S32SFL XRa, XRd, XRb, XRc + * Shuffle bytes according to one of four patterns. + */ +static void gen_mxu_s32sfl(DisasContext *ctx) +{ + uint32_t XRd, XRc, XRb, XRa, ptn2; + + XRd =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + ptn2 =3D extract32(ctx->opcode, 24, 2); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t0, XRb); + gen_load_mxu_gpr(t1, XRc); + + switch (ptn2) { + case 0: + tcg_gen_andi_tl(t2, t0, 0xff000000); + tcg_gen_andi_tl(t3, t1, 0x000000ff); + tcg_gen_deposit_tl(t3, t3, t0, 8, 8); + tcg_gen_shri_tl(t0, t0, 8); + tcg_gen_shri_tl(t1, t1, 8); + tcg_gen_deposit_tl(t3, t3, t0, 24, 8); + tcg_gen_deposit_tl(t3, t3, t1, 16, 8); + tcg_gen_shri_tl(t0, t0, 8); + tcg_gen_shri_tl(t1, t1, 8); + tcg_gen_deposit_tl(t2, t2, t0, 8, 8); + tcg_gen_deposit_tl(t2, t2, t1, 0, 8); + tcg_gen_shri_tl(t1, t1, 8); + tcg_gen_deposit_tl(t2, t2, t1, 16, 8); + break; + case 1: + tcg_gen_andi_tl(t2, t0, 0xff000000); + tcg_gen_andi_tl(t3, t1, 0x000000ff); + tcg_gen_deposit_tl(t3, t3, t0, 16, 8); + tcg_gen_shri_tl(t0, t0, 8); + tcg_gen_shri_tl(t1, t1, 8); + tcg_gen_deposit_tl(t2, t2, t0, 16, 8); + tcg_gen_deposit_tl(t2, t2, t1, 0, 8); + tcg_gen_shri_tl(t0, t0, 8); + tcg_gen_shri_tl(t1, t1, 8); + tcg_gen_deposit_tl(t3, t3, t0, 24, 8); + tcg_gen_deposit_tl(t3, t3, t1, 8, 8); + tcg_gen_shri_tl(t1, t1, 8); + tcg_gen_deposit_tl(t2, t2, t1, 8, 8); + break; + case 2: + tcg_gen_andi_tl(t2, t0, 0xff00ff00); + tcg_gen_andi_tl(t3, t1, 0x00ff00ff); + tcg_gen_deposit_tl(t3, t3, t0, 8, 8); + tcg_gen_shri_tl(t0, t0, 16); + tcg_gen_shri_tl(t1, t1, 8); + tcg_gen_deposit_tl(t2, t2, t1, 0, 8); + tcg_gen_deposit_tl(t3, t3, t0, 24, 8); + tcg_gen_shri_tl(t1, t1, 16); + tcg_gen_deposit_tl(t2, t2, t1, 16, 8); + break; + case 3: + tcg_gen_andi_tl(t2, t0, 0xffff0000); + tcg_gen_andi_tl(t3, t1, 0x0000ffff); + tcg_gen_shri_tl(t1, t1, 16); + tcg_gen_deposit_tl(t2, t2, t1, 0, 16); + tcg_gen_deposit_tl(t3, t3, t0, 16, 16); + break; + } + + gen_store_mxu_gpr(t2, XRa); + gen_store_mxu_gpr(t3, XRd); +} + /* * MXU instruction category: align * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -4961,6 +5039,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_Q8MADL: gen_mxu_q8madl(ctx); break; + case OPC_MXU_S32SFL: + gen_mxu_s32sfl(ctx); + break; default: return false; } --=20 2.40.0 From nobody Tue May 7 22:31:16 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1686230337; cv=none; d=zohomail.com; s=zohoarc; b=j82Qltd5nz8Mn/Xm1zcsTfM7BSWuZAx/n7rnoPxonp2oXjTwUIoeU6MmX/2LOMBx8g1QqHZXKfh335zhi0a+NVUI2R3SWZPQrRuinSDCiTdTb4gvefroiQQgceU9CI57ogiEgGBE6MIdg9mOGwkIozoKojvz6UUmkKmlarzAy0A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1686230337; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cIjPf2GjJew6g+tPGECmJIjJsK9iEsbIjnw3YFF23EE=; b=f4XUMtwBiiSGAX7CK2aahT78/7saeSLAFx5PwJNpP2WW0F9Njj76vv+kCiUXgRDnX3guMJpWXeUHHvvceN3srSdkYH+ka1WkjgwEA23PQ3OovYztrR40HFgJdJWVtbjQcsmxf0neZKx6Z9Oh+X9x38ErNlPS1ZNHUoaDU29o+nM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1686230337125659.9513371301871; Thu, 8 Jun 2023 06:18:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q7FWs-0003bH-Bq; Thu, 08 Jun 2023 09:18:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q7D6i-0002VR-4o for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:43:08 -0400 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q7D6e-0006gO-7e for qemu-devel@nongnu.org; Thu, 08 Jun 2023 06:43:07 -0400 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-4f629ccb8ebso559095e87.1 for ; Thu, 08 Jun 2023 03:43:02 -0700 (PDT) Received: from hp-power-15.localdomain (78-62-135-63.static.zebra.lt. [78.62.135.63]) by smtp.gmail.com with ESMTPSA id w7-20020ac24427000000b004f3945751b2sm142632lfl.43.2023.06.08.03.42.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jun 2023 03:43:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686220980; x=1688812980; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cIjPf2GjJew6g+tPGECmJIjJsK9iEsbIjnw3YFF23EE=; b=TSCw1NSzBvd9nZzzFTAiW9lRLDE3rEL9Ao0QINLEhq0Qx11q5ND/ZYWCR/j9OceKhC DzR2KNdMmCUi9/0krSv1CWEWqgouFBhs8vk9Zl8t57slDqdZeBsbin+mzZ6R0MXHAUkl QSN2D81/WFAiqZpsqRVAqdPYCfMF25DqXwoExQuNle7jaRrZE0XxOyL1pFWfHjpIz+i4 idPFfSjNBIpq1fDLwFOZsJAWTzdjpKgCvAhgbLAk1uwhbeRuXuaST5WaCOAYkWq26Q09 0tgPC+O1FcfkFsPt3OLXMGQ2hoer8U2+j8dXPesdLLl7c1mJr8CjkP7F1j5lBLL/LOl0 +kGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686220980; x=1688812980; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cIjPf2GjJew6g+tPGECmJIjJsK9iEsbIjnw3YFF23EE=; b=C9FK0QS67vhb6E+/s6LqU6Oy7LQs7bkEUbhl33A1nv4EMq3cynOC0jeEgbizU0qiye f9+eqDFSfy+Ftc6BQef0IQ04+gV8enUwj+xMdIUl/ZMCcP9/hrWcQr6RDBZz1XLsHiC8 XrZwohMPO+GaYLI7oVLNe/ebdnW25qzvhmOlH7kh6JmmYkUZVWvarIgFUG/SDLqrTqtu BnMmme2Z+IQC2hJ1K2l9V5jeEivdM+JsnvCDEE9I9yT+BHZGz2mpuI+geWxYw75ELOFq fqHXluq9L2KZuaaE0Dz8GLXltYwj93f1U159c7yiK5VZejx+oeQqnVhNvvV8ingOxijV sqBA== X-Gm-Message-State: AC+VfDyafTFu5FVgrOHr0YV7zP1d/E9Z1c6E6spRIz297SZnvuuZavjW QTJc3n726qcJKcvYQ302Qlx0I/raEi0= X-Google-Smtp-Source: ACHHUZ62fgZvbJMumnggT9QCtC5C7gRO9qY3nn7ox1+g2Oakr++A8B/Py6QslwQYBQrdWhtK1J9DEQ== X-Received: by 2002:ac2:54ae:0:b0:4f2:40dd:e2cf with SMTP id w14-20020ac254ae000000b004f240dde2cfmr3112047lfk.55.1686220980517; Thu, 08 Jun 2023 03:43:00 -0700 (PDT) From: Siarhei Volkau To: qemu-devel@nongnu.org Cc: Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Aurelien Jarno , Stefan Markovic , Aleksandar Markovic , Jiaxun Yang , Siarhei Volkau Subject: [PATCH 33/33] target/mips: Add emulation of MXU Q8SAD instruction Date: Thu, 8 Jun 2023 13:42:22 +0300 Message-Id: <20230608104222.1520143-34-lis8215@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230608104222.1520143-1-lis8215@gmail.com> References: <20230608104222.1520143-1-lis8215@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::129; envelope-from=lis8215@gmail.com; helo=mail-lf1-x129.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 08 Jun 2023 09:17:53 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1686230338605100001 Content-Type: text/plain; charset="utf-8" The instruction implements SAD (sum-absolute-difference) operation which is used in motion estimation algorithms. The instruction handles four 8-bit data in parallel. Signed-off-by: Siarhei Volkau --- target/mips/tcg/mxu_translate.c | 45 +++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/target/mips/tcg/mxu_translate.c b/target/mips/tcg/mxu_translat= e.c index 1e043908db..67a19c7284 100644 --- a/target/mips/tcg/mxu_translate.c +++ b/target/mips/tcg/mxu_translate.c @@ -410,6 +410,7 @@ enum { OPC_MXU_Q16SCOP =3D 0x3B, OPC_MXU_Q8MADL =3D 0x3C, OPC_MXU_S32SFL =3D 0x3D, + OPC_MXU_Q8SAD =3D 0x3E, }; =20 =20 @@ -4041,6 +4042,47 @@ static void gen_mxu_s32sfl(DisasContext *ctx) gen_store_mxu_gpr(t3, XRd); } =20 +/* + * Q8SAD XRa, XRd, XRb, XRc + * Typical SAD opration for motion estimation. + */ +static void gen_mxu_q8sad(DisasContext *ctx) +{ + uint32_t XRd, XRc, XRb, XRa; + + XRd =3D extract32(ctx->opcode, 18, 4); + XRc =3D extract32(ctx->opcode, 14, 4); + XRb =3D extract32(ctx->opcode, 10, 4); + XRa =3D extract32(ctx->opcode, 6, 4); + + TCGv t0 =3D tcg_temp_new(); + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + TCGv t3 =3D tcg_temp_new(); + TCGv t4 =3D tcg_temp_new(); + TCGv t5 =3D tcg_temp_new(); + + gen_load_mxu_gpr(t2, XRb); + gen_load_mxu_gpr(t3, XRc); + gen_load_mxu_gpr(t5, XRd); + tcg_gen_movi_tl(t4, 0); + + for (int i =3D 0; i < 4; i++) { + tcg_gen_andi_tl(t0, t2, 0xff); + tcg_gen_andi_tl(t1, t3, 0xff); + tcg_gen_sub_tl(t0, t0, t1); + tcg_gen_abs_tl(t0, t0); + tcg_gen_add_tl(t4, t4, t0); + if (i < 3) { + tcg_gen_shri_tl(t2, t2, 8); + tcg_gen_shri_tl(t3, t3, 8); + } + } + tcg_gen_add_tl(t5, t5, t4); + gen_store_mxu_gpr(t4, XRa); + gen_store_mxu_gpr(t5, XRd); +} + /* * MXU instruction category: align * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -5042,6 +5084,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn) case OPC_MXU_S32SFL: gen_mxu_s32sfl(ctx); break; + case OPC_MXU_Q8SAD: + gen_mxu_q8sad(ctx); + break; default: return false; } --=20 2.40.0