From nobody Tue Oct 28 21:08:58 2025 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1513621589687904.5737590284684; Mon, 18 Dec 2017 10:26:29 -0800 (PST) Received: from localhost ([::1]:44142 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eR07L-0006zz-3G for importer@patchew.org; Mon, 18 Dec 2017 13:26:23 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55773) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eQzUW-0008Gj-E0 for qemu-devel@nongnu.org; Mon, 18 Dec 2017 12:46:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eQzUV-00026f-8Q for qemu-devel@nongnu.org; Mon, 18 Dec 2017 12:46:16 -0500 Received: from mail-pg0-x243.google.com ([2607:f8b0:400e:c05::243]:45268) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eQzUV-000266-1B for qemu-devel@nongnu.org; Mon, 18 Dec 2017 12:46:15 -0500 Received: by mail-pg0-x243.google.com with SMTP id m25so9422366pgv.12 for ; Mon, 18 Dec 2017 09:46:14 -0800 (PST) Received: from cloudburst.twiddle.net (174-21-7-63.tukw.qwest.net. [174.21.7.63]) by smtp.gmail.com with ESMTPSA id t84sm26209657pfe.160.2017.12.18.09.46.11 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 18 Dec 2017 09:46:12 -0800 (PST) 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=Ig4kdYIw6qOuzDY1F9Ia70Qay4cvLKadEMa5FjRQcZw=; b=OpChPybH9SFEICQQfVL9N3G4TLi3b2VGHHvT8BiGSOCn5mHV+TzpvgV6FWliEgdb8I hZjpPGNx/KXAPG+iNBuah9F+iZTxu0dn/ZoBI6Gl3YCvbmZul2IYiCTREGRRxZj1z9WB 9+Ad7hbWsZt0JqLKZTC9NwsTA2ec3eaigdIUE= 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=Ig4kdYIw6qOuzDY1F9Ia70Qay4cvLKadEMa5FjRQcZw=; b=EvZ7blA9LXkd7fZisJdG/Vsvn7sDTzZmOfVO+saG4dsCSKWymPz1eDmNfn+mJ+jxIH +X9ayj9ttgZ+7GMIpy9qfejvkCHnFNX8DYJp7Nw/dHXDzml/sXIhGpGDYtuM8UTUP9gj TfrvHLM3IYujlbBRI6V7FyvtGRP1Wiy0Jmm5V25UhIPT/bGsdUK5O4qfr7BlXilZvDGJ CZYTErVqlG1EhbmypWvOMBoxTZx8op8ifEffe36abMfMHA7kIcUz4PKOheoVFAm9Powq ELh0dPvCh/AZ0YtLHnwz49O9TcAFNlCA6c/FpMnk1qhp6Vp0v2BJ/RtOVZ/IZyKPdaee Pnrg== X-Gm-Message-State: AKGB3mKgzK+J+xjjKQVIqTNZa8EtwEdCR4j8wIiVZgTok0SPZg5WesvH qGw63zlQl6yhECMqpTevmFaVCt+u6l0= X-Google-Smtp-Source: ACJfBouMixZtdSFIeMtyYhf3OFwrsByROj88m/Ns3kK32imyhp2ElEWNuoCwbf9u7anEVfGZ3r6t4A== X-Received: by 10.98.56.69 with SMTP id f66mr498722pfa.38.1513619173513; Mon, 18 Dec 2017 09:46:13 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Date: Mon, 18 Dec 2017 09:45:41 -0800 Message-Id: <20171218174552.18871-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20171218174552.18871-1-richard.henderson@linaro.org> References: <20171218174552.18871-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::243 Subject: [Qemu-devel] [PATCH 12/23] target/arm: Implement SVE bitwise shift by vector (predicated) 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: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_6 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- target/arm/helper-sve.h | 27 +++++++++++++++++++++++++++ target/arm/sve_helper.c | 25 +++++++++++++++++++++++++ target/arm/translate-sve.c | 4 ++++ target/arm/sve.def | 8 ++++++++ 4 files changed, 64 insertions(+) diff --git a/target/arm/helper-sve.h b/target/arm/helper-sve.h index 2b265e9892..61b1287269 100644 --- a/target/arm/helper-sve.h +++ b/target/arm/helper-sve.h @@ -162,6 +162,33 @@ DEF_HELPER_FLAGS_5(sve_udiv_zpzz_s, TCG_CALL_NO_RWG, DEF_HELPER_FLAGS_5(sve_udiv_zpzz_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_5(sve_asr_zpzz_b, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(sve_asr_zpzz_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(sve_asr_zpzz_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(sve_asr_zpzz_d, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_5(sve_lsr_zpzz_b, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(sve_lsr_zpzz_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(sve_lsr_zpzz_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(sve_lsr_zpzz_d, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_5(sve_lsl_zpzz_b, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(sve_lsl_zpzz_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(sve_lsl_zpzz_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(sve_lsl_zpzz_d, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) + DEF_HELPER_FLAGS_3(sve_orv_b, TCG_CALL_NO_RWG, i64, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sve_orv_h, TCG_CALL_NO_RWG, i64, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sve_orv_s, TCG_CALL_NO_RWG, i64, ptr, ptr, i32) diff --git a/target/arm/sve_helper.c b/target/arm/sve_helper.c index 9146e35e5b..20f1e60fda 100644 --- a/target/arm/sve_helper.c +++ b/target/arm/sve_helper.c @@ -492,6 +492,28 @@ DO_ZPZZ_D(sve_umulh_zpzz_d, uint64_t, do_umulh_d) DO_ZPZZ_D(sve_sdiv_zpzz_d, int64_t, DO_DIV) DO_ZPZZ_D(sve_udiv_zpzz_d, uint64_t, DO_DIV) =20 +/* Note that all bits of the shift are significant + and not modulo the element size. */ +#define DO_ASR(N, M) (N >> MIN(M, sizeof(N) * 8 - 1)) +#define DO_LSR(N, M) (M < sizeof(N) * 8 ? N >> M : 0) +#define DO_LSL(N, M) (M < sizeof(N) * 8 ? N << M : 0) + +DO_ZPZZ(sve_asr_zpzz_b, int8_t, H1, DO_ASR) +DO_ZPZZ(sve_lsr_zpzz_b, uint8_t, H1_2, DO_LSR) +DO_ZPZZ(sve_lsl_zpzz_b, uint8_t, H1_4, DO_LSL) + +DO_ZPZZ(sve_asr_zpzz_h, int16_t, H1, DO_ASR) +DO_ZPZZ(sve_lsr_zpzz_h, uint16_t, H1_2, DO_LSR) +DO_ZPZZ(sve_lsl_zpzz_h, uint16_t, H1_4, DO_LSL) + +DO_ZPZZ(sve_asr_zpzz_s, int32_t, H1, DO_ASR) +DO_ZPZZ(sve_lsr_zpzz_s, uint32_t, H1_2, DO_LSR) +DO_ZPZZ(sve_lsl_zpzz_s, uint32_t, H1_4, DO_LSL) + +DO_ZPZZ_D(sve_asr_zpzz_d, int64_t, DO_ASR) +DO_ZPZZ_D(sve_lsr_zpzz_d, uint64_t, DO_LSR) +DO_ZPZZ_D(sve_lsl_zpzz_d, uint64_t, DO_LSL) + #undef DO_ZPZZ #undef DO_ZPZZ_D =20 @@ -595,6 +617,9 @@ DO_VPZ_D(sve_uminv_d, uint64_t, uint64_t, -1, DO_MIN) #undef DO_ABD #undef DO_MUL #undef DO_DIV +#undef DO_ASR +#undef DO_LSR +#undef DO_LSL =20 /* Three-operand expander, immediate operand, controlled by a predicate. */ diff --git a/target/arm/translate-sve.c b/target/arm/translate-sve.c index 08388c0a07..685a3ba249 100644 --- a/target/arm/translate-sve.c +++ b/target/arm/translate-sve.c @@ -190,6 +190,10 @@ DO_ZPZZ(MUL, mul) DO_ZPZZ(SMULH, smulh) DO_ZPZZ(UMULH, umulh) =20 +DO_ZPZZ(ASR, asr) +DO_ZPZZ(LSR, lsr) +DO_ZPZZ(LSL, lsl) + void trans_SDIV_zpzz(DisasContext *s, arg_rprr_esz *a, uint32_t insn) { gen_helper_gvec_4 *fn; diff --git a/target/arm/sve.def b/target/arm/sve.def index f1d2801b94..9f9c0803a0 100644 --- a/target/arm/sve.def +++ b/target/arm/sve.def @@ -133,6 +133,14 @@ LSR_zpzi 00000100 .. 000 001 100 ... .. ... ..... @rd= n_pg_tszimm imm=3D%tszimm_sh LSL_zpzi 00000100 .. 000 011 100 ... .. ... ..... @rdn_pg_tszimm imm=3D%t= szimm_shr ASRD 00000100 .. 000 100 100 ... .. ... ..... @rdn_pg_tszimm imm=3D%tszi= mm_shr =20 +# SVE bitwise shift by vector (predicated) +ASR_zpzz 00000100 .. 010 000 100 ... ..... ..... @rdn_pg_rm_esz +LSR_zpzz 00000100 .. 010 001 100 ... ..... ..... @rdn_pg_rm_esz +LSL_zpzz 00000100 .. 010 011 100 ... ..... ..... @rdn_pg_rm_esz +ASR_zpzz 00000100 .. 010 100 100 ... ..... ..... @rdm_pg_rn_esz # ASRR +LSR_zpzz 00000100 .. 010 101 100 ... ..... ..... @rdm_pg_rn_esz # LSRR +LSL_zpzz 00000100 .. 010 111 100 ... ..... ..... @rdm_pg_rn_esz # LSLR + ### SVE Logical - Unpredicated Group =20 # SVE bitwise logical operations (unpredicated) --=20 2.14.3