From nobody Tue Feb 10 05:46:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1650838525949258.0624826885677; Sun, 24 Apr 2022 15:15:25 -0700 (PDT) Received: from localhost ([::1]:38104 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nikVo-0004IZ-Ke for importer@patchew.org; Sun, 24 Apr 2022 18:15:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50546) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nikSO-0001RR-HC for qemu-devel@nongnu.org; Sun, 24 Apr 2022 18:11:52 -0400 Received: from nowt.default.pbrook.uk0.bigv.io ([2001:41c8:51:832:fcff:ff:fe00:46dd]:58776) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nikSM-0002o7-VD for qemu-devel@nongnu.org; Sun, 24 Apr 2022 18:11:52 -0400 Received: from cpc91554-seac25-2-0-cust857.7-2.cable.virginm.net ([82.27.199.90] helo=wren.home) by nowt.default.pbrook.uk0.bigv.io with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1nikJC-0001ea-Dq; Sun, 24 Apr 2022 23:02:22 +0100 From: Paul Brook To: Paolo Bonzini , Richard Henderson , Eduardo Habkost Subject: [PATCH v2 37/42] i386: Implement VBLENDV Date: Sun, 24 Apr 2022 23:01:59 +0100 Message-Id: <20220424220204.2493824-38-paul@nowt.org> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220418173904.3746036-1-paul@nowt.org> References: <20220418173904.3746036-1-paul@nowt.org> 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=2001:41c8:51:832:fcff:ff:fe00:46dd; envelope-from=paul@nowt.org; helo=nowt.default.pbrook.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "open list:All patches CC here" , Paul Brook Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1650838526838100001 Content-Type: text/plain; charset="utf-8" The AVX variants of the BLENDV instructions use a different opcode prefix to support the additional operands. We already modified the helper functions in anticipation of this. Signed-off-by: Paul Brook --- target/i386/tcg/translate.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index 4072fa28d3..95ecdea8fe 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -3384,6 +3384,9 @@ static const struct SSEOpHelper_table7 sse_op_table7[= 256] =3D { [0x42] =3D BINARY_OP(mpsadbw, SSE41, SSE_OPF_MMX), [0x44] =3D BINARY_OP(pclmulqdq, PCLMULQDQ, 0), [0x46] =3D BINARY_OP(vpermdq, AVX, SSE_OPF_AVX2), /* vperm2i128 */ + [0x4a] =3D BLENDV_OP(blendvps, AVX, 0), + [0x4b] =3D BLENDV_OP(blendvpd, AVX, 0), + [0x4c] =3D BLENDV_OP(pblendvb, AVX, SSE_OPF_MMX), #define gen_helper_pcmpestrm_ymm NULL [0x60] =3D CMP_OP(pcmpestrm, SSE42), #define gen_helper_pcmpestri_ymm NULL @@ -5268,6 +5271,10 @@ static void gen_sse(CPUX86State *env, DisasContext *= s, int b, } =20 /* SSE */ + if (op7.flags & SSE_OPF_BLENDV && !(s->prefix & PREFIX_VEX)) { + /* Only VEX encodings are valid for these blendv opcodes */ + goto illegal_op; + } op1_offset =3D ZMM_OFFSET(reg); if (mod =3D=3D 3) { op2_offset =3D ZMM_OFFSET(rm | REX_B(s)); @@ -5316,8 +5323,15 @@ static void gen_sse(CPUX86State *env, DisasContext *= s, int b, op7.fn[b1].op1(cpu_env, s->ptr0, s->ptr1, tcg_const_i32(va= l)); } else { tcg_gen_addi_ptr(s->ptr2, cpu_env, v_offset); - op7.fn[b1].op2(cpu_env, s->ptr0, s->ptr2, s->ptr1, - tcg_const_i32(val)); + if (op7.flags & SSE_OPF_BLENDV) { + TCGv_ptr mask =3D tcg_temp_new_ptr(); + tcg_gen_addi_ptr(mask, cpu_env, ZMM_OFFSET(val >> 4)); + op7.fn[b1].op3(cpu_env, s->ptr0, s->ptr2, s->ptr1, mas= k); + tcg_temp_free_ptr(mask); + } else { + op7.fn[b1].op2(cpu_env, s->ptr0, s->ptr2, s->ptr1, + tcg_const_i32(val)); + } } if ((op7.flags & SSE_OPF_CMP) =3D=3D 0 && s->vex_l =3D=3D 0) { gen_clear_ymmh(s, reg); --=20 2.36.0