From patchwork Thu Jul 20 15:04:14 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: 108363 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp2259057qge; Thu, 20 Jul 2017 08:10:56 -0700 (PDT) X-Received: by 10.237.58.167 with SMTP id o36mr5706251qte.128.1500563456870; Thu, 20 Jul 2017 08:10:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1500563456; cv=none; d=google.com; s=arc-20160816; b=Ar9xomx24hxAHzH9QuqNgFdZlZBNTsrVo3UgFFkXot1AIifdfDob8xlUZKYaby3fzT 0M2Wjf9z9PH9n4CpkUBh6STm5LGdCgDOafIWNMRlt0wJ9c7G4sWPj2yIzNuuzPJZScIg HzJfeigLglzbWAYY4BvL0tHDhdFCFWsf/AIOLruA9wfw7+B61ziSeqAjssf57Aosshzf K/+FCVIL90MfQcBtslrHEdK6gkLCuPZqfKcfyLa+o4dKmpGBasawa7hDK7BGIiM1J7qR GgFx4P4XQ53g39a00xSszKWoFFOPTvGOR1I3jA6YensPDQNuWVyWuVzqGB25l6czZfVF jdgg== 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=Dj6p3QNrhR7RKNEPrgFlwQdj8r+IzeRDMOYrWdZXW1Y=; b=iaQuWYa7O2YGhRTFDzp9Hz9ho+ctMgTrptxyyz/LJfBe/2M4rXo4C2HCgpcLl1JyG9 yA2pc8pKOfyEdoVCGhBAK6hEqz1U99jhDZR5RyR/YaSgh1s3SqdRiWUifY52Tg5dlVTX IYVx/aWz/tdvQBhjPfH47Yf1p9dJYz0dIneRlI86IXQeDIrPpszW9S4/qD7yTmMQrET1 bVC30VsTUTvale/kEUAbBVbf9rxmh2AI1xj7mbZpz5vbiOZW0QazbijhIrA4K5k9b3O5 ooLub7HhAhoVsLStAXwQjDlVpu6B9U007lXHijUwXN9T3FK4X7gIZpISSER9/b7b2KT0 NFCg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.b=Z2LuuWUF; 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 c129si2091803qkf.312.2017.07.20.08.10.56 for (version=TLS1 cipher=AES128-SHA bits=128/128); Thu, 20 Jul 2017 08:10:56 -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.b=Z2LuuWUF; 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]:38492 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dYD6M-00012M-AP for patch@linaro.org; Thu, 20 Jul 2017 11:10:54 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53570) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dYD0X-0004TW-5m for qemu-devel@nongnu.org; Thu, 20 Jul 2017 11:04:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dYD0V-0007vg-Hc for qemu-devel@nongnu.org; Thu, 20 Jul 2017 11:04:53 -0400 Received: from mail-wr0-x231.google.com ([2a00:1450:400c:c0c::231]:36854) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dYD0V-0007uY-9f for qemu-devel@nongnu.org; Thu, 20 Jul 2017 11:04:51 -0400 Received: by mail-wr0-x231.google.com with SMTP id y43so71957817wrd.3 for ; Thu, 20 Jul 2017 08:04:51 -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=Dj6p3QNrhR7RKNEPrgFlwQdj8r+IzeRDMOYrWdZXW1Y=; b=Z2LuuWUFPDl11mi8+nIl0+DuSFtIvWG/V2u7KxFzTn+KhQo2wbxXxfRVo9UGeZZWky Yy08hIpFrwgSUYeD/BXh5N94mBrp0p+xe2jSbo+1wQeOEIRIPU7cDJ21X2TRc6UV/try NKSARWplzrkgTv1tS5kTUX+3xIBGRj9F5SNqY= 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=Dj6p3QNrhR7RKNEPrgFlwQdj8r+IzeRDMOYrWdZXW1Y=; b=Q3ljDBisUyQllm6jQmLR+9/CzbLQi1Ou6gx1Fd/kmM/emHmJU08ySZNuJaFfaSblyT +DYXQhwo4AX+wtq3MWnK14QP9DZR3m0xUaNYYybOCzm9HJRtDHj+0m3igt7gakRTO64H Al+y0IZzJ2J0fKFO2E3CYwvURNM8e5aCcWZrZahUlgKTS5ewHRmM7c1tgzRR5MpDRh46 ZI/dC1xUk/G9+tPzyD/DXR/4oJWgOUT3CRmMV/qEFhRK8x2vBvjSMtUW3QDM86RZA0/E aBkGUHa74jXmUHwRcfOnpWVTdoWEZ8efaCf05jG2Jpn2zhMtP73rMPOWYKd9gshadO1A QLOA== X-Gm-Message-State: AIVw112H3HRKEiqvQVGg3KcG/hrQwNTaYikGJjIjaww1cHn6OmOeX2gl 4upsWkddhwPqjY7z X-Received: by 10.223.162.207 with SMTP id t15mr1256492wra.151.1500563090201; Thu, 20 Jul 2017 08:04:50 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id q64sm2911488wmg.35.2017.07.20.08.04.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 20 Jul 2017 08:04:41 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id 3A0413E097D; Thu, 20 Jul 2017 16:04:33 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: peter.maydell@linaro.org Date: Thu, 20 Jul 2017 16:04:14 +0100 Message-Id: <20170720150426.12393-12-alex.bennee@linaro.org> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170720150426.12393-1-alex.bennee@linaro.org> References: <20170720150426.12393-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 for 2.11 11/23] 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: qemu-arm@nongnu.org, =?utf-8?q?Alex_Benn=C3=A9e?= , qemu-devel@nongnu.org, rth@twiddle.net 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.13.0 diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 68099fdb5e..c766829ff9 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -9709,6 +9709,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); + unsupported_encoding(s, insn); + } + + 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) { @@ -11117,6 +11192,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 } };