From patchwork Tue Feb 9 10:39:51 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 8259721 Return-Path: X-Original-To: patchwork-qemu-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 36AC19F8AA for ; Tue, 9 Feb 2016 10:44:15 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 2A70F20270 for ; Tue, 9 Feb 2016 10:44:14 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7727B20268 for ; Tue, 9 Feb 2016 10:44:13 +0000 (UTC) Received: from localhost ([::1]:54096 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aT5mG-0004H7-RF for patchwork-qemu-devel@patchwork.kernel.org; Tue, 09 Feb 2016 05:44:12 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46107) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aT5iZ-0006HL-2C for qemu-devel@nongnu.org; Tue, 09 Feb 2016 05:40:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aT5iW-0005Mt-B4 for qemu-devel@nongnu.org; Tue, 09 Feb 2016 05:40:23 -0500 Received: from mail-pf0-x242.google.com ([2607:f8b0:400e:c00::242]:35767) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aT5iW-0005Ml-4m for qemu-devel@nongnu.org; Tue, 09 Feb 2016 05:40:20 -0500 Received: by mail-pf0-x242.google.com with SMTP id 66so9830617pfe.2 for ; Tue, 09 Feb 2016 02:40:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=zg015ld51t9j8bnb9g9YFZy3tGlvwPh68u3Hz7c1zF4=; b=zyKboGX6gIYvbUxbitguent/FHFM7RUCL+Lj1jP0GmP3Xp/t7ZudXC/Tl9G5AVIGRF SAAOShiqa1asFqiygNU9Vp21AdMrMQexZeJJyT/UAa4JIU6uwfuFRpXW0Yd7fJ316OR5 EswT0JOr5xyW2UgvNNmf41cGsmo+r6/dOH3upj+oa99GfOR5bRFnfn0fw9b2uAHIwMqt f5FpLZkt6VQ8fFHkNuBbVO/8A/LFFzc0Vx+Btst0yB/M8UE94qzQWLjVt7iyTqG6r5vj D9E3I4OEKoJCJWgJ68qWc41Hh8GiBB6HQbgBT1b7LmqNIYEPiQtKI0uizv+/2B+/QCXp gKnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=zg015ld51t9j8bnb9g9YFZy3tGlvwPh68u3Hz7c1zF4=; b=eP/KaIK0AiuB30TPbmlO8IothwMtOZUE1rkRwQH7ijLiFVoqvPDB4fcT1aq5bfrMAS etWxujAAbn22Q+iwOvukfgZLckgsT1FtEYX54U0zQnbdc6oFsoNKSqM0KyqDvY+evlka vE/H6jx8Wk6M5mAvcEZhYK6ep31tUlNmkTHIP9W7VzRy7kgesY2xbNf3xhLaV2I26j2f jFvQ/yLi0GYlc0v8S5MF5ktWDFTpAPqvBiqDgVcTVZfdiFxq9GLV8jZ9XKFiC6j8+E+s eO2YRYViuuDrJA34Z0T38Top6NMHiwfqR3TeeRgFQfvI8USCQPvrOozILRqfBOzEEQH8 opSQ== X-Gm-Message-State: AG10YORvjSW5EdkkRdW9nqHe9QDrA6P1Z9jjjI6ZGWc9srciX2zL3Axb/IXsXBZjyZfOdw== X-Received: by 10.98.64.4 with SMTP id n4mr36313084pfa.58.1455014419442; Tue, 09 Feb 2016 02:40:19 -0800 (PST) Received: from bigtime.gateway (alanje.lnk.telstra.net. [120.151.179.201]) by smtp.gmail.com with ESMTPSA id 1sm49669183pfm.10.2016.02.09.02.40.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 Feb 2016 02:40:19 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 9 Feb 2016 21:39:51 +1100 Message-Id: <1455014403-10742-4-git-send-email-rth@twiddle.net> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1455014403-10742-1-git-send-email-rth@twiddle.net> References: <1455014403-10742-1-git-send-email-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:400e:c00::242 Cc: james.hogan@imgtec.com, aurelien@aurel32.net Subject: [Qemu-devel] [PATCH 03/15] tcg-mips: Adjust move functions for mips64 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Richard Henderson --- tcg/mips/tcg-target.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/tcg/mips/tcg-target.c b/tcg/mips/tcg-target.c index e56dbc6..43210c5 100644 --- a/tcg/mips/tcg-target.c +++ b/tcg/mips/tcg-target.c @@ -536,23 +536,39 @@ static inline void tcg_out_mov(TCGContext *s, TCGType type, { /* Simple reg-reg move, optimising out the 'do nothing' case */ if (ret != arg) { - tcg_out_opc_reg(s, OPC_ADDU, ret, arg, TCG_REG_ZERO); + tcg_out_opc_reg(s, OPC_OR, ret, arg, TCG_REG_ZERO); } } -static inline void tcg_out_movi(TCGContext *s, TCGType type, - TCGReg reg, tcg_target_long arg) +static void tcg_out_movi(TCGContext *s, TCGType type, + TCGReg ret, tcg_target_long arg) { + if (TCG_TARGET_REG_BITS == 64 && type == TCG_TYPE_I32) { + arg = (int32_t)arg; + } if (arg == (int16_t)arg) { - tcg_out_opc_imm(s, OPC_ADDIU, reg, TCG_REG_ZERO, arg); - } else if (arg == (uint16_t)arg) { - tcg_out_opc_imm(s, OPC_ORI, reg, TCG_REG_ZERO, arg); + tcg_out_opc_imm(s, OPC_ADDIU, ret, TCG_REG_ZERO, arg); + return; + } + if (arg == (uint16_t)arg) { + tcg_out_opc_imm(s, OPC_ORI, ret, TCG_REG_ZERO, arg); + return; + } + if (TCG_TARGET_REG_BITS == 32 || arg == (int32_t)arg) { + tcg_out_opc_imm(s, OPC_LUI, ret, TCG_REG_ZERO, arg >> 16); } else { - tcg_out_opc_imm(s, OPC_LUI, reg, TCG_REG_ZERO, arg >> 16); - if (arg & 0xffff) { - tcg_out_opc_imm(s, OPC_ORI, reg, reg, arg & 0xffff); + tcg_out_movi(s, TCG_TYPE_I32, ret, arg >> 31 >> 1); + if (arg & 0xffff0000ull) { + tcg_out_dsll(s, ret, ret, 16); + tcg_out_opc_imm(s, OPC_ORI, ret, ret, arg >> 16); + tcg_out_dsll(s, ret, ret, 16); + } else { + tcg_out_dsll(s, ret, ret, 32); } } + if (arg & 0xffff) { + tcg_out_opc_imm(s, OPC_ORI, ret, ret, arg & 0xffff); + } } static inline void tcg_out_bswap16(TCGContext *s, TCGReg ret, TCGReg arg)