From patchwork Thu Feb 8 17:31:34 2018 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: 127708 Delivered-To: patch@linaro.org Received: by 10.46.124.24 with SMTP id x24csp1729689ljc; Thu, 8 Feb 2018 10:03:21 -0800 (PST) X-Google-Smtp-Source: AH8x226WX8S68ZehR0/0S9DsJyKbMMZ/UQL+vviUonV0vuYg0dw+kSTDQbzGTEWJOULO0q3fTAgu X-Received: by 10.37.99.194 with SMTP id x185mr7571ybb.471.1518113001758; Thu, 08 Feb 2018 10:03:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518113001; cv=none; d=google.com; s=arc-20160816; b=nzhZH/77UlY91na8Xiqm02hBeQHwGretziqtHykuZxp10d1YrhEsxhBkzYDAD/O+Gk dqNbWV18Kc97HACUsDBrM8OGqBkQtUsJ/mDMXQSHoyqk73DznSXqJTr+GRWpgfnrQzIk nm5PKDzrlt/zryxQ08GFFJnNmsK4pTwh66VJ4t/ezGMbDl7t+MaHg0LLRIPYGsz0qUXs meI8++/N0vlKO3O7a5+myUgWmSTDpVTK6qbt/mNrSXTEsimpRxW6iD2h63LgtkAD32yu sxBtbnW2iIe+RKAL4I/dD5G66c7vrO7YAaubvufn60FdWv1bwLos4o70H8D8T2m43zn8 +8nA== 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=BVeImd1OiYsSaUNnIN2vG509/0i0QwAcJu2NtStwtTo=; b=X0q94GrELDBBoWmpBkPb4v8zYlJpp5f94X5B8xVUKPwOcKpnYV+IadAOfpiIGaQHsU bgOFWP2/jHpgG3RVpGP+Y43MxCDRHF5RDc3DnXljTjEYUR0l9B9K/P0haN9msjQaf1UM SLZXXihYRsqZGInUOxds2qvHHCD2mnCKlzgT1qJGwyR8CMnpiurNqV7RfXuBl2WYPuYj zgaafu1P0oWAEXzVcIvuIxz8FscFe7s/Y9afLRUxwTD5c3a4E6G7fxWxF6PFJqOtDaC6 DEhrQrpFvi6JfRFEQyQCgS9vEzDQ0vTqqoMGYTevgbZWhcdd3AUuxchvkYSqM9rn+7Wh i22A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=NxSZaYMX; 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 k6si86528ywl.208.2018.02.08.10.03.21 for (version=TLS1 cipher=AES128-SHA bits=128/128); Thu, 08 Feb 2018 10:03:21 -0800 (PST) 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=NxSZaYMX; 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]:57993 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ejqXZ-0005ZH-4y for patch@linaro.org; Thu, 08 Feb 2018 13:03:21 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54300) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ejq3R-0003OH-8I for qemu-devel@nongnu.org; Thu, 08 Feb 2018 12:32:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ejq3O-0006iG-Ra for qemu-devel@nongnu.org; Thu, 08 Feb 2018 12:32:13 -0500 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]:52929) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ejq3O-0006h7-JW for qemu-devel@nongnu.org; Thu, 08 Feb 2018 12:32:10 -0500 Received: by mail-wm0-x242.google.com with SMTP id g1so10887196wmg.2 for ; Thu, 08 Feb 2018 09:32:10 -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 :mime-version:content-transfer-encoding; bh=BVeImd1OiYsSaUNnIN2vG509/0i0QwAcJu2NtStwtTo=; b=NxSZaYMXe7rCiWKDXY5IgI80aahpZZd7xcUaEWyu1sgrvHS3oZuSq86jSUJa5DJs6w 11P3Pm5P8aqkJc2xDsoQyqNz8pRGVHW9yYXyH/8Nex/lagNfLrNiGusZBRzerDCtxiZ3 UkdydtPq1SWL7qfZw1oQgWG3irGSUc31GPt1A= 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=BVeImd1OiYsSaUNnIN2vG509/0i0QwAcJu2NtStwtTo=; b=bptYzq8MRS4UK6F4KgBQhr8P3t+p+tK/t85ZMZhePBtq0DlJB5SQ38ZMYcMSHP9jXj VP8YJLU9LHY5d69dl+IjVy14s2sRLPpYkZygZXNu9YY9oMsqrNeup4hqRNML0C5zga1A aKM0kQb9+5mwGet7D2WAmiIae4qVLv4LjCU0Z8NB7eLKrGV2U4Hf1Svt82o8B9KDNcBA HIWIkKP4gHnvldgDNt/g12/JvULTKbyzCmjqo4leXrbvfNSkTxJxLq3y8bohGbFGn4VL x6bGXL+yQhpxugOgV+NuZlD8O3GLSwUxmAD+lpzcWNAdc4DjriO2caZ8Zo5/5BZQQ54+ teKA== X-Gm-Message-State: APf1xPDeRcPKAyBiCjWSgIcef6PlguqMiYGPqa4XMb9NIDO0/UrT6ubl oBQXuhsU99M05gTf7/fnMg6pxw== X-Received: by 10.28.124.4 with SMTP id x4mr42055wmc.84.1518111129453; Thu, 08 Feb 2018 09:32:09 -0800 (PST) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id b133sm452066wmh.4.2018.02.08.09.32.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 08 Feb 2018 09:32:05 -0800 (PST) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id 67DB13E0C29; Thu, 8 Feb 2018 17:31:58 +0000 (GMT) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-arm@nongnu.org Date: Thu, 8 Feb 2018 17:31:34 +0000 Message-Id: <20180208173157.24705-10-alex.bennee@linaro.org> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180208173157.24705-1-alex.bennee@linaro.org> References: <20180208173157.24705-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:c09::242 Subject: [Qemu-devel] [PATCH v2 09/32] arm/translate-a64: initial decode for simd_three_reg_same_fp16 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 , =?utf-8?q?Alex_Benn=C3=A9e?= , 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 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 | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) -- 2.15.1 Reviewed-by: Richard Henderson diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 2dd958c0e7..5392f83794 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -9794,6 +9794,82 @@ 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 << 3) | (u << 4); + datasize = is_q ? 128 : 64; + elements = datasize / 16; + + fpst = get_fpstatus_ptr(true); + + 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 @ %#" PRIx64 "\n", + __func__, insn, fpopcode, s->pc); + 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) { @@ -11199,6 +11275,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 } };