From nobody Tue Feb 10 00:24:09 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1552814188581519.3011762449414; Sun, 17 Mar 2019 02:16:28 -0700 (PDT) Received: from localhost ([127.0.0.1]:52185 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5Ru2-0003Si-CS for importer@patchew.org; Sun, 17 Mar 2019 05:16:22 -0400 Received: from eggs.gnu.org ([209.51.188.92]:47716) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h5Rmk-0005fy-M2 for qemu-devel@nongnu.org; Sun, 17 Mar 2019 05:08:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h5Rmj-0004Au-Gl for qemu-devel@nongnu.org; Sun, 17 Mar 2019 05:08:50 -0400 Received: from mail-pg1-x541.google.com ([2607:f8b0:4864:20::541]:40643) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h5Rmj-0004Ab-6b for qemu-devel@nongnu.org; Sun, 17 Mar 2019 05:08:49 -0400 Received: by mail-pg1-x541.google.com with SMTP id u9so9319770pgo.7 for ; Sun, 17 Mar 2019 02:08:49 -0700 (PDT) Received: from cloudburst.twiddle.net (97-113-188-82.tukw.qwest.net. [97.113.188.82]) by smtp.gmail.com with ESMTPSA id b85sm19378435pfj.56.2019.03.17.02.08.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 17 Mar 2019 02:08:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=9zMlnJaHcUe6qi5C/L7hjCRWpfIzUjgoN4LyEuyE5B4=; b=h6hJONKhpR+7bEu00044SbNNXny5YCYfc2mUcwulbtRhbWoFU7s2WXtJw2L+Dgz/u/ EA5hsGe4jvDHNyvOhGxmtFOt2C76fgmPLGNAiL5cJvx4qEAje3FHqd/Gl/DlCiNYEYiw V/LIPos3WxMEJU05kAuWCVgCl9ZuGSieZ4Ts5u1XMK08RschsGAT2r7CNOc7lWw+xHde doKLFOlXUe4lJEVaVjCQNGQN2OwkDTuQrJxTzJJ/VmCGAi5uQC2AE1JKhL/1AvCpT3q5 AzfnUcxrFpU5/aFVKBqIlmK/YyPv5mzZxKdsXu1lWYPyQ76ro1RuQBVFIPeCg+C64u2i PHGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=9zMlnJaHcUe6qi5C/L7hjCRWpfIzUjgoN4LyEuyE5B4=; b=YNNHLl8dVAgpbemfYHBVXyHeKDMYYanyxtgWuR+zC2bY1cFy0PT85NQf3PTKuCwVa1 cr2G3bubBcG9FK/i99355TooNsWUJ4IHxLKaGqziNefiHIX3DiFPC6ymewZoSGFRk5Wq /GtY/Anv5QdlxIOsscffwg5nHhZ4aibSm7SjA+2IQ3zO/lowk+agBkIXGqopv08HMs4a jHfobD80HeFYQ3DjxaRw6jpSKJpDAfysrJfJvuwWqgvIZoFJyafBqUgvpKapclDmajdt XzWEtwzJyEXnUxD2YZJbh4H4yk33defHzoox7B28HWLbYPqKdehJ0Dd0lstejtfpxs4x lT5w== X-Gm-Message-State: APjAAAUuY/65IyOsgiT+IroT6ZOzGvW/KTi4c6oTCXOQa4jHcglrj3J8 e9zNlT7uq1j5SurbTvDNjXV6cX6OaAU= X-Google-Smtp-Source: APXvYqzIdEdsHtKOoDlsNztBf4lTT83hGZA1JFtQGLUAUW3qCy+adBTCZUkJQTr4jgtTYAcx9OGNDQ== X-Received: by 2002:a17:902:788d:: with SMTP id q13mr13942165pll.154.1552813728017; Sun, 17 Mar 2019 02:08:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sun, 17 Mar 2019 02:08:29 -0700 Message-Id: <20190317090834.5552-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20190317090834.5552-1-richard.henderson@linaro.org> References: <20190317090834.5552-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::541 Subject: [Qemu-devel] [PATCH for-4.1 v2 08/13] tcg/ppc: Implement INDEX_op_dupm_vec X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.cave-ayland@ilande.co.uk, david@gibson.dropbear.id.au Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This saves a round trip through an integer register and back to memory. Signed-off-by: Richard Henderson --- tcg/ppc/tcg-target.h | 2 +- tcg/ppc/tcg-target.inc.c | 57 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/tcg/ppc/tcg-target.h b/tcg/ppc/tcg-target.h index 5143ee853a..8ba5668fae 100644 --- a/tcg/ppc/tcg-target.h +++ b/tcg/ppc/tcg-target.h @@ -152,7 +152,7 @@ extern bool have_isa_3_00; #define TCG_TARGET_HAS_mul_vec 1 #define TCG_TARGET_HAS_sat_vec 1 #define TCG_TARGET_HAS_minmax_vec 1 -#define TCG_TARGET_HAS_dupm_vec 0 +#define TCG_TARGET_HAS_dupm_vec 1 =20 void flush_icache_range(uintptr_t start, uintptr_t stop); void tb_target_set_jmp_target(uintptr_t, uintptr_t, uintptr_t); diff --git a/tcg/ppc/tcg-target.inc.c b/tcg/ppc/tcg-target.inc.c index 61a245b828..85e332fcd3 100644 --- a/tcg/ppc/tcg-target.inc.c +++ b/tcg/ppc/tcg-target.inc.c @@ -467,6 +467,8 @@ static int tcg_target_const_match(tcg_target_long val, = TCGType type, #define NOP ORI /* ori 0,0,0 */ =20 #define LVX XO31(103) +#define LVEBX XO31(7) +#define LVEHX XO31(39) #define LVEWX XO31(71) =20 #define STVX XO31(231) @@ -2835,6 +2837,7 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, = unsigned vece) case INDEX_op_xor_vec: case INDEX_op_andc_vec: case INDEX_op_not_vec: + case INDEX_op_dupm_vec: return 1; case INDEX_op_add_vec: case INDEX_op_sub_vec: @@ -2854,6 +2857,55 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type,= unsigned vece) } } =20 +static void tcg_out_dupm_vec(TCGContext *s, unsigned vece, TCGReg out, + TCGReg base, intptr_t offset) +{ + int elt; + + out &=3D 31; + switch (vece) { + case MO_8: + tcg_out_mem_long(s, 0, LVEBX, out, base, offset); + elt =3D extract32(offset, 0, 4); +#ifndef HOST_WORDS_BIGENDIAN + elt ^=3D 15; +#endif + tcg_out32(s, VSPLTB | VRT(out) | VRB(out) | (elt << 16)); + break; + case MO_16: + assert((offset & 1) =3D=3D 0); + tcg_out_mem_long(s, 0, LVEHX, out, base, offset); + elt =3D extract32(offset, 1, 3); +#ifndef HOST_WORDS_BIGENDIAN + elt ^=3D 7; +#endif + tcg_out32(s, VSPLTH | VRT(out) | VRB(out) | (elt << 16)); + break; + case MO_32: + assert((offset & 3) =3D=3D 0); + tcg_out_mem_long(s, 0, LVEWX, out, base, offset); + elt =3D extract32(offset, 2, 2); +#ifndef HOST_WORDS_BIGENDIAN + elt ^=3D 3; +#endif + tcg_out32(s, VSPLTW | VRT(out) | VRB(out) | (elt << 16)); + break; + case MO_64: + assert((offset & 7) =3D=3D 0); + tcg_out_mem_long(s, 0, LVX, out, base, offset); + /* FIXME: 32-bit altivec */ + tcg_out_dupi_vec(s, TCG_TYPE_V128, TCG_VEC_TMP1, + offset & 8 + ? 0x08090a0b0c0d0e0full + : 0x0001020304050607ull); + tcg_out32(s, VPERM | VRT(out) | VRA(out) | VRB(out) + | VRC(TCG_VEC_TMP1)); + break; + default: + g_assert_not_reached(); + } +} + static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc, unsigned vecl, unsigned vece, const TCGArg *args, const int *const_args) @@ -2884,7 +2936,9 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode o= pc, case INDEX_op_st_vec: tcg_out_st(s, type, a0, a1, a2); return; - + case INDEX_op_dupm_vec: + tcg_out_dupm_vec(s, vece, a0, a1, a2); + return; case INDEX_op_add_vec: insn =3D add_op[vece]; break; @@ -3251,6 +3305,7 @@ static const TCGTargetOpDef *tcg_target_op_def(TCGOpc= ode op) return &v_v; case INDEX_op_ld_vec: case INDEX_op_st_vec: + case INDEX_op_dupm_vec: return &v_r; =20 default: --=20 2.17.2