From patchwork Tue Feb 23 18:33:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 8395471 Return-Path: X-Original-To: patchwork-qemu-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 402C8C0553 for ; Tue, 23 Feb 2016 18:37:42 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7950820306 for ; Tue, 23 Feb 2016 18:37:41 +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 A60AB202F0 for ; Tue, 23 Feb 2016 18:37:36 +0000 (UTC) Received: from localhost ([::1]:59265 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYHq4-0007Hf-45 for patchwork-qemu-devel@patchwork.kernel.org; Tue, 23 Feb 2016 13:37:36 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37566) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYHmQ-0001VR-0R for qemu-devel@nongnu.org; Tue, 23 Feb 2016 13:33:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aYHmP-0001KF-0S for qemu-devel@nongnu.org; Tue, 23 Feb 2016 13:33:49 -0500 Received: from mail-qg0-x22c.google.com ([2607:f8b0:400d:c04::22c]:35023) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYHmO-0001K7-Rb for qemu-devel@nongnu.org; Tue, 23 Feb 2016 13:33:48 -0500 Received: by mail-qg0-x22c.google.com with SMTP id y89so143203395qge.2 for ; Tue, 23 Feb 2016 10:33:48 -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=BcQBa6aOBkd+xl9i4RLNUvPWEGd+vmxZceYOfQObCd0=; b=yMGVyHtCv6FJ2gXFUIRyLAjQnvHH8S/8VeCMOeyQEeTgSkIyGt2FHnDikC9m1X1gY/ cufeen/iB89XIOmb/FqgzqeRLSIxP44j9IQ5d5n83R8Pkt7TNpZWxtoPh3Kj/I8cWG6i z43w9BsH2NWGcOPbi5WjyPkHkxnNll7jelozmul8/01ZBMF9j7khNews/xOVZ6ADZ0BD r1RijreyoZq6Bg+T0c2usABtcvlexd/qwfIL7QCahrkG9NphXb7UL3lZlm3GkjWLxGW2 KkfrCD3zoA6zBwEaezuNjVZA8SINF+ZubjT/GHjEGBMulJEUEyfJ4YeB8N/NhlwCgLkn aqtg== 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=BcQBa6aOBkd+xl9i4RLNUvPWEGd+vmxZceYOfQObCd0=; b=Paw0yy+LJOWLPWeEgnpyxVcwqzeSjp3DPLX+9QVp4RFyEZuPNCOwbeBG8jv1CJcMBv JtRkuH/2Spxki7+PHYVXU+IKkMq4daoFlNUZw+yAXaybMZieIWfJAdTFhzZS4kQGFR8u DX9uq3Nz9fqLrMbkAQLZQZbGJpdXKyanDMbwLu9OiVcGBa/LB4BEcau2/VbNUEpdISag FGvmUh+HzCB8nZTO5XO7ylchh1In3dVW7bHFheW4bMmBnpQ7HluQUVAVtwhRbaHFH+lI v7FZt8q3x1UU30Z+6hzvMNv7Hzu7Hy8m6o0i10w62EGC3CITEfyr7m//CIq2CUVHsiKi mmbw== X-Gm-Message-State: AG10YOT11SCqY8BAYEMpEZMqtLT0enFUptomxzWrz05y285IOTTUd9JMHzZpK1CxyaX/7w== X-Received: by 10.140.141.71 with SMTP id 68mr1544604qhn.82.1456252428406; Tue, 23 Feb 2016 10:33:48 -0800 (PST) Received: from anchor.com (50-194-63-110-static.hfc.comcastbusiness.net. [50.194.63.110]) by smtp.gmail.com with ESMTPSA id 3sm8920181qgy.43.2016.02.23.10.33.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 23 Feb 2016 10:33:47 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 23 Feb 2016 10:33:06 -0800 Message-Id: <1456252389-4416-6-git-send-email-rth@twiddle.net> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1456252389-4416-1-git-send-email-rth@twiddle.net> References: <1456252389-4416-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:400d:c04::22c Cc: peter.maydell@linaro.org Subject: [Qemu-devel] [PULL 5/8] target-sparc: Use global registers for the register window 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 Via indirection off cpu_regwptr. Tested-by: Mark Cave-Ayland Signed-off-by: Richard Henderson --- target-sparc/translate.c | 57 ++++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/target-sparc/translate.c b/target-sparc/translate.c index 4be56dd..00d61ee 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -43,7 +43,8 @@ static TCGv_ptr cpu_env, cpu_regwptr; static TCGv cpu_cc_src, cpu_cc_src2, cpu_cc_dst; static TCGv_i32 cpu_cc_op; static TCGv_i32 cpu_psr; -static TCGv cpu_fsr, cpu_pc, cpu_npc, cpu_gregs[8]; +static TCGv cpu_fsr, cpu_pc, cpu_npc; +static TCGv cpu_regs[32]; static TCGv cpu_y; #ifndef CONFIG_USER_ONLY static TCGv cpu_tbr; @@ -273,36 +274,31 @@ static inline void gen_address_mask(DisasContext *dc, TCGv addr) static inline TCGv gen_load_gpr(DisasContext *dc, int reg) { - if (reg == 0 || reg >= 8) { + if (reg > 0) { + assert(reg < 32); + return cpu_regs[reg]; + } else { TCGv t = get_temp_tl(dc); - if (reg == 0) { - tcg_gen_movi_tl(t, 0); - } else { - tcg_gen_ld_tl(t, cpu_regwptr, (reg - 8) * sizeof(target_ulong)); - } + tcg_gen_movi_tl(t, 0); return t; - } else { - return cpu_gregs[reg]; } } static inline void gen_store_gpr(DisasContext *dc, int reg, TCGv v) { if (reg > 0) { - if (reg < 8) { - tcg_gen_mov_tl(cpu_gregs[reg], v); - } else { - tcg_gen_st_tl(v, cpu_regwptr, (reg - 8) * sizeof(target_ulong)); - } + assert(reg < 32); + tcg_gen_mov_tl(cpu_regs[reg], v); } } static inline TCGv gen_dest_gpr(DisasContext *dc, int reg) { - if (reg == 0 || reg >= 8) { - return get_temp_tl(dc); + if (reg > 0) { + assert(reg < 32); + return cpu_regs[reg]; } else { - return cpu_gregs[reg]; + return get_temp_tl(dc); } } @@ -2158,9 +2154,13 @@ static inline void gen_ldda_asi(DisasContext *dc, TCGv hi, TCGv addr, tcg_temp_free_i32(r_size); tcg_temp_free_i32(r_asi); - t = gen_dest_gpr(dc, rd + 1); + /* ??? Work around an apparent bug in Ubuntu gcc 4.8.2-10ubuntu2+12, + whereby "rd + 1" elicits "error: array subscript is above array". + Since we have already asserted that rd is even, the semantics + are unchanged. */ + t = gen_dest_gpr(dc, rd | 1); tcg_gen_trunc_i64_tl(t, t64); - gen_store_gpr(dc, rd + 1, t); + gen_store_gpr(dc, rd | 1, t); tcg_gen_shri_i64(t64, t64, 32); tcg_gen_trunc_i64_tl(hi, t64); @@ -5330,8 +5330,11 @@ void gen_intermediate_code(CPUSPARCState * env, TranslationBlock * tb) void gen_intermediate_code_init(CPUSPARCState *env) { static int inited; - static const char gregnames[8][4] = { + static const char gregnames[32][4] = { "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7", + "o0", "o1", "o2", "o3", "o4", "o5", "o6", "o7", + "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7", + "i0", "i1", "i2", "i3", "i4", "i5", "i6", "i7", }; static const char fregnames[32][4] = { "f0", "f2", "f4", "f6", "f8", "f10", "f12", "f14", @@ -5401,11 +5404,17 @@ void gen_intermediate_code_init(CPUSPARCState *env) *rtl[i].ptr = tcg_global_mem_new(cpu_env, rtl[i].off, rtl[i].name); } - TCGV_UNUSED(cpu_gregs[0]); + TCGV_UNUSED(cpu_regs[0]); for (i = 1; i < 8; ++i) { - cpu_gregs[i] = tcg_global_mem_new(cpu_env, - offsetof(CPUSPARCState, gregs[i]), - gregnames[i]); + cpu_regs[i] = tcg_global_mem_new(cpu_env, + offsetof(CPUSPARCState, gregs[i]), + gregnames[i]); + } + + for (i = 8; i < 32; ++i) { + cpu_regs[i] = tcg_global_mem_new(cpu_regwptr, + (i - 8) * sizeof(target_ulong), + gregnames[i]); } for (i = 0; i < TARGET_DPREGS; i++) {