From nobody Sun Nov 9 16:23:50 2025 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; 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=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1551181609528132.62730873985254; Tue, 26 Feb 2019 03:46:49 -0800 (PST) Received: from localhost ([127.0.0.1]:53473 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gybC9-0001Bk-5v for importer@patchew.org; Tue, 26 Feb 2019 06:46:45 -0500 Received: from eggs.gnu.org ([209.51.188.92]:47270) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gyb5M-0004VH-2T for qemu-devel@nongnu.org; Tue, 26 Feb 2019 06:39:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gyb5J-0006nb-H9 for qemu-devel@nongnu.org; Tue, 26 Feb 2019 06:39:43 -0500 Received: from mx1.redhat.com ([209.132.183.28]:34032) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gyb5H-0006lK-Ah; Tue, 26 Feb 2019 06:39:41 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A3DAB30B96C3; Tue, 26 Feb 2019 11:39:34 +0000 (UTC) Received: from t460s.redhat.com (ovpn-117-93.ams2.redhat.com [10.36.117.93]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4CDE2600C0; Tue, 26 Feb 2019 11:39:33 +0000 (UTC) From: David Hildenbrand To: qemu-devel@nongnu.org Date: Tue, 26 Feb 2019 12:38:49 +0100 Message-Id: <20190226113915.20150-8-david@redhat.com> In-Reply-To: <20190226113915.20150-1-david@redhat.com> References: <20190226113915.20150-1-david@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Tue, 26 Feb 2019 11:39:34 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v1 07/33] s390x/tcg: Implement VECTOR GENERATE MASK 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: qemu-s390x@nongnu.org, Cornelia Huck , David Hildenbrand , Thomas Huth , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This is the first instruction that uses gvec expansion for duplicating elements. We will use makros for most gvec calls to simplify translating vector numbers into offsets (and to not have to worry about oprsz and maxsz). Signed-off-by: David Hildenbrand Reviewed-by: Richard Henderson insn->data; @@ -175,3 +179,33 @@ static DisasJumpType op_vgbm(DisasContext *s, DisasOps= *o) tcg_temp_free_i32(zeroes); return DISAS_NEXT; } + +static DisasJumpType op_vgm(DisasContext *s, DisasOps *o) +{ + const uint8_t es =3D get_field(s->fields, m4); + const uint8_t bits =3D NUM_VEC_ELEMENT_BITS(es); + const uint8_t i2 =3D get_field(s->fields, i2) & (bits - 1); + const uint8_t i3 =3D get_field(s->fields, i3) & (bits - 1); + uint64_t mask =3D 0; + TCGv_i64 tmp; + int i; + + if (es > MO_64) { + gen_program_exception(s, PGM_SPECIFICATION); + return DISAS_NORETURN; + } + + /* generate the mask - take care of wrapping */ + for (i =3D i2; ; i =3D (i + 1) % bits) { + mask |=3D 1ull << (bits - i - 1); + if (i =3D=3D i3) { + break; + } + } + + tmp =3D tcg_temp_new_i64(); + tcg_gen_movi_i64(tmp, mask); + gen_gvec_dup_i64(es, get_field(s->fields, v1), tmp); + tcg_temp_free_i64(tmp); + return DISAS_NEXT; +} --=20 2.17.2