From nobody Sun May 19 07:11:49 2024 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1591981340; cv=none; d=zohomail.com; s=zohoarc; b=AEfLcqDSA7r0Opc+Vo7InO24NTvMNxNLqZ+ANv1ftcjUeSfBvbVkzq+0E0WC6H2q02OFA/gDgHXEGydCBQT8d7uNmWH5K8pw6BNGpKYa2RMs5CPeon7FacZk3e+N32y6l3CpFKlYF01CN1gOVhotYBJHpCvaFW8NmRq5phOLF5s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591981340; 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=TFgcmUaJ+B6KJxsC71BxT1wGNooHYpVOG9EARvOujOQ=; b=ZitjlVhll374DcjxA5r98/Fzs4Efq0q+G/raLH8riohTEyeAuiXYNdHl1nzhBZDybMbwu8G6TzSEQ6zjky8f2p73WgjPSbbS3vU8zFAk0p8UG9nBzANfB2hrDJyleYprm0L10J06oVwoBZtAk+hgGljmtPPOt1mFCANLApGmjjQ= 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+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591981340506188.31161962042654; Fri, 12 Jun 2020 10:02:20 -0700 (PDT) Received: from localhost ([::1]:55868 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjn4M-0006NY-UH for importer@patchew.org; Fri, 12 Jun 2020 13:02:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55052) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjn1r-0001l1-73 for qemu-devel@nongnu.org; Fri, 12 Jun 2020 12:59:43 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:35975) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjn1p-0002fB-DY for qemu-devel@nongnu.org; Fri, 12 Jun 2020 12:59:42 -0400 Received: by mail-wr1-x42c.google.com with SMTP id q11so10453064wrp.3 for ; Fri, 12 Jun 2020 09:59:35 -0700 (PDT) Received: from localhost.localdomain (net212-32-245-109.mbb.telenor.rs. [109.245.32.212]) by smtp.gmail.com with ESMTPSA id f185sm9923653wmf.43.2020.06.12.09.59.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2020 09:59:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TFgcmUaJ+B6KJxsC71BxT1wGNooHYpVOG9EARvOujOQ=; b=NaCVNXb70EIcbP7D6tefdsnMHHKxtq3/547BnTt+pd5ejWxue8yYi/BEulQ8Ju5pKv Gs6rWSt/BUt59VwSPWN/78UrmYefieLNPWWWCpAWFksE4uW0vmEso2QfrEViIY9XPKTB VPRNhk6SaOWB17TW00nozsdhVilRJlIOe6wI6+ukKcoUC9TMZsxMV7tEXJ+LxEtVrwQH 21eTyiwUJAYPja8zPBDWQQ5VNeqLklZyQT3qvaadLIYXIU7HrapYmU0FAC6xdANJr4Uk iKSTEh/XdbOFnFOWrkKSfr3lJf81ucScFlpfVRNOUAn5rSvc8Pv90PQwM36b+/Lx0y3q moOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TFgcmUaJ+B6KJxsC71BxT1wGNooHYpVOG9EARvOujOQ=; b=bSYeZfD8CknjMqyq3iyGxoSFWIaYOpVWNkDEGo3olMuHd6hFek27Vlv4vNN7V+mHxP B8lhqc5EfBBtZjY43ygyjyJk0KLXu91+nxVHVZ1llUPdVwgdgzT1CoALYxWiJbzJJRbn 9xMR7Yw5zmM4KIZoU//vfA82f+yL0lbJAU8V5HNf6gSgTyrVUTdTbp9Uy4NFqVOxBPyA 72wbNsAaqqUsyMYUZvhMFC+12BGDq/PO5nM3VgIpLVuEGMWue9RFj7HxrSFtmFzg2WTS xW/edFgAkY7xGBbir6dXYuPFwBOoNjh3rjoFCgl+aYuwCdMEXLFUhqd0l90fx1/yeVGS MX+g== X-Gm-Message-State: AOAM533W8wwZ348DSg8TP0UiwyMKBPbp4JfytKCp16U0q9JrEzj8PWC3 dXElM+XmbMDCqNJ7aV1W/DJZgs22Odc= X-Google-Smtp-Source: ABdhPJyH12i+fiE8M1j6ntKCJMgyitFUj5zdseLvBtpCwxFC91xuVZ1mfrpQ3vT9xmCXThxE8K+MFw== X-Received: by 2002:adf:e592:: with SMTP id l18mr16957579wrm.175.1591981173710; Fri, 12 Jun 2020 09:59:33 -0700 (PDT) From: Aleksandar Markovic To: qemu-devel@nongnu.org Subject: [PATCH v7 1/8] target/mips: msa: Split helpers for MADDV. Date: Fri, 12 Jun 2020 18:59:00 +0200 Message-Id: <20200612165907.1272-2-aleksandar.qemu.devel@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200612165907.1272-1-aleksandar.qemu.devel@gmail.com> References: <20200612165907.1272-1-aleksandar.qemu.devel@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42c; envelope-from=aleksandar.qemu.devel@gmail.com; helo=mail-wr1-x42c.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: aleksandar.rikalo@syrmia.com, Aleksandar Markovic Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" Achieves clearer code and slightly better performance. Signed-off-by: Aleksandar Markovic --- target/mips/helper.h | 6 ++- target/mips/msa_helper.c | 79 ++++++++++++++++++++++++++++++++++++---- target/mips/translate.c | 19 ++++++++-- 3 files changed, 92 insertions(+), 12 deletions(-) diff --git a/target/mips/helper.h b/target/mips/helper.h index 84fdd9fd27..e479a22559 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -950,6 +950,11 @@ DEF_HELPER_4(msa_mod_s_h, void, env, i32, i32, i32) DEF_HELPER_4(msa_mod_s_w, void, env, i32, i32, i32) DEF_HELPER_4(msa_mod_s_d, void, env, i32, i32, i32) =20 +DEF_HELPER_4(msa_maddv_b, void, env, i32, i32, i32) +DEF_HELPER_4(msa_maddv_h, void, env, i32, i32, i32) +DEF_HELPER_4(msa_maddv_w, void, env, i32, i32, i32) +DEF_HELPER_4(msa_maddv_d, void, env, i32, i32, i32) + DEF_HELPER_4(msa_asub_s_b, void, env, i32, i32, i32) DEF_HELPER_4(msa_asub_s_h, void, env, i32, i32, i32) DEF_HELPER_4(msa_asub_s_w, void, env, i32, i32, i32) @@ -1069,7 +1074,6 @@ DEF_HELPER_5(msa_subs_u_df, void, env, i32, i32, i32,= i32) DEF_HELPER_5(msa_subsus_u_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_subsuu_s_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_mulv_df, void, env, i32, i32, i32, i32) -DEF_HELPER_5(msa_maddv_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_msubv_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_dotp_s_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_dotp_u_df, void, env, i32, i32, i32, i32) diff --git a/target/mips/msa_helper.c b/target/mips/msa_helper.c index c3b271934a..3b75bdc6a4 100644 --- a/target/mips/msa_helper.c +++ b/target/mips/msa_helper.c @@ -2883,7 +2883,77 @@ void helper_msa_mod_u_d(CPUMIPSState *env, * +---------------+------------------------------------------------------= ----+ */ =20 -/* TODO: insert Int Multiply group helpers here */ +static inline int64_t msa_maddv_df(uint32_t df, int64_t dest, int64_t arg1, + int64_t arg2) +{ + return dest + arg1 * arg2; +} + +void helper_msa_maddv_b(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->b[0] =3D msa_maddv_df(DF_BYTE, pwt->b[0], pws->b[0], pwt->b[0]= ); + pwd->b[1] =3D msa_maddv_df(DF_BYTE, pwt->b[1], pws->b[1], pwt->b[1]= ); + pwd->b[2] =3D msa_maddv_df(DF_BYTE, pwt->b[2], pws->b[2], pwt->b[2]= ); + pwd->b[3] =3D msa_maddv_df(DF_BYTE, pwt->b[3], pws->b[3], pwt->b[3]= ); + pwd->b[4] =3D msa_maddv_df(DF_BYTE, pwt->b[4], pws->b[4], pwt->b[4]= ); + pwd->b[5] =3D msa_maddv_df(DF_BYTE, pwt->b[5], pws->b[5], pwt->b[5]= ); + pwd->b[6] =3D msa_maddv_df(DF_BYTE, pwt->b[6], pws->b[6], pwt->b[6]= ); + pwd->b[7] =3D msa_maddv_df(DF_BYTE, pwt->b[7], pws->b[7], pwt->b[7]= ); + pwd->b[8] =3D msa_maddv_df(DF_BYTE, pwt->b[8], pws->b[8], pwt->b[8]= ); + pwd->b[9] =3D msa_maddv_df(DF_BYTE, pwt->b[9], pws->b[9], pwt->b[9]= ); + pwd->b[10] =3D msa_maddv_df(DF_BYTE, pwt->b[10], pws->b[10], pwt->b[10= ]); + pwd->b[11] =3D msa_maddv_df(DF_BYTE, pwt->b[11], pws->b[11], pwt->b[11= ]); + pwd->b[12] =3D msa_maddv_df(DF_BYTE, pwt->b[12], pws->b[12], pwt->b[12= ]); + pwd->b[13] =3D msa_maddv_df(DF_BYTE, pwt->b[13], pws->b[13], pwt->b[13= ]); + pwd->b[14] =3D msa_maddv_df(DF_BYTE, pwt->b[14], pws->b[14], pwt->b[14= ]); + pwd->b[15] =3D msa_maddv_df(DF_BYTE, pwt->b[15], pws->b[15], pwt->b[15= ]); +} + +void helper_msa_maddv_h(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->h[0] =3D msa_maddv_df(DF_HALF, pwd->h[0], pws->h[0], pwt->h[0]= ); + pwd->h[1] =3D msa_maddv_df(DF_HALF, pwd->h[1], pws->h[1], pwt->h[1]= ); + pwd->h[2] =3D msa_maddv_df(DF_HALF, pwd->h[2], pws->h[2], pwt->h[2]= ); + pwd->h[3] =3D msa_maddv_df(DF_HALF, pwd->h[3], pws->h[3], pwt->h[3]= ); + pwd->h[4] =3D msa_maddv_df(DF_HALF, pwd->h[4], pws->h[4], pwt->h[4]= ); + pwd->h[5] =3D msa_maddv_df(DF_HALF, pwd->h[5], pws->h[5], pwt->h[5]= ); + pwd->h[6] =3D msa_maddv_df(DF_HALF, pwd->h[6], pws->h[6], pwt->h[6]= ); + pwd->h[7] =3D msa_maddv_df(DF_HALF, pwd->h[7], pws->h[7], pwt->h[7]= ); +} + +void helper_msa_maddv_w(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->w[0] =3D msa_maddv_df(DF_WORD, pwd->w[0], pws->w[0], pwt->w[0]= ); + pwd->w[1] =3D msa_maddv_df(DF_WORD, pwd->w[1], pws->w[1], pwt->w[1]= ); + pwd->w[2] =3D msa_maddv_df(DF_WORD, pwd->w[2], pws->w[2], pwt->w[2]= ); + pwd->w[3] =3D msa_maddv_df(DF_WORD, pwd->w[3], pws->w[3], pwt->w[3]= ); +} + +void helper_msa_maddv_d(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->d[0] =3D msa_maddv_df(DF_DOUBLE, pwd->d[0], pws->d[0], pwt->d[= 0]); + pwd->d[1] =3D msa_maddv_df(DF_DOUBLE, pwd->d[1], pws->d[1], pwt->d[= 1]); +} =20 =20 /* @@ -4816,12 +4886,6 @@ void helper_msa_sld_df(CPUMIPSState *env, uint32_t d= f, uint32_t wd, msa_sld_df(df, pwd, pws, env->active_tc.gpr[rt]); } =20 -static inline int64_t msa_maddv_df(uint32_t df, int64_t dest, int64_t arg1, - int64_t arg2) -{ - return dest + arg1 * arg2; -} - static inline int64_t msa_msubv_df(uint32_t df, int64_t dest, int64_t arg1, int64_t arg2) { @@ -5002,7 +5066,6 @@ void helper_msa_ ## func ## _df(CPUMIPSState *env, ui= nt32_t df, uint32_t wd, \ } = \ } =20 -MSA_TEROP_DF(maddv) MSA_TEROP_DF(msubv) MSA_TEROP_DF(dpadd_s) MSA_TEROP_DF(dpadd_u) diff --git a/target/mips/translate.c b/target/mips/translate.c index 2caf4cba5a..0f33496962 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -29057,6 +29057,22 @@ static void gen_msa_3r(CPUMIPSState *env, DisasCon= text *ctx) break; } break; + case OPC_MADDV_df: + switch (df) { + case DF_BYTE: + gen_helper_msa_maddv_b(cpu_env, twd, tws, twt); + break; + case DF_HALF: + gen_helper_msa_maddv_h(cpu_env, twd, tws, twt); + break; + case DF_WORD: + gen_helper_msa_maddv_w(cpu_env, twd, tws, twt); + break; + case DF_DOUBLE: + gen_helper_msa_maddv_d(cpu_env, twd, tws, twt); + break; + } + break; case OPC_ASUB_S_df: switch (df) { case DF_BYTE: @@ -29283,9 +29299,6 @@ static void gen_msa_3r(CPUMIPSState *env, DisasCont= ext *ctx) case OPC_SUBS_U_df: gen_helper_msa_subs_u_df(cpu_env, tdf, twd, tws, twt); break; - case OPC_MADDV_df: - gen_helper_msa_maddv_df(cpu_env, tdf, twd, tws, twt); - break; case OPC_SPLAT_df: gen_helper_msa_splat_df(cpu_env, tdf, twd, tws, twt); break; --=20 2.20.1 From nobody Sun May 19 07:11:49 2024 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1591981249; cv=none; d=zohomail.com; s=zohoarc; b=KpY0PzUPq9L33lSY2BRi+fFLmO4l9c6s5r3qGfUtfk1Ghg9xCVgcmP0yHd22XhYNNbOmrUw+K9Zs6J9Cl99m8zIFeDvEaaowXRG5NOC3lKIDjRiZfdVSZYVo3Ok6WEJj4hSdLX0qId7qa873apAyzJNzDLGILZMgMI+lDKVrndA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591981249; 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=2ejhXl7KR0HI8FLGeWFyN6LXoaWmq0oXL6jpKmlDPHA=; b=Ngs2h2AvUzsFBu3DCZfyaZaYdF1Of8mMuHtshLdKDm1tyneIaR1HwxF8dUPyORn2yO2z7qL8fFvV0nkPlovvnMvqHoCvt/ey+WI9ffLqQlU/LueZRzLDKNRC2EgS8jc9xEhUlHrs6i7EJ6qD7uqPN4Ulgr9kPWdrG/s5QwKEtTw= 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+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591981249393275.9212585774628; Fri, 12 Jun 2020 10:00:49 -0700 (PDT) Received: from localhost ([::1]:50560 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjn2t-0003TH-W3 for importer@patchew.org; Fri, 12 Jun 2020 13:00:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55128) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjn1v-0001pi-Do for qemu-devel@nongnu.org; Fri, 12 Jun 2020 12:59:47 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:41348) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjn1t-0002fS-MQ for qemu-devel@nongnu.org; Fri, 12 Jun 2020 12:59:47 -0400 Received: by mail-wr1-x442.google.com with SMTP id j10so10435427wrw.8 for ; Fri, 12 Jun 2020 09:59:39 -0700 (PDT) Received: from localhost.localdomain (net212-32-245-109.mbb.telenor.rs. [109.245.32.212]) by smtp.gmail.com with ESMTPSA id f185sm9923653wmf.43.2020.06.12.09.59.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2020 09:59:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2ejhXl7KR0HI8FLGeWFyN6LXoaWmq0oXL6jpKmlDPHA=; b=XdN+cRHKMAZ3b52CpTbY4YZ2Hq7QQXi6WR1KmfD7nEEMoUBgkgDVoy559G2Os9XKYB CRLZ+fI0z4KPRg1vL6hvdq8hRhglqoZRM1B/I9SIpum/B1ab7xO5mP5CInHKWBo6mdyY 0VwztFTe2BRDjSvfA/FPGlbWOnXlXsO/wuJON40hENDCz7IQCSZhUYdQ+Nu/o8gxCpLo x6CnWio6mJQlEyc/HDTWZDpIc0GSj9qzAAs6ZynwN367QfPI0MPCXYvpnx4akA9aeDhh YEQ1MUY0W8ESxN4k73kAtmc2vqaCFfpTn8qLNA8hjdHpkWlhRydQDtN3MOAHi/3okhWG aS4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2ejhXl7KR0HI8FLGeWFyN6LXoaWmq0oXL6jpKmlDPHA=; b=GyR8affzb87N/J5B8YRQH8Epg5ySFJYE9zBzwwPLu9aJMzRSLsDM73tG94QfqeEQ6j O+6FpVlL0E7bOpvJ44m+bRbvuhkrA4BkXXQY4vWi6kRWwA4uUDfAPN4iPaJEVPWToipY EhC4jFc6slBmxhdjf+E7nAt2YA/YUsTar8vc5cxfFD/PAp+P8wumEANEwKGzToKvnsOG uSsO3TUIoIdYIG//YsibIW/5fM1XKCGblEhNNsbr/tIHESIa7GkMQwKRGqm9dxtCz/Mj 541wznTg3kA/oGKGAnVD3b9VKOZnIuVB876MxxJRt4NTb+Tfu1gXrmsCpJxnDS6dIrqz Q8Ow== X-Gm-Message-State: AOAM5337Woyian6zH13NLTuWznI/tU4VEpSnBKRYytJ10bXzF3AEOVb1 RRvQvfjy+W90+gPujHVKv//e90Njoy8= X-Google-Smtp-Source: ABdhPJwzhtSRbcHCuKTgC3ExKetNIHih1J/CHZqz3+83+jGp5t5ahIEqUDiiwDm43p6FHIh7NTQ1eg== X-Received: by 2002:adf:f611:: with SMTP id t17mr15420285wrp.69.1591981178233; Fri, 12 Jun 2020 09:59:38 -0700 (PDT) From: Aleksandar Markovic To: qemu-devel@nongnu.org Subject: [PATCH v7 2/8] target/mips: msa: Split helpers for MSUBV. Date: Fri, 12 Jun 2020 18:59:01 +0200 Message-Id: <20200612165907.1272-3-aleksandar.qemu.devel@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200612165907.1272-1-aleksandar.qemu.devel@gmail.com> References: <20200612165907.1272-1-aleksandar.qemu.devel@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::442; envelope-from=aleksandar.qemu.devel@gmail.com; helo=mail-wr1-x442.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: aleksandar.rikalo@syrmia.com, Aleksandar Markovic Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" Achieves clearer code and slightly better performance. Signed-off-by: Aleksandar Markovic --- target/mips/helper.h | 6 ++- target/mips/msa_helper.c | 79 ++++++++++++++++++++++++++++++++++++---- target/mips/translate.c | 19 ++++++++-- 3 files changed, 93 insertions(+), 11 deletions(-) diff --git a/target/mips/helper.h b/target/mips/helper.h index e479a22559..7ca0036807 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -955,6 +955,11 @@ DEF_HELPER_4(msa_maddv_h, void, env, i32, i32, i32) DEF_HELPER_4(msa_maddv_w, void, env, i32, i32, i32) DEF_HELPER_4(msa_maddv_d, void, env, i32, i32, i32) =20 +DEF_HELPER_4(msa_msubv_b, void, env, i32, i32, i32) +DEF_HELPER_4(msa_msubv_h, void, env, i32, i32, i32) +DEF_HELPER_4(msa_msubv_w, void, env, i32, i32, i32) +DEF_HELPER_4(msa_msubv_d, void, env, i32, i32, i32) + DEF_HELPER_4(msa_asub_s_b, void, env, i32, i32, i32) DEF_HELPER_4(msa_asub_s_h, void, env, i32, i32, i32) DEF_HELPER_4(msa_asub_s_w, void, env, i32, i32, i32) @@ -1074,7 +1079,6 @@ DEF_HELPER_5(msa_subs_u_df, void, env, i32, i32, i32,= i32) DEF_HELPER_5(msa_subsus_u_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_subsuu_s_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_mulv_df, void, env, i32, i32, i32, i32) -DEF_HELPER_5(msa_msubv_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_dotp_s_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_dotp_u_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_dpadd_s_df, void, env, i32, i32, i32, i32) diff --git a/target/mips/msa_helper.c b/target/mips/msa_helper.c index 3b75bdc6a4..2b54de0959 100644 --- a/target/mips/msa_helper.c +++ b/target/mips/msa_helper.c @@ -2955,6 +2955,78 @@ void helper_msa_maddv_d(CPUMIPSState *env, pwd->d[1] =3D msa_maddv_df(DF_DOUBLE, pwd->d[1], pws->d[1], pwt->d[= 1]); } =20 +static inline int64_t msa_msubv_df(uint32_t df, int64_t dest, int64_t arg1, + int64_t arg2) +{ + return dest - arg1 * arg2; +} + +void helper_msa_msubv_b(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->b[0] =3D msa_msubv_df(DF_BYTE, pwt->b[0], pws->b[0], pwt->b[0]= ); + pwd->b[1] =3D msa_msubv_df(DF_BYTE, pwt->b[1], pws->b[1], pwt->b[1]= ); + pwd->b[2] =3D msa_msubv_df(DF_BYTE, pwt->b[2], pws->b[2], pwt->b[2]= ); + pwd->b[3] =3D msa_msubv_df(DF_BYTE, pwt->b[3], pws->b[3], pwt->b[3]= ); + pwd->b[4] =3D msa_msubv_df(DF_BYTE, pwt->b[4], pws->b[4], pwt->b[4]= ); + pwd->b[5] =3D msa_msubv_df(DF_BYTE, pwt->b[5], pws->b[5], pwt->b[5]= ); + pwd->b[6] =3D msa_msubv_df(DF_BYTE, pwt->b[6], pws->b[6], pwt->b[6]= ); + pwd->b[7] =3D msa_msubv_df(DF_BYTE, pwt->b[7], pws->b[7], pwt->b[7]= ); + pwd->b[8] =3D msa_msubv_df(DF_BYTE, pwt->b[8], pws->b[8], pwt->b[8]= ); + pwd->b[9] =3D msa_msubv_df(DF_BYTE, pwt->b[9], pws->b[9], pwt->b[9]= ); + pwd->b[10] =3D msa_msubv_df(DF_BYTE, pwt->b[10], pws->b[10], pwt->b[10= ]); + pwd->b[11] =3D msa_msubv_df(DF_BYTE, pwt->b[11], pws->b[11], pwt->b[11= ]); + pwd->b[12] =3D msa_msubv_df(DF_BYTE, pwt->b[12], pws->b[12], pwt->b[12= ]); + pwd->b[13] =3D msa_msubv_df(DF_BYTE, pwt->b[13], pws->b[13], pwt->b[13= ]); + pwd->b[14] =3D msa_msubv_df(DF_BYTE, pwt->b[14], pws->b[14], pwt->b[14= ]); + pwd->b[15] =3D msa_msubv_df(DF_BYTE, pwt->b[15], pws->b[15], pwt->b[15= ]); +} + +void helper_msa_msubv_h(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->h[0] =3D msa_msubv_df(DF_HALF, pwd->h[0], pws->h[0], pwt->h[0]= ); + pwd->h[1] =3D msa_msubv_df(DF_HALF, pwd->h[1], pws->h[1], pwt->h[1]= ); + pwd->h[2] =3D msa_msubv_df(DF_HALF, pwd->h[2], pws->h[2], pwt->h[2]= ); + pwd->h[3] =3D msa_msubv_df(DF_HALF, pwd->h[3], pws->h[3], pwt->h[3]= ); + pwd->h[4] =3D msa_msubv_df(DF_HALF, pwd->h[4], pws->h[4], pwt->h[4]= ); + pwd->h[5] =3D msa_msubv_df(DF_HALF, pwd->h[5], pws->h[5], pwt->h[5]= ); + pwd->h[6] =3D msa_msubv_df(DF_HALF, pwd->h[6], pws->h[6], pwt->h[6]= ); + pwd->h[7] =3D msa_msubv_df(DF_HALF, pwd->h[7], pws->h[7], pwt->h[7]= ); +} + +void helper_msa_msubv_w(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->w[0] =3D msa_msubv_df(DF_WORD, pwd->w[0], pws->w[0], pwt->w[0]= ); + pwd->w[1] =3D msa_msubv_df(DF_WORD, pwd->w[1], pws->w[1], pwt->w[1]= ); + pwd->w[2] =3D msa_msubv_df(DF_WORD, pwd->w[2], pws->w[2], pwt->w[2]= ); + pwd->w[3] =3D msa_msubv_df(DF_WORD, pwd->w[3], pws->w[3], pwt->w[3]= ); +} + +void helper_msa_msubv_d(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->d[0] =3D msa_msubv_df(DF_DOUBLE, pwd->d[0], pws->d[0], pwt->d[= 0]); + pwd->d[1] =3D msa_msubv_df(DF_DOUBLE, pwd->d[1], pws->d[1], pwt->d[= 1]); +} + =20 /* * Int Subtract @@ -4886,12 +4958,6 @@ void helper_msa_sld_df(CPUMIPSState *env, uint32_t d= f, uint32_t wd, msa_sld_df(df, pwd, pws, env->active_tc.gpr[rt]); } =20 -static inline int64_t msa_msubv_df(uint32_t df, int64_t dest, int64_t arg1, - int64_t arg2) -{ - return dest - arg1 * arg2; -} - static inline int64_t msa_dpadd_s_df(uint32_t df, int64_t dest, int64_t ar= g1, int64_t arg2) { @@ -5066,7 +5132,6 @@ void helper_msa_ ## func ## _df(CPUMIPSState *env, ui= nt32_t df, uint32_t wd, \ } = \ } =20 -MSA_TEROP_DF(msubv) MSA_TEROP_DF(dpadd_s) MSA_TEROP_DF(dpadd_u) MSA_TEROP_DF(dpsub_s) diff --git a/target/mips/translate.c b/target/mips/translate.c index 0f33496962..a5e16e855c 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -29073,6 +29073,22 @@ static void gen_msa_3r(CPUMIPSState *env, DisasCon= text *ctx) break; } break; + case OPC_MSUBV_df: + switch (df) { + case DF_BYTE: + gen_helper_msa_msubv_b(cpu_env, twd, tws, twt); + break; + case DF_HALF: + gen_helper_msa_msubv_h(cpu_env, twd, tws, twt); + break; + case DF_WORD: + gen_helper_msa_msubv_w(cpu_env, twd, tws, twt); + break; + case DF_DOUBLE: + gen_helper_msa_msubv_d(cpu_env, twd, tws, twt); + break; + } + break; case OPC_ASUB_S_df: switch (df) { case DF_BYTE: @@ -29305,9 +29321,6 @@ static void gen_msa_3r(CPUMIPSState *env, DisasCont= ext *ctx) case OPC_SUBSUS_U_df: gen_helper_msa_subsus_u_df(cpu_env, tdf, twd, tws, twt); break; - case OPC_MSUBV_df: - gen_helper_msa_msubv_df(cpu_env, tdf, twd, tws, twt); - break; case OPC_SUBSUU_S_df: gen_helper_msa_subsuu_s_df(cpu_env, tdf, twd, tws, twt); break; --=20 2.20.1 From nobody Sun May 19 07:11:49 2024 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1591981462; cv=none; d=zohomail.com; s=zohoarc; b=fYs7o3/NOfsuhSy2LCOtREOU0mxzUYiOr+FS+KobI2JtJ85fEEclp+BrEhK4g9pjMyp7QKon+RyWIUwnaZ14h8u/aPmY8Tl0Gv4UEuGS/6//9W7l1ZaVj2+/rlkZuEssxXn7tcAeu+7Y1pSofeRoAM/M/YQpsJ9OpqIwFi6xvxA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591981462; 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=5vY+wGBY41iINpEFYXiwglvdrTKdWdrAKhhV/TbcDtw=; b=MRtfyTC800EDVEOpbUUTCq0jYh/8/db/giojJIVD9dJsYI2t4qHTQU0Zbiubav0df1MxdhU2otdzgr94hs2Mb/JKWNbt7M95thRNdcklzQe8W9f5fvL6AkKcS8veup4MHGnTaKqbyBJNuA6hM+kGebg8U3/Be1kayqjwHgthOQ0= 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+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591981462250470.823703028767; Fri, 12 Jun 2020 10:04:22 -0700 (PDT) Received: from localhost ([::1]:33908 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjn6L-0000f8-2h for importer@patchew.org; Fri, 12 Jun 2020 13:04:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55180) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjn1y-0001v7-QX for qemu-devel@nongnu.org; Fri, 12 Jun 2020 12:59:50 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]:55681) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjn1x-0002fk-0m for qemu-devel@nongnu.org; Fri, 12 Jun 2020 12:59:50 -0400 Received: by mail-wm1-x336.google.com with SMTP id c71so8789324wmd.5 for ; Fri, 12 Jun 2020 09:59:42 -0700 (PDT) Received: from localhost.localdomain (net212-32-245-109.mbb.telenor.rs. [109.245.32.212]) by smtp.gmail.com with ESMTPSA id f185sm9923653wmf.43.2020.06.12.09.59.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2020 09:59:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5vY+wGBY41iINpEFYXiwglvdrTKdWdrAKhhV/TbcDtw=; b=T/5ekr6oCIwu47yZn0RSa9oBvmcD6FgNBcrKnoZ0kMSuYeGxymANdob5ORHLd09v17 Rk0JNcNzv9NvdvqbY1ibNDgXGIXpTZYHddr5IfqSiNtNCKX5P2yOuFGSAfXzK0bR+hQT RUoAYCgTe2FC927i/5XuNlJ8cV5ArX7CHYjVUM7JeAfXWeNk4ZDsNAfUDrA44CV4BxgD 5rupr1aCmOGfZE1UKEx94VsqcOBHhQYkgUn6g0N6/uxlMZxpqeivPE/kpdqaykvjX15y rSNS3TOxSbHqKeLWFcK1pAkERo80HecDis9CpccJWjffJ8XTsimVYa6MZqERuZh7u8Ck Uxmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5vY+wGBY41iINpEFYXiwglvdrTKdWdrAKhhV/TbcDtw=; b=MvDLC8cJMMrxEUlISDoaP8l/1anVlyx8kXlUine0i4KiqYh5ubZWoF62fNVttb9ecp jJFEHATgwXg0aPfgs/i1cD6hPpS0l6FS/w2CJ3lXDjk3jdjDjmpth5Ox2zq54fvFS17/ 3pexjj2XruNlh2tFc/iflodWkUsRvFjKs6KS4J7/o9rcZtCPL92tWdRHEd5WKWHZSSS+ zs6ggh7LFeCVvP43W2Sh6Y5U6bM8dmRiDtTkm35H0BOFiFDNXX5mZOAmCCK4BOUN3e8n dASvJm5+Iu8p8U/qr6ubbgeTayi9iTSSxbY57SzaZMvo2toWHFzCNpe4QmnIKpRCx4Ms 5v0Q== X-Gm-Message-State: AOAM533YI4gvj+m1kOuGIhDljy7I79qMpqDbi811drlqLWU5pfGbZWOA H/Npb0SeTcyWPnbmdAmHcqeM8Bt542Q= X-Google-Smtp-Source: ABdhPJxtXocBoMVej06/02O3fTPjYZokzd8uh+0YiS00L1hmbyNhQCS1n85oYWzCzhxcZNVWtrMkhw== X-Received: by 2002:a1c:6243:: with SMTP id w64mr14005536wmb.162.1591981181302; Fri, 12 Jun 2020 09:59:41 -0700 (PDT) From: Aleksandar Markovic To: qemu-devel@nongnu.org Subject: [PATCH v7 3/8] target/mips: msa: Split helpers for DPADD_S. Date: Fri, 12 Jun 2020 18:59:02 +0200 Message-Id: <20200612165907.1272-4-aleksandar.qemu.devel@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200612165907.1272-1-aleksandar.qemu.devel@gmail.com> References: <20200612165907.1272-1-aleksandar.qemu.devel@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=aleksandar.qemu.devel@gmail.com; helo=mail-wm1-x336.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: aleksandar.rikalo@syrmia.com, Aleksandar Markovic Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" Achieves clearer code and slightly better performance. Signed-off-by: Aleksandar Markovic --- target/mips/helper.h | 4 +- target/mips/msa_helper.c | 90 ++++++++++++++++++++++++++++------------ target/mips/translate.c | 12 +++++- 3 files changed, 78 insertions(+), 28 deletions(-) diff --git a/target/mips/helper.h b/target/mips/helper.h index 7ca0036807..16f2d53ad0 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -1081,7 +1081,9 @@ DEF_HELPER_5(msa_subsuu_s_df, void, env, i32, i32, i3= 2, i32) DEF_HELPER_5(msa_mulv_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_dotp_s_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_dotp_u_df, void, env, i32, i32, i32, i32) -DEF_HELPER_5(msa_dpadd_s_df, void, env, i32, i32, i32, i32) +DEF_HELPER_4(msa_dpadd_s_h, void, env, i32, i32, i32) +DEF_HELPER_4(msa_dpadd_s_w, void, env, i32, i32, i32) +DEF_HELPER_4(msa_dpadd_s_d, void, env, i32, i32, i32) DEF_HELPER_5(msa_dpadd_u_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_dpsub_s_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_dpsub_u_df, void, env, i32, i32, i32, i32) diff --git a/target/mips/msa_helper.c b/target/mips/msa_helper.c index 2b54de0959..086b56f58c 100644 --- a/target/mips/msa_helper.c +++ b/target/mips/msa_helper.c @@ -2224,7 +2224,70 @@ void helper_msa_div_u_d(CPUMIPSState *env, * +---------------+------------------------------------------------------= ----+ */ =20 -/* TODO: insert Int Dot Product group helpers here */ +#define SIGNED_EXTRACT(e, o, a, df) \ + do { \ + e =3D SIGNED_EVEN(a, df); \ + o =3D SIGNED_ODD(a, df); \ + } while (0) + +#define UNSIGNED_EXTRACT(e, o, a, df) \ + do { \ + e =3D UNSIGNED_EVEN(a, df); \ + o =3D UNSIGNED_ODD(a, df); \ + } while (0) + +static inline int64_t msa_dpadd_s_df(uint32_t df, int64_t dest, int64_t ar= g1, + int64_t arg2) +{ + int64_t even_arg1; + int64_t even_arg2; + int64_t odd_arg1; + int64_t odd_arg2; + SIGNED_EXTRACT(even_arg1, odd_arg1, arg1, df); + SIGNED_EXTRACT(even_arg2, odd_arg2, arg2, df); + return dest + (even_arg1 * even_arg2) + (odd_arg1 * odd_arg2); +} + +void helper_msa_dpadd_s_h(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->h[0] =3D msa_dpadd_s_df(DF_HALF, pwd->h[0], pws->h[0], pwt->h[= 0]); + pwd->h[1] =3D msa_dpadd_s_df(DF_HALF, pwd->h[1], pws->h[1], pwt->h[= 1]); + pwd->h[2] =3D msa_dpadd_s_df(DF_HALF, pwd->h[2], pws->h[2], pwt->h[= 2]); + pwd->h[3] =3D msa_dpadd_s_df(DF_HALF, pwd->h[3], pws->h[3], pwt->h[= 3]); + pwd->h[4] =3D msa_dpadd_s_df(DF_HALF, pwd->h[4], pws->h[4], pwt->h[= 4]); + pwd->h[5] =3D msa_dpadd_s_df(DF_HALF, pwd->h[5], pws->h[5], pwt->h[= 5]); + pwd->h[6] =3D msa_dpadd_s_df(DF_HALF, pwd->h[6], pws->h[6], pwt->h[= 6]); + pwd->h[7] =3D msa_dpadd_s_df(DF_HALF, pwd->h[7], pws->h[7], pwt->h[= 7]); +} + +void helper_msa_dpadd_s_w(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->w[0] =3D msa_dpadd_s_df(DF_WORD, pwd->w[0], pws->w[0], pwt->w[= 0]); + pwd->w[1] =3D msa_dpadd_s_df(DF_WORD, pwd->w[1], pws->w[1], pwt->w[= 1]); + pwd->w[2] =3D msa_dpadd_s_df(DF_WORD, pwd->w[2], pws->w[2], pwt->w[= 2]); + pwd->w[3] =3D msa_dpadd_s_df(DF_WORD, pwd->w[3], pws->w[3], pwt->w[= 3]); +} + +void helper_msa_dpadd_s_d(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->d[0] =3D msa_dpadd_s_df(DF_DOUBLE, pwd->d[0], pws->d[0], pwt->= d[0]); + pwd->d[1] =3D msa_dpadd_s_df(DF_DOUBLE, pwd->d[1], pws->d[1], pwt->= d[1]); +} =20 =20 /* @@ -4785,18 +4848,6 @@ static inline int64_t msa_mulv_df(uint32_t df, int64= _t arg1, int64_t arg2) return arg1 * arg2; } =20 -#define SIGNED_EXTRACT(e, o, a, df) \ - do { \ - e =3D SIGNED_EVEN(a, df); \ - o =3D SIGNED_ODD(a, df); \ - } while (0) - -#define UNSIGNED_EXTRACT(e, o, a, df) \ - do { \ - e =3D UNSIGNED_EVEN(a, df); \ - o =3D UNSIGNED_ODD(a, df); \ - } while (0) - static inline int64_t msa_dotp_s_df(uint32_t df, int64_t arg1, int64_t arg= 2) { int64_t even_arg1; @@ -4958,18 +5009,6 @@ void helper_msa_sld_df(CPUMIPSState *env, uint32_t d= f, uint32_t wd, msa_sld_df(df, pwd, pws, env->active_tc.gpr[rt]); } =20 -static inline int64_t msa_dpadd_s_df(uint32_t df, int64_t dest, int64_t ar= g1, - int64_t arg2) -{ - int64_t even_arg1; - int64_t even_arg2; - int64_t odd_arg1; - int64_t odd_arg2; - SIGNED_EXTRACT(even_arg1, odd_arg1, arg1, df); - SIGNED_EXTRACT(even_arg2, odd_arg2, arg2, df); - return dest + (even_arg1 * even_arg2) + (odd_arg1 * odd_arg2); -} - static inline int64_t msa_dpadd_u_df(uint32_t df, int64_t dest, int64_t ar= g1, int64_t arg2) { @@ -5132,7 +5171,6 @@ void helper_msa_ ## func ## _df(CPUMIPSState *env, ui= nt32_t df, uint32_t wd, \ } = \ } =20 -MSA_TEROP_DF(dpadd_s) MSA_TEROP_DF(dpadd_u) MSA_TEROP_DF(dpsub_s) MSA_TEROP_DF(dpsub_u) diff --git a/target/mips/translate.c b/target/mips/translate.c index a5e16e855c..94c3d15f2d 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -29399,7 +29399,17 @@ static void gen_msa_3r(CPUMIPSState *env, DisasCon= text *ctx) gen_helper_msa_dotp_u_df(cpu_env, tdf, twd, tws, twt); break; case OPC_DPADD_S_df: - gen_helper_msa_dpadd_s_df(cpu_env, tdf, twd, tws, twt); + switch (df) { + case DF_HALF: + gen_helper_msa_dpadd_s_h(cpu_env, twd, tws, twt); + break; + case DF_WORD: + gen_helper_msa_dpadd_s_w(cpu_env, twd, tws, twt); + break; + case DF_DOUBLE: + gen_helper_msa_dpadd_s_d(cpu_env, twd, tws, twt); + break; + } break; case OPC_DPADD_U_df: gen_helper_msa_dpadd_u_df(cpu_env, tdf, twd, tws, twt); --=20 2.20.1 From nobody Sun May 19 07:11:49 2024 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1591981260; cv=none; d=zohomail.com; s=zohoarc; b=lOKYfcthTp+i5eOkTAiTwfLRSrYfB3xW+tAORfog9zlM1xuZPC1xEv5/b+HFSIEayYO8+8uhpTNMVHWjQm9ejfXchjJkgeLb0Is4DWDaAPeOWRxwaQ6IQERmrqWx/VrKWVkaEsP00pqExgqHPcttkBl5+zDPqujAwdCV9HQZUF8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591981260; 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=CI8jXViJN2qgSqtx+NZowv+UXtVOOHtXhJjKMuNwPDY=; b=MRajBYeRpb/p1l1/vrZrbYP87czZM0s5D2V2ZcdXlIA2BTtcKSan8B26sNRL8w7TzDn1gRtMPQiZCGuMBGMPniMnnMnKGHwrWBxlS1ZovkMUwCEHPHuAUSu6gV7FQUXStGoFq/o/ZXTo01GUHzRvVjqsQyEOWMBMVbyxHxU+bi4= 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+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591981260304968.9367214321883; Fri, 12 Jun 2020 10:01:00 -0700 (PDT) Received: from localhost ([::1]:51274 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjn34-0003uw-TD for importer@patchew.org; Fri, 12 Jun 2020 13:00:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55234) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjn22-00020x-7W for qemu-devel@nongnu.org; Fri, 12 Jun 2020 12:59:54 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:44703) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjn20-0002fw-Dk for qemu-devel@nongnu.org; Fri, 12 Jun 2020 12:59:53 -0400 Received: by mail-wr1-x441.google.com with SMTP id y17so10413792wrn.11 for ; Fri, 12 Jun 2020 09:59:45 -0700 (PDT) Received: from localhost.localdomain (net212-32-245-109.mbb.telenor.rs. [109.245.32.212]) by smtp.gmail.com with ESMTPSA id f185sm9923653wmf.43.2020.06.12.09.59.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2020 09:59:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CI8jXViJN2qgSqtx+NZowv+UXtVOOHtXhJjKMuNwPDY=; b=dvVbST20ie6uVzc5KDWiyI9xcuf9JDnD4mr0ulY+DuGAnpKLIWzTL5qRwsV70aKzZw lPgyyBjBlJ+05rqw2xSkXFGJr931Z4HqFeUtzHMiMKPa+iSYooWoxknIiVDBwE39tK6e kcj341vyo+BwkXFgGm0XK/RxDAKWk+55kJrrj2q2RdVgeqJHCLholzPTs1mf3zrOcpd4 58X5gbb937ewF4ywCTV43LLbZGQwM8cXhpmVJdJ6mH1WlsLiHMbqtDKZt6/Dkn4Iqwyn Fvr3ERElT6MDgyiQNoL/1lVcP5lrCsoZxwMTSmqq0clWGV/KU6i3o39+gFhuOJpD7ipv jSTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CI8jXViJN2qgSqtx+NZowv+UXtVOOHtXhJjKMuNwPDY=; b=UL3+QGZF9xc/B4nWnYv45IkXQoZYfFDgDntbPtxrDANXl7TPt8srwiUxMlj6Ym8x1s d4kdvNo+SOw5oZrvkEIbqnnXPhlMEqNwmZk6fmmZY/1OCtwVep9DhDf4CS3ZZEUSl+Sp vQfSQbaD+YBPRufYfEikB0tEIxocsxDFL0nIi3ejjsVmgjmVDplEdWP2ncZNx1bvhrFl jNjZOmADjzwmuFnMkeG/sALGil1gT+976DaeJXmFt1GkxhTsU3lg8lR9veqg569ETwUx Suwa283JtAD3SLvewicOpj7VMaViv4DbBnexCZA2d3qPXbjn5uUl7MYTd7B6dPYQSMnH BFMw== X-Gm-Message-State: AOAM533UUF5Ge4vhwris22KJ1Dr5bmHJ+y5z5cyDJWO8JCHOTkCg3phA dKE9oRmoa3NPJAMrp8YS8z9MLT06glc= X-Google-Smtp-Source: ABdhPJwnykaksRGTbd6NdXyOOsx9cpDLPo8qAmPld8a9uJO5oISz/HxEP1M8b16WzZhy9Cd/LJjpLQ== X-Received: by 2002:a5d:4fc4:: with SMTP id h4mr15512687wrw.49.1591981183989; Fri, 12 Jun 2020 09:59:43 -0700 (PDT) From: Aleksandar Markovic To: qemu-devel@nongnu.org Subject: [PATCH v7 4/8] target/mips: msa: Split helpers for DPADD_U. Date: Fri, 12 Jun 2020 18:59:03 +0200 Message-Id: <20200612165907.1272-5-aleksandar.qemu.devel@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200612165907.1272-1-aleksandar.qemu.devel@gmail.com> References: <20200612165907.1272-1-aleksandar.qemu.devel@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::441; envelope-from=aleksandar.qemu.devel@gmail.com; helo=mail-wr1-x441.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: aleksandar.rikalo@syrmia.com, Aleksandar Markovic Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" Achieves clearer code and slightly better performance. Signed-off-by: Aleksandar Markovic --- target/mips/helper.h | 4 ++- target/mips/msa_helper.c | 67 ++++++++++++++++++++++++++++++++-------- target/mips/translate.c | 12 ++++++- 3 files changed, 68 insertions(+), 15 deletions(-) diff --git a/target/mips/helper.h b/target/mips/helper.h index 16f2d53ad0..155b6bbe3e 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -1084,7 +1084,9 @@ DEF_HELPER_5(msa_dotp_u_df, void, env, i32, i32, i32,= i32) DEF_HELPER_4(msa_dpadd_s_h, void, env, i32, i32, i32) DEF_HELPER_4(msa_dpadd_s_w, void, env, i32, i32, i32) DEF_HELPER_4(msa_dpadd_s_d, void, env, i32, i32, i32) -DEF_HELPER_5(msa_dpadd_u_df, void, env, i32, i32, i32, i32) +DEF_HELPER_4(msa_dpadd_u_h, void, env, i32, i32, i32) +DEF_HELPER_4(msa_dpadd_u_w, void, env, i32, i32, i32) +DEF_HELPER_4(msa_dpadd_u_d, void, env, i32, i32, i32) DEF_HELPER_5(msa_dpsub_s_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_dpsub_u_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_sld_df, void, env, i32, i32, i32, i32) diff --git a/target/mips/msa_helper.c b/target/mips/msa_helper.c index 086b56f58c..9741c94d27 100644 --- a/target/mips/msa_helper.c +++ b/target/mips/msa_helper.c @@ -2290,6 +2290,60 @@ void helper_msa_dpadd_s_d(CPUMIPSState *env, } =20 =20 +static inline int64_t msa_dpadd_u_df(uint32_t df, int64_t dest, int64_t ar= g1, + int64_t arg2) +{ + int64_t even_arg1; + int64_t even_arg2; + int64_t odd_arg1; + int64_t odd_arg2; + UNSIGNED_EXTRACT(even_arg1, odd_arg1, arg1, df); + UNSIGNED_EXTRACT(even_arg2, odd_arg2, arg2, df); + return dest + (even_arg1 * even_arg2) + (odd_arg1 * odd_arg2); +} + +void helper_msa_dpadd_u_h(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->h[0] =3D msa_dpadd_u_df(DF_HALF, pwd->h[0], pws->h[0], pwt->h[= 0]); + pwd->h[1] =3D msa_dpadd_u_df(DF_HALF, pwd->h[1], pws->h[1], pwt->h[= 1]); + pwd->h[2] =3D msa_dpadd_u_df(DF_HALF, pwd->h[2], pws->h[2], pwt->h[= 2]); + pwd->h[3] =3D msa_dpadd_u_df(DF_HALF, pwd->h[3], pws->h[3], pwt->h[= 3]); + pwd->h[4] =3D msa_dpadd_u_df(DF_HALF, pwd->h[4], pws->h[4], pwt->h[= 4]); + pwd->h[5] =3D msa_dpadd_u_df(DF_HALF, pwd->h[5], pws->h[5], pwt->h[= 5]); + pwd->h[6] =3D msa_dpadd_u_df(DF_HALF, pwd->h[6], pws->h[6], pwt->h[= 6]); + pwd->h[7] =3D msa_dpadd_u_df(DF_HALF, pwd->h[7], pws->h[7], pwt->h[= 7]); +} + +void helper_msa_dpadd_u_w(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->w[0] =3D msa_dpadd_u_df(DF_WORD, pwd->w[0], pws->w[0], pwt->w[= 0]); + pwd->w[1] =3D msa_dpadd_u_df(DF_WORD, pwd->w[1], pws->w[1], pwt->w[= 1]); + pwd->w[2] =3D msa_dpadd_u_df(DF_WORD, pwd->w[2], pws->w[2], pwt->w[= 2]); + pwd->w[3] =3D msa_dpadd_u_df(DF_WORD, pwd->w[3], pws->w[3], pwt->w[= 3]); +} + +void helper_msa_dpadd_u_d(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->d[0] =3D msa_dpadd_u_df(DF_DOUBLE, pwd->d[0], pws->d[0], pwt->= d[0]); + pwd->d[1] =3D msa_dpadd_u_df(DF_DOUBLE, pwd->d[1], pws->d[1], pwt->= d[1]); +} + + /* * Int Max Min * ----------- @@ -5009,18 +5063,6 @@ void helper_msa_sld_df(CPUMIPSState *env, uint32_t d= f, uint32_t wd, msa_sld_df(df, pwd, pws, env->active_tc.gpr[rt]); } =20 -static inline int64_t msa_dpadd_u_df(uint32_t df, int64_t dest, int64_t ar= g1, - int64_t arg2) -{ - int64_t even_arg1; - int64_t even_arg2; - int64_t odd_arg1; - int64_t odd_arg2; - UNSIGNED_EXTRACT(even_arg1, odd_arg1, arg1, df); - UNSIGNED_EXTRACT(even_arg2, odd_arg2, arg2, df); - return dest + (even_arg1 * even_arg2) + (odd_arg1 * odd_arg2); -} - static inline int64_t msa_dpsub_s_df(uint32_t df, int64_t dest, int64_t ar= g1, int64_t arg2) { @@ -5171,7 +5213,6 @@ void helper_msa_ ## func ## _df(CPUMIPSState *env, ui= nt32_t df, uint32_t wd, \ } = \ } =20 -MSA_TEROP_DF(dpadd_u) MSA_TEROP_DF(dpsub_s) MSA_TEROP_DF(dpsub_u) MSA_TEROP_DF(binsl) diff --git a/target/mips/translate.c b/target/mips/translate.c index 94c3d15f2d..009ac5c1fb 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -29412,7 +29412,17 @@ static void gen_msa_3r(CPUMIPSState *env, DisasCon= text *ctx) } break; case OPC_DPADD_U_df: - gen_helper_msa_dpadd_u_df(cpu_env, tdf, twd, tws, twt); + switch (df) { + case DF_HALF: + gen_helper_msa_dpadd_u_h(cpu_env, twd, tws, twt); + break; + case DF_WORD: + gen_helper_msa_dpadd_u_w(cpu_env, twd, tws, twt); + break; + case DF_DOUBLE: + gen_helper_msa_dpadd_u_d(cpu_env, twd, tws, twt); + break; + } break; case OPC_DPSUB_S_df: gen_helper_msa_dpsub_s_df(cpu_env, tdf, twd, tws, twt); --=20 2.20.1 From nobody Sun May 19 07:11:49 2024 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1591981630; cv=none; d=zohomail.com; s=zohoarc; b=iCCPqYsu3deJ+v4C76A8sVWSqDGya9TeqLdvF6dTk9oc2BS36JMjrXLlAkWEIboSqyubD4nNGICzIxA0tV5C/4dRMB9vTCoFdRdOdKPTtGXz1NhBUc7H9UowdQrIasj2/O9rQthZM/TP0h7/nZPZf1ivxG0/X5Mp9nij/AvC3b8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591981630; 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=BGafr/lKS1dyaPv6Hozdw0DiY6Yu2WTH+okEAJX8aVA=; b=b4gHqvEE39HoOPX9ea0fFuqfMm6yi6LVoJyTo3ebcnrae2SXC7FqHq/9J7gm6f/R7eq07XIEWmVsohHXGsY4pRHIqACvcN+xyO/iio19O++cFZMZ8h8IKwXG9XVZiwMByu66300smKVh6VxLCtaHlkQHUWzYKnQbHeaLQWUFLU0= 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+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591981630247567.890676566135; Fri, 12 Jun 2020 10:07:10 -0700 (PDT) Received: from localhost ([::1]:41718 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjn92-0004aP-I2 for importer@patchew.org; Fri, 12 Jun 2020 13:07:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55264) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjn24-00024s-3B for qemu-devel@nongnu.org; Fri, 12 Jun 2020 12:59:56 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:37449) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjn22-0002gC-Cg for qemu-devel@nongnu.org; Fri, 12 Jun 2020 12:59:55 -0400 Received: by mail-wm1-x343.google.com with SMTP id y20so8935521wmi.2 for ; Fri, 12 Jun 2020 09:59:47 -0700 (PDT) Received: from localhost.localdomain (net212-32-245-109.mbb.telenor.rs. [109.245.32.212]) by smtp.gmail.com with ESMTPSA id f185sm9923653wmf.43.2020.06.12.09.59.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2020 09:59:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BGafr/lKS1dyaPv6Hozdw0DiY6Yu2WTH+okEAJX8aVA=; b=k4dlgGjf7nrOf9bKMdYWb4Lq1WZ0ViGV6BHsrLmHvOBi1P7qtKwXMmxVF7WLtyfaNT eIngrPGXLqHbsuDGbjEEA4pxuWO1PzLoNInr7xWtpFBIg+TkrdQFJGmRip4bGSWUc9m7 9OCNEJ6jbgg4mOPiIc+3324fvlTa38TQ0kl+BniFWfTIKHtF6x4q9ncnGe8EL00OZeXS 8F0TVRzSBxkxll7QKIoXrxqpGLPuO8UOkuEkrH1p/c7NEsQkDoQFZ06yxUOVbvXCfdnK OtMti/wJPvkCAK2iLKeX+k+Fnlnl3GxOzetgEin7siaWcnwloUTqR18HKZBc96ARX74Y K09w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BGafr/lKS1dyaPv6Hozdw0DiY6Yu2WTH+okEAJX8aVA=; b=URp2+NWi3yOE+b4CfQ3evlM8QrRx4QaaIYSXkLgjDpucda5CVzT43/BvgTzanXg0/Q QbDZvyLDZrOSoIk0WTbQ0/kkmxTBgm9GrjMyvagsGFD70IdU5WlKb6m1G/7JoJNp/t4N vcro7Hf0uTyMSF6hV9eFi8N40pHgwuFPbW93dK5diJpVVEsnisU5y0vET8SW8XDBM724 8U3CYYDyLFr0BpW5AVgg1FR16CrjEKlokRtXk58zpQ60/DG5YIyD4/udEsYumbMEWcmH IqLbWbSqXVzF/qfkVmdKLCufHEzJDtzyBMa/bUU9rwtfTl9kGflcsoMwaluBXQTuUQTH Rlbg== X-Gm-Message-State: AOAM532DGnNJOn/PgdfmpC7c0TF/G0q5V0/LEB+vHbbT+oYcnJdSa3r/ too+4MEkeQSJSfbpDLW8a9WwBYChdxE= X-Google-Smtp-Source: ABdhPJznZ6c+g0IRH1ydDmaak474f8U4hDYrK2jp/5QhrtHRbFH26+Y69pWGtfuynevHx//OIrkdvw== X-Received: by 2002:a7b:cc94:: with SMTP id p20mr14035259wma.148.1591981186693; Fri, 12 Jun 2020 09:59:46 -0700 (PDT) From: Aleksandar Markovic To: qemu-devel@nongnu.org Subject: [PATCH v7 5/8] target/mips: msa: Split helpers for DPSUB_S. Date: Fri, 12 Jun 2020 18:59:04 +0200 Message-Id: <20200612165907.1272-6-aleksandar.qemu.devel@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200612165907.1272-1-aleksandar.qemu.devel@gmail.com> References: <20200612165907.1272-1-aleksandar.qemu.devel@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::343; envelope-from=aleksandar.qemu.devel@gmail.com; helo=mail-wm1-x343.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: aleksandar.rikalo@syrmia.com, Aleksandar Markovic Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" Achieves clearer code and slightly better performance. Signed-off-by: Aleksandar Markovic --- target/mips/helper.h | 4 ++- target/mips/msa_helper.c | 67 ++++++++++++++++++++++++++++++++-------- target/mips/translate.c | 12 ++++++- 3 files changed, 68 insertions(+), 15 deletions(-) diff --git a/target/mips/helper.h b/target/mips/helper.h index 155b6bbe3e..2de14542cd 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -1087,7 +1087,9 @@ DEF_HELPER_4(msa_dpadd_s_d, void, env, i32, i32, i32) DEF_HELPER_4(msa_dpadd_u_h, void, env, i32, i32, i32) DEF_HELPER_4(msa_dpadd_u_w, void, env, i32, i32, i32) DEF_HELPER_4(msa_dpadd_u_d, void, env, i32, i32, i32) -DEF_HELPER_5(msa_dpsub_s_df, void, env, i32, i32, i32, i32) +DEF_HELPER_4(msa_dpsub_s_h, void, env, i32, i32, i32) +DEF_HELPER_4(msa_dpsub_s_w, void, env, i32, i32, i32) +DEF_HELPER_4(msa_dpsub_s_d, void, env, i32, i32, i32) DEF_HELPER_5(msa_dpsub_u_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_sld_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_splat_df, void, env, i32, i32, i32, i32) diff --git a/target/mips/msa_helper.c b/target/mips/msa_helper.c index 9741c94d27..934f705c1e 100644 --- a/target/mips/msa_helper.c +++ b/target/mips/msa_helper.c @@ -2344,6 +2344,60 @@ void helper_msa_dpadd_u_d(CPUMIPSState *env, } =20 =20 +static inline int64_t msa_dpsub_s_df(uint32_t df, int64_t dest, int64_t ar= g1, + int64_t arg2) +{ + int64_t even_arg1; + int64_t even_arg2; + int64_t odd_arg1; + int64_t odd_arg2; + SIGNED_EXTRACT(even_arg1, odd_arg1, arg1, df); + SIGNED_EXTRACT(even_arg2, odd_arg2, arg2, df); + return dest - ((even_arg1 * even_arg2) + (odd_arg1 * odd_arg2)); +} + +void helper_msa_dpsub_s_h(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->h[0] =3D msa_dpsub_s_df(DF_HALF, pwd->h[0], pws->h[0], pwt->h[= 0]); + pwd->h[1] =3D msa_dpsub_s_df(DF_HALF, pwd->h[1], pws->h[1], pwt->h[= 1]); + pwd->h[2] =3D msa_dpsub_s_df(DF_HALF, pwd->h[2], pws->h[2], pwt->h[= 2]); + pwd->h[3] =3D msa_dpsub_s_df(DF_HALF, pwd->h[3], pws->h[3], pwt->h[= 3]); + pwd->h[4] =3D msa_dpsub_s_df(DF_HALF, pwd->h[4], pws->h[4], pwt->h[= 4]); + pwd->h[5] =3D msa_dpsub_s_df(DF_HALF, pwd->h[5], pws->h[5], pwt->h[= 5]); + pwd->h[6] =3D msa_dpsub_s_df(DF_HALF, pwd->h[6], pws->h[6], pwt->h[= 6]); + pwd->h[7] =3D msa_dpsub_s_df(DF_HALF, pwd->h[7], pws->h[7], pwt->h[= 7]); +} + +void helper_msa_dpsub_s_w(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->w[0] =3D msa_dpsub_s_df(DF_WORD, pwd->w[0], pws->w[0], pwt->w[= 0]); + pwd->w[1] =3D msa_dpsub_s_df(DF_WORD, pwd->w[1], pws->w[1], pwt->w[= 1]); + pwd->w[2] =3D msa_dpsub_s_df(DF_WORD, pwd->w[2], pws->w[2], pwt->w[= 2]); + pwd->w[3] =3D msa_dpsub_s_df(DF_WORD, pwd->w[3], pws->w[3], pwt->w[= 3]); +} + +void helper_msa_dpsub_s_d(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->d[0] =3D msa_dpsub_s_df(DF_DOUBLE, pwd->d[0], pws->d[0], pwt->= d[0]); + pwd->d[1] =3D msa_dpsub_s_df(DF_DOUBLE, pwd->d[1], pws->d[1], pwt->= d[1]); +} + + /* * Int Max Min * ----------- @@ -5063,18 +5117,6 @@ void helper_msa_sld_df(CPUMIPSState *env, uint32_t d= f, uint32_t wd, msa_sld_df(df, pwd, pws, env->active_tc.gpr[rt]); } =20 -static inline int64_t msa_dpsub_s_df(uint32_t df, int64_t dest, int64_t ar= g1, - int64_t arg2) -{ - int64_t even_arg1; - int64_t even_arg2; - int64_t odd_arg1; - int64_t odd_arg2; - SIGNED_EXTRACT(even_arg1, odd_arg1, arg1, df); - SIGNED_EXTRACT(even_arg2, odd_arg2, arg2, df); - return dest - ((even_arg1 * even_arg2) + (odd_arg1 * odd_arg2)); -} - static inline int64_t msa_dpsub_u_df(uint32_t df, int64_t dest, int64_t ar= g1, int64_t arg2) { @@ -5213,7 +5255,6 @@ void helper_msa_ ## func ## _df(CPUMIPSState *env, ui= nt32_t df, uint32_t wd, \ } = \ } =20 -MSA_TEROP_DF(dpsub_s) MSA_TEROP_DF(dpsub_u) MSA_TEROP_DF(binsl) MSA_TEROP_DF(binsr) diff --git a/target/mips/translate.c b/target/mips/translate.c index 009ac5c1fb..2576905e5b 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -29425,7 +29425,17 @@ static void gen_msa_3r(CPUMIPSState *env, DisasCon= text *ctx) } break; case OPC_DPSUB_S_df: - gen_helper_msa_dpsub_s_df(cpu_env, tdf, twd, tws, twt); + switch (df) { + case DF_HALF: + gen_helper_msa_dpsub_s_h(cpu_env, twd, tws, twt); + break; + case DF_WORD: + gen_helper_msa_dpsub_s_w(cpu_env, twd, tws, twt); + break; + case DF_DOUBLE: + gen_helper_msa_dpsub_s_d(cpu_env, twd, tws, twt); + break; + } break; case OPC_DPSUB_U_df: gen_helper_msa_dpsub_u_df(cpu_env, tdf, twd, tws, twt); --=20 2.20.1 From nobody Sun May 19 07:11:49 2024 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1591981690; cv=none; d=zohomail.com; s=zohoarc; b=On0K+UZ8jEPVgG4mJZsrHOIwS2f8dYGOE3fGXT7wDG6AdeuuSlyIuh/d4sV+A6C8VzDx1GGzu0WBJelQZSBtzzWshBQ9y34pQoSkmXoy7Jf2UhFMwQyjHr5MsUWPypZpGIX2jRsDpdW9DvFxcxtquMDEJZbygy6aMEf9ZL2vdB8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591981690; 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=w300LlCtFwSijdS00tFHCv/tm4JEQ5Js/KiT5pQAUWg=; b=IaMeh80swmS2sinONhO+IBMBo6b/3H+NviQjyyl6BSvhYv8/VX7ZT0Gfmer1QGnjchgpeMnxoHp+Fie9ZhRFyq5WS04Pt28ickLXnAJi5tvjzA6NgvKTMA87jjM1AKWjRO7xXY57GEnch9DWvZ3clj4DTCnNqSy2bSowzqhlIk8= 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+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591981690623119.0908758213734; Fri, 12 Jun 2020 10:08:10 -0700 (PDT) Received: from localhost ([::1]:43888 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjnA1-0005W4-8B for importer@patchew.org; Fri, 12 Jun 2020 13:08:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55290) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjn26-0002As-Bx for qemu-devel@nongnu.org; Fri, 12 Jun 2020 12:59:58 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:40015) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjn24-0002gK-Kj for qemu-devel@nongnu.org; Fri, 12 Jun 2020 12:59:58 -0400 Received: by mail-wr1-x441.google.com with SMTP id h5so10456745wrc.7 for ; Fri, 12 Jun 2020 09:59:50 -0700 (PDT) Received: from localhost.localdomain (net212-32-245-109.mbb.telenor.rs. [109.245.32.212]) by smtp.gmail.com with ESMTPSA id f185sm9923653wmf.43.2020.06.12.09.59.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2020 09:59:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=w300LlCtFwSijdS00tFHCv/tm4JEQ5Js/KiT5pQAUWg=; b=lM7GjjAlMLLp5PgqtcQQ7M+2Gps30wBtGYhH8EeeuWjMcowpjN5Kr1t88ck5ndH1gP oyGnbNokrzIuEishiarIJgrsLqwJvJIa/daQYL5m/2RTBiOosgEm3beRdjD/VS59d3ht qdZfdnXqPI97nTkPeoBdMdDapOtPyL46Plijr/6Bkhu43SgnuYtU8tXrqruyTUd9jVuo p8lzgeCTYdkcNrWUKCuoA9Ils51Kj44IiMrm3qHBu1wPQ3NdmCkuKcD89E59PtYG19CI j8s/Z0kmhnXtq94RSJGTl/lgjVWvMWA+nSG29S1zlyWgw1CO+pxSQK/Cla50Kge/t4lL jeHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=w300LlCtFwSijdS00tFHCv/tm4JEQ5Js/KiT5pQAUWg=; b=ArmaW2rc6gm7+rV33d1m7R+g/9Zeum02ABx6OmjLdAMFn+ROCrBuo5RTSn7VtikBul 2BclQ5c3L53zCUQrzM5Foh3RvbOlpWPyUdWJFJxA0R+NDwQrTSYUSrgu5eaBDOMVyFYs zOB16bAeJ1/xojEIYPICUnPtzjXfWQh3Yjmr700NH/6b7073PcjUpLgj0jxgTdow3L6W 3y9JfKR+W1PiPRXCelp1Jus5UuL9hB9Cm25P5roKCUP1SGLyTtavAbiWJZ/D/1PMZ0dr CweFT8zalU7a+SyboeCI6aEdxYzXU4NcA3s5btP3Wz+7ImgMi0LkJ3K6y8CSH/qWSOO1 SdXQ== X-Gm-Message-State: AOAM530zA4Ujf9XK+I5Pi8V1Mk30xbOBILHPLuMZA8alQ8LRlw/4ulag 7gX/0eThg3D6dGJfdZMTe+OgfFDYa+I= X-Google-Smtp-Source: ABdhPJy0O56mDYOwSZsXPXLpjEjuxLSYYX2nxPBnRgEwdkfLSDf4WdrZUJaMiTAqyn/LjTbqarPjaw== X-Received: by 2002:adf:d0d0:: with SMTP id z16mr16346761wrh.308.1591981189126; Fri, 12 Jun 2020 09:59:49 -0700 (PDT) From: Aleksandar Markovic To: qemu-devel@nongnu.org Subject: [PATCH v7 6/8] target/mips: msa: Split helpers for DPSUB_U. Date: Fri, 12 Jun 2020 18:59:05 +0200 Message-Id: <20200612165907.1272-7-aleksandar.qemu.devel@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200612165907.1272-1-aleksandar.qemu.devel@gmail.com> References: <20200612165907.1272-1-aleksandar.qemu.devel@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::441; envelope-from=aleksandar.qemu.devel@gmail.com; helo=mail-wr1-x441.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: aleksandar.rikalo@syrmia.com, Aleksandar Markovic Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" Achieves clearer code and slightly better performance. Signed-off-by: Aleksandar Markovic --- target/mips/helper.h | 4 ++- target/mips/msa_helper.c | 67 ++++++++++++++++++++++++++++++++-------- target/mips/translate.c | 12 ++++++- 3 files changed, 68 insertions(+), 15 deletions(-) diff --git a/target/mips/helper.h b/target/mips/helper.h index 2de14542cd..575f4a524c 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -1090,7 +1090,9 @@ DEF_HELPER_4(msa_dpadd_u_d, void, env, i32, i32, i32) DEF_HELPER_4(msa_dpsub_s_h, void, env, i32, i32, i32) DEF_HELPER_4(msa_dpsub_s_w, void, env, i32, i32, i32) DEF_HELPER_4(msa_dpsub_s_d, void, env, i32, i32, i32) -DEF_HELPER_5(msa_dpsub_u_df, void, env, i32, i32, i32, i32) +DEF_HELPER_4(msa_dpsub_u_h, void, env, i32, i32, i32) +DEF_HELPER_4(msa_dpsub_u_w, void, env, i32, i32, i32) +DEF_HELPER_4(msa_dpsub_u_d, void, env, i32, i32, i32) DEF_HELPER_5(msa_sld_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_splat_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_vshf_df, void, env, i32, i32, i32, i32) diff --git a/target/mips/msa_helper.c b/target/mips/msa_helper.c index 934f705c1e..33d5251a6b 100644 --- a/target/mips/msa_helper.c +++ b/target/mips/msa_helper.c @@ -2398,6 +2398,60 @@ void helper_msa_dpsub_s_d(CPUMIPSState *env, } =20 =20 +static inline int64_t msa_dpsub_u_df(uint32_t df, int64_t dest, int64_t ar= g1, + int64_t arg2) +{ + int64_t even_arg1; + int64_t even_arg2; + int64_t odd_arg1; + int64_t odd_arg2; + UNSIGNED_EXTRACT(even_arg1, odd_arg1, arg1, df); + UNSIGNED_EXTRACT(even_arg2, odd_arg2, arg2, df); + return dest - ((even_arg1 * even_arg2) + (odd_arg1 * odd_arg2)); +} + +void helper_msa_dpsub_u_h(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->h[0] =3D msa_dpsub_u_df(DF_HALF, pwd->h[0], pws->h[0], pwt->h[= 0]); + pwd->h[1] =3D msa_dpsub_u_df(DF_HALF, pwd->h[1], pws->h[1], pwt->h[= 1]); + pwd->h[2] =3D msa_dpsub_u_df(DF_HALF, pwd->h[2], pws->h[2], pwt->h[= 2]); + pwd->h[3] =3D msa_dpsub_u_df(DF_HALF, pwd->h[3], pws->h[3], pwt->h[= 3]); + pwd->h[4] =3D msa_dpsub_u_df(DF_HALF, pwd->h[4], pws->h[4], pwt->h[= 4]); + pwd->h[5] =3D msa_dpsub_u_df(DF_HALF, pwd->h[5], pws->h[5], pwt->h[= 5]); + pwd->h[6] =3D msa_dpsub_u_df(DF_HALF, pwd->h[6], pws->h[6], pwt->h[= 6]); + pwd->h[7] =3D msa_dpsub_u_df(DF_HALF, pwd->h[7], pws->h[7], pwt->h[= 7]); +} + +void helper_msa_dpsub_u_w(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->w[0] =3D msa_dpsub_u_df(DF_WORD, pwd->w[0], pws->w[0], pwt->w[= 0]); + pwd->w[1] =3D msa_dpsub_u_df(DF_WORD, pwd->w[1], pws->w[1], pwt->w[= 1]); + pwd->w[2] =3D msa_dpsub_u_df(DF_WORD, pwd->w[2], pws->w[2], pwt->w[= 2]); + pwd->w[3] =3D msa_dpsub_u_df(DF_WORD, pwd->w[3], pws->w[3], pwt->w[= 3]); +} + +void helper_msa_dpsub_u_d(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->d[0] =3D msa_dpsub_u_df(DF_DOUBLE, pwd->d[0], pws->d[0], pwt->= d[0]); + pwd->d[1] =3D msa_dpsub_u_df(DF_DOUBLE, pwd->d[1], pws->d[1], pwt->= d[1]); +} + + /* * Int Max Min * ----------- @@ -5117,18 +5171,6 @@ void helper_msa_sld_df(CPUMIPSState *env, uint32_t d= f, uint32_t wd, msa_sld_df(df, pwd, pws, env->active_tc.gpr[rt]); } =20 -static inline int64_t msa_dpsub_u_df(uint32_t df, int64_t dest, int64_t ar= g1, - int64_t arg2) -{ - int64_t even_arg1; - int64_t even_arg2; - int64_t odd_arg1; - int64_t odd_arg2; - UNSIGNED_EXTRACT(even_arg1, odd_arg1, arg1, df); - UNSIGNED_EXTRACT(even_arg2, odd_arg2, arg2, df); - return dest - ((even_arg1 * even_arg2) + (odd_arg1 * odd_arg2)); -} - static inline int64_t msa_madd_q_df(uint32_t df, int64_t dest, int64_t arg= 1, int64_t arg2) { @@ -5255,7 +5297,6 @@ void helper_msa_ ## func ## _df(CPUMIPSState *env, ui= nt32_t df, uint32_t wd, \ } = \ } =20 -MSA_TEROP_DF(dpsub_u) MSA_TEROP_DF(binsl) MSA_TEROP_DF(binsr) MSA_TEROP_DF(madd_q) diff --git a/target/mips/translate.c b/target/mips/translate.c index 2576905e5b..3dda242643 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -29438,7 +29438,17 @@ static void gen_msa_3r(CPUMIPSState *env, DisasCon= text *ctx) } break; case OPC_DPSUB_U_df: - gen_helper_msa_dpsub_u_df(cpu_env, tdf, twd, tws, twt); + switch (df) { + case DF_HALF: + gen_helper_msa_dpsub_u_h(cpu_env, twd, tws, twt); + break; + case DF_WORD: + gen_helper_msa_dpsub_u_w(cpu_env, twd, tws, twt); + break; + case DF_DOUBLE: + gen_helper_msa_dpsub_u_d(cpu_env, twd, tws, twt); + break; + } break; } break; --=20 2.20.1 From nobody Sun May 19 07:11:49 2024 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1591981373; cv=none; d=zohomail.com; s=zohoarc; b=SS3WBYqBaqG63JA06J5OQwRiPgGI9XBhC2tbJIKNUUnm24iJdb0vFF58877DZ5UKQHdQssEp1t+u9egIF4sZv1+f60pOTrzWilgSCTH7Lefb2D+laXsHqKHeFemsuI5jky34M41wiHzTqIepNLvS0gisKrwYPqomtP1YAz701pg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591981373; 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=QwP8Kk0dHA2cGIlbQWbWtur7MCwUGP6d3O58JClugcU=; b=Ikn3A1VwEYkQQ1SzkY9I8FU5VPi+/sxkuKIODDsfYsGoHJBlI9yRMvUeAgMb/r1ptg+zWKbADOfeSESBQiHyU5ktIFtW/e0QJU2s+s/E+VrVUObq4rGyj1vyubzXa1vkfrpOA4WpBRx6yOrQh16RD+PEVaqKNiWD9njE2rbVtgQ= 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+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591981373300314.59314358256313; Fri, 12 Jun 2020 10:02:53 -0700 (PDT) Received: from localhost ([::1]:57670 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjn4u-00076o-0G for importer@patchew.org; Fri, 12 Jun 2020 13:02:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55312) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjn28-0002Iy-HP for qemu-devel@nongnu.org; Fri, 12 Jun 2020 13:00:00 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:46759) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjn26-0002gV-K7 for qemu-devel@nongnu.org; Fri, 12 Jun 2020 13:00:00 -0400 Received: by mail-wr1-x444.google.com with SMTP id x6so10396692wrm.13 for ; Fri, 12 Jun 2020 09:59:52 -0700 (PDT) Received: from localhost.localdomain (net212-32-245-109.mbb.telenor.rs. [109.245.32.212]) by smtp.gmail.com with ESMTPSA id f185sm9923653wmf.43.2020.06.12.09.59.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2020 09:59:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QwP8Kk0dHA2cGIlbQWbWtur7MCwUGP6d3O58JClugcU=; b=nxxj60nynpxlcg5h3uvv6QPIwBQ/eYY1CN2Nd1bsmHBN+SsxNMxonoPwVwMZTv0gYO z55rC+d9gtDsOe6qOLZJdWDKuCG2b8PI/apw3GnRfHsYLhRL4a8z6S9RCzX8wT2JCn9A zDKJqiTY7Y6JmIt3mto/79aVGX9YLMfSxbvXmw95MWD34ZreWOR+VOcISfemMf+kxSbM Fhe4b4RrBZji2UzAhJoxxI8HTK8vad6gt8/FrpeaYNGLO1Pw7HgFm9datoMY5/TP7toH EySK9wVhTrEOxKg5O44U0bgDaJNx+vMGG7lQ2zSnOCidsoKqDlJfguT280Yo1A6pjGmF EROQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QwP8Kk0dHA2cGIlbQWbWtur7MCwUGP6d3O58JClugcU=; b=JNy0oO8cHkNaF/Hhp7LWNSN87DFWUy+sbPjx45bJh1Z80Wy5mwEooNK9FOvk7v+XT/ 7QYXJFsnyLUwbqZWylgxTwisjrPeGt9I7qgPeT6d52mWTbBbgPasfN5H9jvXc3d4fdtD w42RWseoV7fuKEC+T0CsRJ1JVsIq7idzbOkE4rXayrYm1QhmD88TqEWK0uo9Iv8MdHLx GRGAnbGi4IeqqMwNpkqjF/ux6loUJpFqjCi8ENtrVnDQdfnvfPEBjMinGqo6A9tvpZg3 2cvQ1Cy2yx9WRAdyoHrNo9upyGQSfyppMLM6QyfJtDeDnOl7OhWkjQJBJAvvhWChX4wv ypDA== X-Gm-Message-State: AOAM532kXyydeFgJI+qWUr6oRrK02MIvVHkIDME3RlLHhNSd40atqleg iFr+ZJLr9IdSk9grktysr9kiDraxzsU= X-Google-Smtp-Source: ABdhPJwnBbyD9PPrtnPxaoEqr9NRn4mk9L1E0yEYsjV3GmAqRQ5EJKK04ezondm20t6qmgx54DH8Lg== X-Received: by 2002:adf:ab09:: with SMTP id q9mr15518598wrc.79.1591981191428; Fri, 12 Jun 2020 09:59:51 -0700 (PDT) From: Aleksandar Markovic To: qemu-devel@nongnu.org Subject: [PATCH v7 7/8] target/mips: msa: Split helpers for DOTP_S. Date: Fri, 12 Jun 2020 18:59:06 +0200 Message-Id: <20200612165907.1272-8-aleksandar.qemu.devel@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200612165907.1272-1-aleksandar.qemu.devel@gmail.com> References: <20200612165907.1272-1-aleksandar.qemu.devel@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::444; envelope-from=aleksandar.qemu.devel@gmail.com; helo=mail-wr1-x444.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: aleksandar.rikalo@syrmia.com, Aleksandar Markovic Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" Achieves clearer code and slightly better performance. Signed-off-by: Aleksandar Markovic --- target/mips/helper.h | 5 ++- target/mips/msa_helper.c | 66 ++++++++++++++++++++++++++++++++-------- target/mips/translate.c | 12 +++++++- 3 files changed, 69 insertions(+), 14 deletions(-) diff --git a/target/mips/helper.h b/target/mips/helper.h index 575f4a524c..06df3de744 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -1079,7 +1079,10 @@ DEF_HELPER_5(msa_subs_u_df, void, env, i32, i32, i32= , i32) DEF_HELPER_5(msa_subsus_u_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_subsuu_s_df, void, env, i32, i32, i32, i32) DEF_HELPER_5(msa_mulv_df, void, env, i32, i32, i32, i32) -DEF_HELPER_5(msa_dotp_s_df, void, env, i32, i32, i32, i32) + +DEF_HELPER_4(msa_dotp_s_h, void, env, i32, i32, i32) +DEF_HELPER_4(msa_dotp_s_w, void, env, i32, i32, i32) +DEF_HELPER_4(msa_dotp_s_d, void, env, i32, i32, i32) DEF_HELPER_5(msa_dotp_u_df, void, env, i32, i32, i32, i32) DEF_HELPER_4(msa_dpadd_s_h, void, env, i32, i32, i32) DEF_HELPER_4(msa_dpadd_s_w, void, env, i32, i32, i32) diff --git a/target/mips/msa_helper.c b/target/mips/msa_helper.c index 33d5251a6b..201283fdd9 100644 --- a/target/mips/msa_helper.c +++ b/target/mips/msa_helper.c @@ -2236,6 +2236,60 @@ void helper_msa_div_u_d(CPUMIPSState *env, o =3D UNSIGNED_ODD(a, df); \ } while (0) =20 + +static inline int64_t msa_dotp_s_df(uint32_t df, int64_t arg1, int64_t arg= 2) +{ + int64_t even_arg1; + int64_t even_arg2; + int64_t odd_arg1; + int64_t odd_arg2; + SIGNED_EXTRACT(even_arg1, odd_arg1, arg1, df); + SIGNED_EXTRACT(even_arg2, odd_arg2, arg2, df); + return (even_arg1 * even_arg2) + (odd_arg1 * odd_arg2); +} + +void helper_msa_dotp_s_h(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->h[0] =3D msa_dotp_s_df(DF_HALF, pws->h[0], pwt->h[0]); + pwd->h[1] =3D msa_dotp_s_df(DF_HALF, pws->h[1], pwt->h[1]); + pwd->h[2] =3D msa_dotp_s_df(DF_HALF, pws->h[2], pwt->h[2]); + pwd->h[3] =3D msa_dotp_s_df(DF_HALF, pws->h[3], pwt->h[3]); + pwd->h[4] =3D msa_dotp_s_df(DF_HALF, pws->h[4], pwt->h[4]); + pwd->h[5] =3D msa_dotp_s_df(DF_HALF, pws->h[5], pwt->h[5]); + pwd->h[6] =3D msa_dotp_s_df(DF_HALF, pws->h[6], pwt->h[6]); + pwd->h[7] =3D msa_dotp_s_df(DF_HALF, pws->h[7], pwt->h[7]); +} + +void helper_msa_dotp_s_w(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->w[0] =3D msa_dotp_s_df(DF_WORD, pws->w[0], pwt->w[0]); + pwd->w[1] =3D msa_dotp_s_df(DF_WORD, pws->w[1], pwt->w[1]); + pwd->w[2] =3D msa_dotp_s_df(DF_WORD, pws->w[2], pwt->w[2]); + pwd->w[3] =3D msa_dotp_s_df(DF_WORD, pws->w[3], pwt->w[3]); +} + +void helper_msa_dotp_s_d(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->d[0] =3D msa_dotp_s_df(DF_DOUBLE, pws->d[0], pwt->d[0]); + pwd->d[1] =3D msa_dotp_s_df(DF_DOUBLE, pws->d[1], pwt->d[1]); +} + + static inline int64_t msa_dpadd_s_df(uint32_t df, int64_t dest, int64_t ar= g1, int64_t arg2) { @@ -5010,17 +5064,6 @@ static inline int64_t msa_mulv_df(uint32_t df, int64= _t arg1, int64_t arg2) return arg1 * arg2; } =20 -static inline int64_t msa_dotp_s_df(uint32_t df, int64_t arg1, int64_t arg= 2) -{ - int64_t even_arg1; - int64_t even_arg2; - int64_t odd_arg1; - int64_t odd_arg2; - SIGNED_EXTRACT(even_arg1, odd_arg1, arg1, df); - SIGNED_EXTRACT(even_arg2, odd_arg2, arg2, df); - return (even_arg1 * even_arg2) + (odd_arg1 * odd_arg2); -} - static inline int64_t msa_dotp_u_df(uint32_t df, int64_t arg1, int64_t arg= 2) { int64_t even_arg1; @@ -5155,7 +5198,6 @@ MSA_BINOP_DF(subs_u) MSA_BINOP_DF(subsus_u) MSA_BINOP_DF(subsuu_s) MSA_BINOP_DF(mulv) -MSA_BINOP_DF(dotp_s) MSA_BINOP_DF(dotp_u) =20 MSA_BINOP_DF(mul_q) diff --git a/target/mips/translate.c b/target/mips/translate.c index 3dda242643..f0bab46378 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -29393,7 +29393,17 @@ static void gen_msa_3r(CPUMIPSState *env, DisasCon= text *ctx) } break; case OPC_DOTP_S_df: - gen_helper_msa_dotp_s_df(cpu_env, tdf, twd, tws, twt); + switch (df) { + case DF_HALF: + gen_helper_msa_dotp_s_h(cpu_env, twd, tws, twt); + break; + case DF_WORD: + gen_helper_msa_dotp_s_w(cpu_env, twd, tws, twt); + break; + case DF_DOUBLE: + gen_helper_msa_dotp_s_d(cpu_env, twd, tws, twt); + break; + } break; case OPC_DOTP_U_df: gen_helper_msa_dotp_u_df(cpu_env, tdf, twd, tws, twt); --=20 2.20.1 From nobody Sun May 19 07:11:49 2024 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1591981399; cv=none; d=zohomail.com; s=zohoarc; b=X+k9BLqsITFT67G4dYTw1aKyiPgNJWBcKWPEPUvk6q8KwVrmWDRGSHxgtPgGfG1Ee1ru+GXuYnJ/DAfsKkgBQFPM/7BDe0mKYi1DxF9Ye3+A+GrPd13GJI27yht6i6E/O+URlxpWqZy1I7MEYnro7hsGvQM/pS3HoEtGhAPWKi0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1591981399; 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=Kt8b8LurUGGd2vw4sKhwFyJB+XWGk3iJ2cYFa6ucIZ8=; b=Q/dA5CRUVploBGGQBZfbRdErAGBbNI0dQA3tR4OogbWcinczrbhRcWwQbkx3czjCS5J3XzTb1Xbhg48qc/xTt4/hCDqo+ejTUPZe3Hr/0nabRrxAhc0Z0Pdfjz/Zz2xJs7oD64rbYfDu6KwsKfIDPWoKKJoCXHscIsJb3ccSlFY= 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+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1591981399742842.78982858011; Fri, 12 Jun 2020 10:03:19 -0700 (PDT) Received: from localhost ([::1]:59158 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjn5K-0007iq-Co for importer@patchew.org; Fri, 12 Jun 2020 13:03:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55336) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjn2B-0002OB-6n for qemu-devel@nongnu.org; Fri, 12 Jun 2020 13:00:03 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:39462) by eggs.gnu.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jjn29-0002gl-3y for qemu-devel@nongnu.org; Fri, 12 Jun 2020 13:00:02 -0400 Received: by mail-wr1-x432.google.com with SMTP id t18so10449291wru.6 for ; Fri, 12 Jun 2020 09:59:54 -0700 (PDT) Received: from localhost.localdomain (net212-32-245-109.mbb.telenor.rs. [109.245.32.212]) by smtp.gmail.com with ESMTPSA id f185sm9923653wmf.43.2020.06.12.09.59.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2020 09:59:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Kt8b8LurUGGd2vw4sKhwFyJB+XWGk3iJ2cYFa6ucIZ8=; b=FsDRTfW7YMmofisffN1bWpzcUKwkni77tewnHl2aiDZIupPfHrSZZn0U6obY6smd5o x2z3l4bznMsTNw6WDOCsX6i5vNfuJpSnOL9zGYC8Vufr9pDU8o2K09u9bcwx4HsGs3nY t1oUVZU2yp3pi1yf4bY+FRphu6us+Y79ERS6T/JYe7aarzWSDxOEH4WJU4hUesccLDHp xIt5exri98Dr06CPyXbXIzbfKnpuDUxa1kA078wvWd7S5kwQgpcg3f1D+tWzUPs8mC2S 6TxCmuv/5jM480S4J+q2Cd2WEhOCAJlaZZyzuaaSzAVrnw9hoXbbvPAJ/OJxqTXOjLhK G0+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Kt8b8LurUGGd2vw4sKhwFyJB+XWGk3iJ2cYFa6ucIZ8=; b=HI42S4BVv4xB3NoVQcFbtDMfOmZaG2Chyi7DFXOkL7xZ5RG9rLDr5VEgDKPGrpQtVJ aIif8sj+P18mETuhFz6jo1mAW/KeGW7/0Gs7EvhwPtXYSjg7Hr41ZjMCzrI62mlsexn5 FzvE0l6I3ayEmGdmdYt1gX7m21DVFix2RXEXlXlJEli/HKHaXJelhTeabz5sPpSYOMT5 mPh2NMcvvkvU9f52xRF6l0hkCl+nodtuqSCSCxBFFVCoNJIoLS0lznzIjZ12L18tHdTp D8ayhe08UKQJWE5q0xTCX6Tcvwgcaapplt8jbBu2Vy0nhrvtqKi9Oq6SEwLT+SQeuqcs k1Gw== X-Gm-Message-State: AOAM531oRL6RS93kMt3MJ8rq0YwXYHa+EUhRIofcbLc4vn2TkDYjPBoz 98aVvoxJEQjOj0REsF31S0WYhpvhIe4= X-Google-Smtp-Source: ABdhPJxlz5uP5x310WYiBwp6RR4ES8ZTKUSTqwV6bUJu9RzmKYzHgUzSsiQH2RMdYp9/0J6HGbeUGQ== X-Received: by 2002:a5d:4bc5:: with SMTP id l5mr16187707wrt.104.1591981193623; Fri, 12 Jun 2020 09:59:53 -0700 (PDT) From: Aleksandar Markovic To: qemu-devel@nongnu.org Subject: [PATCH v7 8/8] target/mips: msa: Split helpers for DOTP_U. Date: Fri, 12 Jun 2020 18:59:07 +0200 Message-Id: <20200612165907.1272-9-aleksandar.qemu.devel@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200612165907.1272-1-aleksandar.qemu.devel@gmail.com> References: <20200612165907.1272-1-aleksandar.qemu.devel@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=aleksandar.qemu.devel@gmail.com; helo=mail-wr1-x432.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: aleksandar.rikalo@syrmia.com, Aleksandar Markovic Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" Achieves clearer code and slightly better performance. Signed-off-by: Aleksandar Markovic --- target/mips/helper.h | 4 ++- target/mips/msa_helper.c | 65 ++++++++++++++++++++++++++++++++-------- target/mips/translate.c | 12 +++++++- 3 files changed, 67 insertions(+), 14 deletions(-) diff --git a/target/mips/helper.h b/target/mips/helper.h index 06df3de744..05d5533dfb 100644 --- a/target/mips/helper.h +++ b/target/mips/helper.h @@ -1083,7 +1083,9 @@ DEF_HELPER_5(msa_mulv_df, void, env, i32, i32, i32, i= 32) DEF_HELPER_4(msa_dotp_s_h, void, env, i32, i32, i32) DEF_HELPER_4(msa_dotp_s_w, void, env, i32, i32, i32) DEF_HELPER_4(msa_dotp_s_d, void, env, i32, i32, i32) -DEF_HELPER_5(msa_dotp_u_df, void, env, i32, i32, i32, i32) +DEF_HELPER_4(msa_dotp_u_h, void, env, i32, i32, i32) +DEF_HELPER_4(msa_dotp_u_w, void, env, i32, i32, i32) +DEF_HELPER_4(msa_dotp_u_d, void, env, i32, i32, i32) DEF_HELPER_4(msa_dpadd_s_h, void, env, i32, i32, i32) DEF_HELPER_4(msa_dpadd_s_w, void, env, i32, i32, i32) DEF_HELPER_4(msa_dpadd_s_d, void, env, i32, i32, i32) diff --git a/target/mips/msa_helper.c b/target/mips/msa_helper.c index 201283fdd9..84d0073918 100644 --- a/target/mips/msa_helper.c +++ b/target/mips/msa_helper.c @@ -2290,6 +2290,59 @@ void helper_msa_dotp_s_d(CPUMIPSState *env, } =20 =20 +static inline int64_t msa_dotp_u_df(uint32_t df, int64_t arg1, int64_t arg= 2) +{ + int64_t even_arg1; + int64_t even_arg2; + int64_t odd_arg1; + int64_t odd_arg2; + UNSIGNED_EXTRACT(even_arg1, odd_arg1, arg1, df); + UNSIGNED_EXTRACT(even_arg2, odd_arg2, arg2, df); + return (even_arg1 * even_arg2) + (odd_arg1 * odd_arg2); +} + +void helper_msa_dotp_u_h(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->h[0] =3D msa_dotp_u_df(DF_HALF, pws->h[0], pwt->h[0]); + pwd->h[1] =3D msa_dotp_u_df(DF_HALF, pws->h[1], pwt->h[1]); + pwd->h[2] =3D msa_dotp_u_df(DF_HALF, pws->h[2], pwt->h[2]); + pwd->h[3] =3D msa_dotp_u_df(DF_HALF, pws->h[3], pwt->h[3]); + pwd->h[4] =3D msa_dotp_u_df(DF_HALF, pws->h[4], pwt->h[4]); + pwd->h[5] =3D msa_dotp_u_df(DF_HALF, pws->h[5], pwt->h[5]); + pwd->h[6] =3D msa_dotp_u_df(DF_HALF, pws->h[6], pwt->h[6]); + pwd->h[7] =3D msa_dotp_u_df(DF_HALF, pws->h[7], pwt->h[7]); +} + +void helper_msa_dotp_u_w(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->w[0] =3D msa_dotp_u_df(DF_WORD, pws->w[0], pwt->w[0]); + pwd->w[1] =3D msa_dotp_u_df(DF_WORD, pws->w[1], pwt->w[1]); + pwd->w[2] =3D msa_dotp_u_df(DF_WORD, pws->w[2], pwt->w[2]); + pwd->w[3] =3D msa_dotp_u_df(DF_WORD, pws->w[3], pwt->w[3]); +} + +void helper_msa_dotp_u_d(CPUMIPSState *env, + uint32_t wd, uint32_t ws, uint32_t wt) +{ + wr_t *pwd =3D &(env->active_fpu.fpr[wd].wr); + wr_t *pws =3D &(env->active_fpu.fpr[ws].wr); + wr_t *pwt =3D &(env->active_fpu.fpr[wt].wr); + + pwd->d[0] =3D msa_dotp_u_df(DF_DOUBLE, pws->d[0], pwt->d[0]); + pwd->d[1] =3D msa_dotp_u_df(DF_DOUBLE, pws->d[1], pwt->d[1]); +} + + static inline int64_t msa_dpadd_s_df(uint32_t df, int64_t dest, int64_t ar= g1, int64_t arg2) { @@ -5064,17 +5117,6 @@ static inline int64_t msa_mulv_df(uint32_t df, int64= _t arg1, int64_t arg2) return arg1 * arg2; } =20 -static inline int64_t msa_dotp_u_df(uint32_t df, int64_t arg1, int64_t arg= 2) -{ - int64_t even_arg1; - int64_t even_arg2; - int64_t odd_arg1; - int64_t odd_arg2; - UNSIGNED_EXTRACT(even_arg1, odd_arg1, arg1, df); - UNSIGNED_EXTRACT(even_arg2, odd_arg2, arg2, df); - return (even_arg1 * even_arg2) + (odd_arg1 * odd_arg2); -} - #define CONCATENATE_AND_SLIDE(s, k) \ do { \ for (i =3D 0; i < s; i++) { \ @@ -5198,7 +5240,6 @@ MSA_BINOP_DF(subs_u) MSA_BINOP_DF(subsus_u) MSA_BINOP_DF(subsuu_s) MSA_BINOP_DF(mulv) -MSA_BINOP_DF(dotp_u) =20 MSA_BINOP_DF(mul_q) MSA_BINOP_DF(mulr_q) diff --git a/target/mips/translate.c b/target/mips/translate.c index f0bab46378..b56bdf54af 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -29406,7 +29406,17 @@ static void gen_msa_3r(CPUMIPSState *env, DisasCon= text *ctx) } break; case OPC_DOTP_U_df: - gen_helper_msa_dotp_u_df(cpu_env, tdf, twd, tws, twt); + switch (df) { + case DF_HALF: + gen_helper_msa_dotp_u_h(cpu_env, twd, tws, twt); + break; + case DF_WORD: + gen_helper_msa_dotp_u_w(cpu_env, twd, tws, twt); + break; + case DF_DOUBLE: + gen_helper_msa_dotp_u_d(cpu_env, twd, tws, twt); + break; + } break; case OPC_DPADD_S_df: switch (df) { --=20 2.20.1