From patchwork Thu Aug 17 18:03:58 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: 110337 Delivered-To: patch@linaro.org Received: by 10.140.95.78 with SMTP id h72csp2524751qge; Thu, 17 Aug 2017 11:09:46 -0700 (PDT) X-Received: by 10.55.108.3 with SMTP id h3mr8073718qkc.17.1502993386594; Thu, 17 Aug 2017 11:09:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1502993386; cv=none; d=google.com; s=arc-20160816; b=VIc49tVB5Sn9JxCpd2uWzYBT2Za/1mNYP8zAFBeySPz4j1D/IXFw/jP/QkS+J1KNyk 8lEaPdrPOSxstqQlii0YMZzIy5YhjULQGYXVC6fKcen+PQpIJKiU424YSlrrdJlGvQcN 0cOTNAZtlYQeuNvxXP7uttmTB+27o1ADC+X/gx7q1mWe8VcKXsYuw1pcmSzyeblpiy4L nzdOHwtXUYbxArif21k9sYnB5NS62derAt0Aou/if7rFo9r4tFHa7ye/pBdtn6JPkYr8 h4V0RKPmQW6Tf40vITXUIlqvN7bxoYT1x3qx6fgBuYwhRxrXxHA40wLyxItuLTwddSeD xNUw== 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=MB+PXXB6umsS0QP7qT6V2jBQgssQbx5IiHKDlGxcoXY=; b=wIkbf1z/msSbvqisWjsXqUkpoidTMsDD+aM0hpUVn2L/UQHHvyq0wABOz8fMj9pvrD 0dZfY+2XHgIvXXbexKPx+MY1DeYWem4vhCfhcIS55ldbo6KOlrBV8Z587ZHlVjsZS6jf 0Lrw/51X4zNvnAm6HZ6ThHcPy6S0ZkTIN22UClmsM+qh3MKwsVJFYP50/uITSi3cXGOk sdn+WXOuDKAV/JUz7JpB7sX7rKzwVh5ERQc7UASF+lk9n1sbl4hOgvHJo5MJ+oxXn9kU PO44QRHP5mBdz0P7YA6bSb2v0zrTpqmypOmfeTn2/f8n+9hdSDHvpplMlyQxk7V5L/sD oDww== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=U56+y9+x; 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 s92si3422895qtd.450.2017.08.17.11.09.46 for (version=TLS1 cipher=AES128-SHA bits=128/128); Thu, 17 Aug 2017 11:09:46 -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=U56+y9+x; 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]:38553 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1diPEm-0008BS-Cr for patch@linaro.org; Thu, 17 Aug 2017 14:09:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37478) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1diP9S-00043O-Sb for qemu-devel@nongnu.org; Thu, 17 Aug 2017 14:04:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1diP9N-0005GW-6J for qemu-devel@nongnu.org; Thu, 17 Aug 2017 14:04:14 -0400 Received: from mail-wr0-x22e.google.com ([2a00:1450:400c:c0c::22e]:35769) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1diP9N-0005Fc-0L for qemu-devel@nongnu.org; Thu, 17 Aug 2017 14:04:09 -0400 Received: by mail-wr0-x22e.google.com with SMTP id 49so41956846wrw.2 for ; Thu, 17 Aug 2017 11:04:08 -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=MB+PXXB6umsS0QP7qT6V2jBQgssQbx5IiHKDlGxcoXY=; b=U56+y9+xFluDLG7d5k07kN+g1t49cBqCNAXuEMw4FKJevuSbL85oMcz2gMPiDU7x77 N6EMhwiamfYJ+3OWT7B38PB4oONlpqKpU0jKymjMSMWXLyFAY4dUmkA21/Dq3hOxXTjE B2GF4Vd4RkVBAVqNDQHZKrK/CkLcUO7hsG1zk= 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=MB+PXXB6umsS0QP7qT6V2jBQgssQbx5IiHKDlGxcoXY=; b=CG2Kj4BmEH4f3OB3/UvesR2sHySgGcpLAdut3NHW40OCxECyy9fIvefLyvQrT+OfZb 2XXyYeVR6cxnUj+oKB6zX3bRbQ2u7VAYcQ3o+0Gd+SU3krFQ7Exr4EUTBvH11CGgImPT M9Obv8BF0ua2q3npirZI6J8Nc5ryQrLfMCf1d5d02frcCJXX9h4S6pw6BXmsnPpRinWj dWM+AjFZ9Ark5qPgJ6ImKGN/3XB2H3g8vOzKE09FCvNNQ/I81mGhdTyeTt9F6gy4AFrd AoyU38d16PPqUUJCo5q2vV05Pr23LMERs3gfoz2AfT1REw+NSEjwWmEPLp+8HE28J6ie DSYw== X-Gm-Message-State: AHYfb5jcwC7XBl44zmUYZKlbUbbO2bG6gTW/KZhjRqyk4oB8y7ZLzKWA hKfMif+MjenDzsfd X-Received: by 10.28.61.4 with SMTP id k4mr1697194wma.148.1502993047872; Thu, 17 Aug 2017 11:04:07 -0700 (PDT) Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id f9sm3909910wmf.18.2017.08.17.11.04.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 Aug 2017 11:04:05 -0700 (PDT) Received: from zen.linaroharston (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTP id B377E3E11D6; Thu, 17 Aug 2017 19:04:04 +0100 (BST) From: =?utf-8?q?Alex_Benn=C3=A9e?= To: rth@twiddle.net, cota@braap.org, batuzovk@ispras.ru Date: Thu, 17 Aug 2017 19:03:58 +0100 Message-Id: <20170817180404.29334-4-alex.bennee@linaro.org> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170817180404.29334-1-alex.bennee@linaro.org> References: <20170817180404.29334-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::22e Subject: [Qemu-devel] [RFC PATCH 3/9] tcg: generate ptrs to vector registers 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 Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" As we operate directly on the vectors in memory we pass around the address for TCG_TYPE_VECTOR. Currently only helpers ever see these values but if we were to generate simd backend instructions they would load directly from the backing store. We also need to ensure when copying from one temp register to the other the right size is used. Signed-off-by: Alex Bennée --- tcg/tcg.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) -- 2.13.0 diff --git a/tcg/tcg.c b/tcg/tcg.c index 35598296c5..e16811d68d 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -2034,7 +2034,21 @@ static void temp_load(TCGContext *s, TCGTemp *ts, TCGRegSet desired_regs, break; case TEMP_VAL_MEM: reg = tcg_reg_alloc(s, desired_regs, allocated_regs, ts->indirect_base); - tcg_out_ld(s, ts->type, reg, ts->mem_base->reg, ts->mem_offset); + if (ts->type == TCG_TYPE_VECTOR) { + /* Vector registers are ptr's to the memory representation */ + TCGArg args[TCG_MAX_OP_ARGS]; + int const_args[TCG_MAX_OP_ARGS]; + args[0] = reg; + args[1] = ts->mem_base->reg; + args[2] = ts->mem_offset; + const_args[0] = 0; + const_args[1] = 0; + const_args[2] = 1; + /* FIXME: needs to by host_ptr centric */ + tcg_out_op(s, INDEX_op_add_i64, args, const_args); + } else { + tcg_out_ld(s, ts->type, reg, ts->mem_base->reg, ts->mem_offset); + } ts->mem_coherent = 1; break; case TEMP_VAL_DEAD: @@ -2196,6 +2210,10 @@ static void tcg_reg_alloc_mov(TCGContext *s, const TCGOpDef *def, ots->reg = tcg_reg_alloc(s, tcg_target_available_regs[otype], allocated_regs, ots->indirect_base); } + /* For the purposes of moving stuff about it is a host ptr */ + if (otype == TCG_TYPE_VECTOR) { + otype = TCG_TYPE_PTR; + } tcg_out_mov(s, otype, ots->reg, ts->reg); } ots->val_type = TEMP_VAL_REG; @@ -2440,7 +2458,11 @@ static void tcg_reg_alloc_call(TCGContext *s, int nb_oargs, int nb_iargs, if (ts->val_type == TEMP_VAL_REG) { if (ts->reg != reg) { - tcg_out_mov(s, ts->type, reg, ts->reg); + if (ts->type == TCG_TYPE_VECTOR) { + tcg_out_mov(s, TCG_TYPE_PTR, reg, ts->reg); + } else { + tcg_out_mov(s, ts->type, reg, ts->reg); + } } } else { TCGRegSet arg_set;