From patchwork Tue Feb 27 14:38:29 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: 129811 Delivered-To: patch@linaro.org Received: by 10.80.172.228 with SMTP id x91csp366754edc; Tue, 27 Feb 2018 06:52:05 -0800 (PST) X-Google-Smtp-Source: AG47ELs0ReHQpQkZ0Q4VhQdDaAbPY930+OneOjv5u9xzyRdzQFmLzybi+XSpmj3cEIk2G/n3a/G3 X-Received: by 10.129.175.86 with SMTP id x22mr9601827ywj.158.1519743125493; Tue, 27 Feb 2018 06:52:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519743125; cv=none; d=google.com; s=arc-20160816; b=qJr3B0ltyrulf+RLe99Vf2bUAAv/OzSooD/mKE4T1Ja0jRcHYthpp+ea0VeDb9IUHE 5Xr0NoMSEXYff8siCEmK2zhJSjC8oqMmYqSrGqw4tsblDKijZS1isgaHATkYEaImbSL+ RMvUtAT5c2ff1/M91nEnE4dNqjJmJdqFEjZnKXXtZAQ25DJH4VHnpftqjGR5gMTzNjo8 AGTyLR+GRv3ja8q23q2w6ttgMnWE6cwPbe/MOTHrUt6BYIYMrNuvMf/ousPg9HuotjVq +wwOz6pKgPe5A87PsgI7MIxqtZEo1Vc6rF7Zm3wjYECdTrHcLkxeXxCvuDgRiS/GUjaI KC7Q== 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=5e92OlfPhH3uuKn8l58mdAFexdWXszJjfX8UyDvWKY8=; b=r1LwYlglwcXyrZJvVCuZP4oelhdJ5YRrg72+tC+2QBSjE50HHgr67V+K9UC3X3wp6h r986hmOsFswqJ6oFk8za8NzODTncP801nZsiIGl/MqmNE+jBfwc2fU6rhMEaQYGXvxzS 0BJxhM4gbpPJeVN9/kkMQXlvb07ODdu09oU6aRDlIO664L7G9LcWK1CpCo59e4SBry1S LVaUUrReHJu9vX5cQV79E2o3HE7Rz9Hc6moLaZj1QFEIG/Ci+qIrR/7Jz/P1EqWasyJ0 BjJpYNABJqkvnffR8KPuKCdj2VlcDwDeVMrC8ZaDXs52eHaQygHwlF9xrDBTszJlphFU inng== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=YJnHlfrc; 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 v2-v6si1776162ybe.51.2018.02.27.06.52.05 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 27 Feb 2018 06:52:05 -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=YJnHlfrc; 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]:37752 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eqgbt-0006ZF-0N for patch@linaro.org; Tue, 27 Feb 2018 09:52:05 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55900) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eqgPQ-0003jz-0h for qemu-devel@nongnu.org; Tue, 27 Feb 2018 09:39:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eqgPK-00080I-UV for qemu-devel@nongnu.org; Tue, 27 Feb 2018 09:39:11 -0500 Received: from mail-wm0-x241.google.com ([2a00:1450:400c:c09::241]:54154) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eqgPK-0007zo-Ms for qemu-devel@nongnu.org; Tue, 27 Feb 2018 09:39:06 -0500 Received: by mail-wm0-x241.google.com with SMTP id t74so24667384wme.3 for ; Tue, 27 Feb 2018 06:39:06 -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=5e92OlfPhH3uuKn8l58mdAFexdWXszJjfX8UyDvWKY8=; b=YJnHlfrcjafYkR01bXNZrJLJdkk/F+dMvu0MAtpVmdccbti55gNYUF7D6LrdnM8YQf jgPBiQDR+cpkhY9K/lJRbAK1kRvDNv0ntHABfVIGcdjGRj8xbZWYwuv5J9VSOGhF6Yrf WbDWBab27xJ3jLtvg9GJ9lLG6wL3ptA9i2Ih8= 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=5e92OlfPhH3uuKn8l58mdAFexdWXszJjfX8UyDvWKY8=; b=m6amURBh1LCN4vSff7nRSDBqJj+k+KR+1EAhk0IYEAK6k/315+eH6IGnU363XK4wip aqifQi6ERRKmfw5keHdSeI6eWb/58LQtaWmixi/ZyQfzmrW9/x/vLs8eTGLEhQac1QaC ybkLerVMWTc+RjTvBJ1Euh0l0W0Z4y+8Ud6yipNsI2bUbqgrdI/KHygXeDlrWbpJtQfA vw9vueoU3bUZP03t8EBUGUVfpAmHzwZEohyaA/FhUpwGVsAWgGnaT3Nr/UWomgcvDxN+ KJroSVN/WpPDYM7F9O7HpoTIJaHuzh/xl0apwnMna5HH9W49H3QrgP6AlHg5urfHziWf UgbQ== X-Gm-Message-State: APf1xPAq1EQ66r7BSN83GdvvD803KXuVdoHVQgV1cfLRO1CuRJYzF/eF 940+OUs14HPWOdWPkhReXWadWy7qsM4= X-Received: by 10.28.230.68 with SMTP id d65mr9259191wmh.13.1519742345562; Tue, 27 Feb 2018 06:39:05 -0800 (PST) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id c1sm10230586wre.10.2018.02.27.06.38.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 27 Feb 2018 06:38:59 -0800 (PST) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id 790BC3E0990; Tue, 27 Feb 2018 14:38:53 +0000 (GMT) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: qemu-arm@nongnu.org Date: Tue, 27 Feb 2018 14:38:29 +0000 Message-Id: <20180227143852.11175-9-alex.bennee@linaro.org> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180227143852.11175-1-alex.bennee@linaro.org> References: <20180227143852.11175-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::241 Subject: [Qemu-devel] [PATCH v4 08/31] 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: =?utf-8?q?Alex_Benn=C3=A9e?= , richard.henderson@linaro.org, qemu-devel@nongnu.org, Peter Maydell 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 Reviewed-by: Richard Henderson --- target/arm/translate-a64.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) -- 2.15.1 diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 5dd54b7ac4..4828457b5b 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -10228,6 +10228,78 @@ 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); + + clear_vec_high(s, is_q, rd); +} + static void handle_2misc_widening(DisasContext *s, int opcode, bool is_q, int size, int rn, int rd) { @@ -11975,6 +12047,7 @@ static const AArch64DecodeTable data_proc_simd[] = { { 0xce000000, 0xff808000, disas_crypto_four_reg }, { 0xce800000, 0xffe00000, disas_crypto_xar }, { 0xce408000, 0xffe0c000, disas_crypto_three_reg_imm2 }, + { 0x0e400400, 0x9f60c400, disas_simd_three_reg_same_fp16 }, { 0x00000000, 0x00000000, NULL } };