From patchwork Mon Oct 10 15:16:59 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 9369611 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C91066048F for ; Mon, 10 Oct 2016 15:18:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B9B78285C3 for ; Mon, 10 Oct 2016 15:18:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AE9A729451; Mon, 10 Oct 2016 15:18:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 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.wl.linuxfoundation.org (Postfix) with ESMTPS id 488DD285C3 for ; Mon, 10 Oct 2016 15:18:05 +0000 (UTC) Received: from localhost ([::1]:50765 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btcL6-0007Mr-D1 for patchwork-qemu-devel@patchwork.kernel.org; Mon, 10 Oct 2016 11:18:04 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58081) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btcKQ-0007GL-I1 for qemu-devel@nongnu.org; Mon, 10 Oct 2016 11:17:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1btcKO-0001sP-I9 for qemu-devel@nongnu.org; Mon, 10 Oct 2016 11:17:21 -0400 Received: from mail-pa0-x241.google.com ([2607:f8b0:400e:c03::241]:36673) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btcKO-0001rn-CC for qemu-devel@nongnu.org; Mon, 10 Oct 2016 11:17:20 -0400 Received: by mail-pa0-x241.google.com with SMTP id rw4so2567129pab.3 for ; Mon, 10 Oct 2016 08:17:20 -0700 (PDT) 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=M7YxKHZjl7RJVaicHjqNIQcWF+c8RQ9ths67LVsh+Eg=; b=Vpk6VzvFeI1mSe3j5rTuHycTjp6azmpVeRxHm7/YJAPPZDzMZfnxhk+tC15yZ1FA/w Lvxlcv9gTF43ZuGwIJqVgUR4LYOp1U8oh9K60dZh1fzjlWBo72AK3IrRPHSKRXIUmF+S 56w91DGiXvi+venyUAX7/CjSQxvPyy18q7Pliqi2et+N9aSGuCkIrLRvSN5rMn+qWxb8 WPJRheZCSj52/VvgV40vqh/pAXWZaZgD/oKUUoioSLQj8S72sJykihZWCKFihkthmm60 aejGNa2tjWvtNJF5E7HpSUyY7Hc9EL/t+z7elts4ojrcrumGeltm3V+1h04UB8UXFoqp dJBw== 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=M7YxKHZjl7RJVaicHjqNIQcWF+c8RQ9ths67LVsh+Eg=; b=GQRiuLX+aljZXwhAci1U2YIKTsSE4fx1FhFQVEqcxrLHMB4p9OrxsgxJL6qk3V5RBm qiTTLfwr7ZvxoL3Vabcft8CskhwoeFJQ5Nzuco/TNLlPdKasfpNFGkcHg0ndCVVYfj8S TmXwA7mmd3Sn+wHVWfURRWbL9V//+ysQgsrRdvJezkVYIU/YQ1y0RCjdv3FtLQJlHi/F nxtJdXWrXDQ+FdWUdLcmBWBGeOx+pLsUYvdqfkHpRCChKdtT6N47kTSb8jn6oQQqwuCy GgzHrDhrAH8q1GuRnXEEn841Hs6/xmTRpwB1g6k6JIjwTiruvYT7GwuNFaoNw8T4cL8i YVAA== X-Gm-Message-State: AA6/9Rn5iDiT29HPP8elGhm+PI68GI8KajU6ij+noY+mj2qqR3foU3HCM/M2yLrtszlH6Q== X-Received: by 10.66.185.133 with SMTP id fc5mr55141869pac.71.1476112639858; Mon, 10 Oct 2016 08:17:19 -0700 (PDT) Received: from bigtime.twiddle.net ([187.217.227.243]) by smtp.gmail.com with ESMTPSA id i4sm59618259pav.27.2016.10.10.08.17.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 10 Oct 2016 08:17:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Mon, 10 Oct 2016 10:16:59 -0500 Message-Id: <1476112628-12241-8-git-send-email-rth@twiddle.net> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1476112628-12241-1-git-send-email-rth@twiddle.net> References: <1476112628-12241-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:c03::241 Subject: [Qemu-devel] [PATCH 07/16] target-sparc: Implement ldstub_asi inline 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: mark.cave-ayland@ilande.co.uk, atar4qemu@gmail.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Richard Henderson --- target-sparc/translate.c | 52 +++++++++++++++++++----------------------------- 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/target-sparc/translate.c b/target-sparc/translate.c index 8cd8bb6..8d879a9 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -2013,6 +2013,20 @@ static void gen_swap(DisasContext *dc, TCGv dst, TCGv src, tcg_temp_free(t0); } +static void gen_ldstub(DisasContext *dc, TCGv dst, TCGv addr, int mmu_idx) +{ + /* ??? Should be atomic. */ + TCGv_i32 t0 = tcg_temp_new_i32(); + TCGv_i32 t1 = tcg_const_i32(0xff); + + gen_address_mask(dc, addr); + tcg_gen_qemu_ld_i32(t0, addr, mmu_idx, MO_UB); + tcg_gen_qemu_st_i32(t1, addr, mmu_idx, MO_UB); + tcg_gen_extu_i32_tl(dst, t0); + tcg_temp_free_i32(t0); + tcg_temp_free_i32(t1); +} + /* asi moves */ #if !defined(CONFIG_USER_ONLY) || defined(TARGET_SPARC64) typedef enum { @@ -2351,25 +2365,12 @@ static void gen_ldstub_asi(DisasContext *dc, TCGv dst, TCGv addr, int insn) switch (da.type) { case GET_ASI_EXCP: break; + case GET_ASI_DIRECT: + gen_ldstub(dc, dst, addr, da.mem_idx); + break; default: - { - TCGv_i32 r_asi = tcg_const_i32(da.asi); - TCGv_i32 r_mop = tcg_const_i32(MO_UB); - TCGv_i64 s64, t64; - - save_state(dc); - t64 = tcg_temp_new_i64(); - gen_helper_ld_asi(t64, cpu_env, addr, r_asi, r_mop); - - s64 = tcg_const_i64(0xff); - gen_helper_st_asi(cpu_env, addr, s64, r_asi, r_mop); - tcg_temp_free_i64(s64); - tcg_temp_free_i32(r_mop); - tcg_temp_free_i32(r_asi); - - tcg_gen_trunc_i64_tl(dst, t64); - tcg_temp_free_i64(t64); - } + /* ??? Should be DAE_invalid_asi. */ + gen_exception(dc, TT_DATA_ACCESS); break; } } @@ -5189,19 +5190,8 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn) gen_address_mask(dc, cpu_addr); tcg_gen_qemu_ld16s(cpu_val, cpu_addr, dc->mem_idx); break; - case 0xd: /* ldstub -- XXX: should be atomically */ - { - TCGv r_const; - TCGv tmp = tcg_temp_new(); - - gen_address_mask(dc, cpu_addr); - tcg_gen_qemu_ld8u(tmp, cpu_addr, dc->mem_idx); - r_const = tcg_const_tl(0xff); - tcg_gen_qemu_st8(r_const, cpu_addr, dc->mem_idx); - tcg_gen_mov_tl(cpu_val, tmp); - tcg_temp_free(r_const); - tcg_temp_free(tmp); - } + case 0xd: /* ldstub */ + gen_ldstub(dc, cpu_val, cpu_addr, dc->mem_idx); break; case 0x0f: /* swap, swap register with memory. Also atomically */