From patchwork Fri Oct 13 16:24:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 115805 Delivered-To: patch@linaro.org Received: by 10.140.22.163 with SMTP id 32csp937060qgn; Fri, 13 Oct 2017 09:44:16 -0700 (PDT) X-Received: by 10.200.43.167 with SMTP id m36mr2769987qtm.174.1507913055994; Fri, 13 Oct 2017 09:44:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1507913055; cv=none; d=google.com; s=arc-20160816; b=HnMqckrJoisa4MjTtttAwWb1aJA4TgJ5aXs9EzEBVVlEuA0UyxZQdVX75UozPiXGLf MgihwoV+bZhmtaJ+CeuIQvhNc4uTu01DOFpJN78lYY0lznr0PTacfuHYfb0WypqkdzqM FMUeXPnxp5HTNAQT3fHliIPKUUM7HEM88FikRLuxDdtINB6NptTGHlBL94vEKxQo6CEF evNOnTi7fCp+26mcJApfkt2eu8mf/FBC8W/yGijcOXKsVpZx+idwz/OTNFBRzFToreu/ B8dsUhmhspk6KuKYYz/KbH80X/NbZQ51Q6VrzXBei19Ps6kxy4YaYqYsuidaDirHc7QO mKiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=TKxk+a6SMfN5OFT+aCbP3LUxDsdDcUHvI4Ye9fChGlI=; b=ejgf9w7oEw5x8LvI/bTEh+41dDP8B2eKYlX73Fl/fMO+Mn7bP/nGiSKa8hRZ373Ctl hAAZ5P+f4LVA2e/YucQZstHlchQiHrJ1TWUEIfhR6d8UgOcXaTleVdjEfbeyFpFfFA4d 1e3ZQ/aNhsK/yqC6QfbiDUf8+xFfRAFl2PY8uOQGTgRmOJQZrgxqeBsfxeZz99B8Ti/r uOQdtbk2+TUYYZxWJ80pQ9Nma4Je4oGGr+LO9r09Yejgyf+7B1XSE0Bq43MypRH7KMVX NZj5SZcLD82BNBvFhojUQEhPLpRbcm5QK9Enw1pG1Tvk4qUTJWRrdk5ki9QQPAHQmBP7 sVDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=PCoJH8J0; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id o184si1101940qke.283.2017.10.13.09.44.15 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 13 Oct 2017 09:44:15 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=PCoJH8J0; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:51130 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e334H-0001v7-Rq for patch@linaro.org; Fri, 13 Oct 2017 12:44:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44005) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e32sX-0000Yv-T1 for qemu-devel@nongnu.org; Fri, 13 Oct 2017 12:32:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e32sW-0002Fu-SI for qemu-devel@nongnu.org; Fri, 13 Oct 2017 12:32:05 -0400 Received: from mail-wr0-x231.google.com ([2a00:1450:400c:c0c::231]:56650) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1e32sW-0002FE-L9 for qemu-devel@nongnu.org; Fri, 13 Oct 2017 12:32:04 -0400 Received: by mail-wr0-x231.google.com with SMTP id r79so1443165wrb.13 for ; Fri, 13 Oct 2017 09:32:04 -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 :mime-version:content-transfer-encoding; bh=TKxk+a6SMfN5OFT+aCbP3LUxDsdDcUHvI4Ye9fChGlI=; b=PCoJH8J0b+x1OgnFemMEMxQgxfsqJVk4PvbfCsaNPC+4fB7xOV8s39/hNQnNyBfIq7 my37Hec4b1AlHsRf8j3ggJ8N0B703jeaA6/OPLX93kkvC7ZI7Zz6BNSV86sK7lcNXTtR 476I58pK2LI+Nb9ODUBCHCO809fw/O1/gVxhc= 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=TKxk+a6SMfN5OFT+aCbP3LUxDsdDcUHvI4Ye9fChGlI=; b=C0f5Nv6uzcotqrZ4gHtpDZGEWKKQIT+kG+ZctSgBH7SoE0N6VD/5eGi4y1LpIzGioz rWX1rCX1Yr9hGuDSsYfxopAoIkZUOp9VIWxYR+5i1rbkS109RbJfOnn/TaJ7Y9EMqSSH Pl58pcyqjEFMZk3DxcnVOx78wbduat6zoDE/9+C/mIsSTpRybe7i3Hs0mG8UyHh3lZiE 6PFyXX3RIsUnmxJibLPmDPr7OkWA6Ent+i+8fXHcQkDm0gtmrMtO4JOdZuh0DCup4CCt TSQFhdBtHWACCBJC0HHqvJDrhOoBO590Gbe2nZk9mMhVw9m0d+HDvkNo3zM/IG31kOOF dHcA== X-Gm-Message-State: AMCzsaUQb53UvBGah7KNkzTmY78fmHpZGGzyzTn9AKtFmJcgDDnTHTpS 41JLoDHp5pp7+CEJ4G+cK5eRHQ== X-Google-Smtp-Source: AOwi7QBWVSndHfNDluEHQFZPfTixImfpt9/Bjate7+W+A81VVgIej48nFuPgdw92QGgycJmVaE4UZQ== X-Received: by 10.223.195.131 with SMTP id p3mr2075335wrf.89.1507912323423; Fri, 13 Oct 2017 09:32:03 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id i76sm6042508wmd.2.2017.10.13.09.31.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Oct 2017 09:31:59 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id 590D23E0BDF; Fri, 13 Oct 2017 17:24:39 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: richard.henderson@linaro.org Date: Fri, 13 Oct 2017 17:24:21 +0100 Message-Id: <20171013162438.32458-14-alex.bennee@linaro.org> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171013162438.32458-1-alex.bennee@linaro.org> References: <20171013162438.32458-1-alex.bennee@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::231 Subject: [Qemu-devel] [RFC PATCH 13/30] target/arm/translate-a64.c: AdvSIMD scalar 3 Same FP16 initial decode 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, =?utf-8?q?Alex_Benn?= =?utf-8?b?w6ll?= , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" This is the initial decode skeleton for the Advanced SIMD scalar three same instruction group. The fprintf is purely to aid debugging as the additional instructions are added. It will be removed once the group is complete. Signed-off-by: Alex Bennée --- target/arm/translate-a64.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) -- 2.14.1 Reviewed-by: Richard Henderson diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 50e53bf8b0..5e531b3ae4 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -9751,6 +9751,81 @@ static void disas_simd_three_reg_same(DisasContext *s, uint32_t insn) } } +/* + * Advanced SIMD three same (ARMv8.2 FP16 variants) + * + * 31 30 29 28 24 23 22 21 20 16 15 14 13 11 10 9 5 4 0 + * +---+---+---+-----------+---------+------+-----+--------+---+------+------+ + * | 0 | Q | U | 0 1 1 1 0 | a | 1 0 | Rm | 0 0 | opcode | 1 | Rn | Rd | + * +---+---+---+-----------+---------+------+-----+--------+---+------+------+ + * + * This includes FMULX, FCMEQ (register), FRECPS, FRSQRTS, FCMGE + * (register), FACGE, FABD, FCMGT (register) and FACGT. + * + */ +static void disas_simd_three_reg_same_fp16(DisasContext *s, uint32_t insn) +{ + int opcode, fpopcode; + int is_q, u, a, rm, rn, rd; + int datasize, elements; + int pass; + TCGv_ptr fpst; + + if (!arm_dc_feature(s, ARM_FEATURE_V8_FP16)) { + unallocated_encoding(s); + return; + } + + if (!fp_access_check(s)) { + return; + } + + /* For these floating point ops, the U, a and opcode bits + * together indicate the operation. + */ + opcode = extract32(insn, 11, 3); + u = extract32(insn, 29, 1); + a = extract32(insn, 23, 1); + is_q = extract32(insn, 30, 1); + rm = extract32(insn, 16, 5); + rn = extract32(insn, 5, 5); + rd = extract32(insn, 0, 5); + + fpopcode = opcode | (a << 4) | (u << 5); + datasize = is_q ? 128 : 64; + elements = datasize / 16; + + fpst = get_fpstatus_ptr(); + + for (pass = 0; pass < elements; pass++) { + TCGv_i32 tcg_op1 = tcg_temp_new_i32(); + TCGv_i32 tcg_op2 = tcg_temp_new_i32(); + TCGv_i32 tcg_res = tcg_temp_new_i32(); + + read_vec_element_i32(s, tcg_op1, rn, pass, MO_16); + read_vec_element_i32(s, tcg_op2, rm, pass, MO_16); + + switch (fpopcode) { + default: + fprintf(stderr,"%s: insn %#04x fpop %#2x\n", __func__, insn, fpopcode); + g_assert_not_reached(); + } + + write_vec_element_i32(s, tcg_res, rd, pass, MO_16); + tcg_temp_free_i32(tcg_res); + tcg_temp_free_i32(tcg_op1); + tcg_temp_free_i32(tcg_op2); + } + + tcg_temp_free_ptr(fpst); + + if (!is_q) { + /* non-quad vector op */ + clear_vec_high(s, rd); + } + +} + static void handle_2misc_widening(DisasContext *s, int opcode, bool is_q, int size, int rn, int rd) { @@ -11159,6 +11234,7 @@ static const AArch64DecodeTable data_proc_simd[] = { { 0x4e280800, 0xff3e0c00, disas_crypto_aes }, { 0x5e000000, 0xff208c00, disas_crypto_three_reg_sha }, { 0x5e280800, 0xff3e0c00, disas_crypto_two_reg_sha }, + { 0x0e400400, 0x9f60c400, disas_simd_three_reg_same_fp16 }, { 0x00000000, 0x00000000, NULL } };