From patchwork Tue Feb 23 21:11: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: 8396031 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 8BE60C0553 for ; Tue, 23 Feb 2016 21:15:10 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id CAB36202C8 for ; Tue, 23 Feb 2016 21:15:09 +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 C1D5520279 for ; Tue, 23 Feb 2016 21:15:08 +0000 (UTC) Received: from localhost ([::1]:59924 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYKIW-0001MG-4F for patchwork-qemu-devel@patchwork.kernel.org; Tue, 23 Feb 2016 16:15:08 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51039) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYKGD-0006Js-QO for qemu-devel@nongnu.org; Tue, 23 Feb 2016 16:12:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aYKGC-0001NG-5T for qemu-devel@nongnu.org; Tue, 23 Feb 2016 16:12:45 -0500 Received: from mail-qg0-x232.google.com ([2607:f8b0:400d:c04::232]:36410) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYKGB-0001N7-90 for qemu-devel@nongnu.org; Tue, 23 Feb 2016 16:12:44 -0500 Received: by mail-qg0-x232.google.com with SMTP id y9so149000831qgd.3 for ; Tue, 23 Feb 2016 13:12:43 -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=fFITrrT/1PirRcgT6mjPnbWFC7su6Rxb7A5CB1KMTcQ=; b=nAOFB2H5+V1/aB76Ge8U5y7eTJQZsQ0veEGRWcifYj5FE3iQnfqi2Ws9/uTAXW8uPm mLlJgCuOeF/3M4Nga/nBsGgjicrMDUDon6KQwjJ+TEauNqdC3wqfiFSdkUetqP8u8H5f upQRAvwrOB/xfeYSMEJUE7KHBVaXBfvo96qlK5TIYikLST4qSpL7/7niFFYE1cn5EhQd s0ol9mtS9c2u9sHK53i9UE/1CbGmGRPSRUbBoZhBBfsdKDIPKCswFomKTxTvbOp26cFS fSc/jIsbLhJN7TMcDKOPNm0dUrEw79w5EetGN0ITAtJc96VWN7UCrwlCbDbAQjuBQJ6T Rh0A== 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=fFITrrT/1PirRcgT6mjPnbWFC7su6Rxb7A5CB1KMTcQ=; b=YlHPskiCu9NKy3doix7SJIsHimbd4DdTSaZJwgOU3/m5Clg33SwgxjT2N0pMuGP6Ht L0u4uUkkQeXAWeC9F7TTD/XUIHgz+zAPEOXwndbDNAT7WluoPao74Qzqewq1pAhv46uV zuRiceu9y7vY2dD47vsSnHNpnWDsjunr7KJsHpHI4xLt1+yHWbee0qwoUtgTtWha3BFy axfw94EsCMHnKR88WBJUBf44QwV1IG1rFSlX54rgCLxuIg08pVzncDIdYW7g81q8Fl1A m5Z5vaw4ChDkEufy1+PN91IsjzszVeOJu4wAQ906oYweo++swrOIVogcgSCOxhdulLKh Vt3g== X-Gm-Message-State: AG10YORI1ewy7JoQt+zBUWRjHJOR6leEBOyCZTEH7tck7ftQfv8XMa6RAAcqp6fCeWUvfA== X-Received: by 10.140.104.34 with SMTP id z31mr44571008qge.90.1456261962685; Tue, 23 Feb 2016 13:12:42 -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 200sm12775546qhm.47.2016.02.23.13.12.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 23 Feb 2016 13:12:42 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 23 Feb 2016 13:11:59 -0800 Message-Id: <1456261920-29900-24-git-send-email-rth@twiddle.net> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1456261920-29900-1-git-send-email-rth@twiddle.net> References: <1456261920-29900-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::232 Cc: mark.cave-ayland@ilande.co.uk, atar4qemu@gmail.com Subject: [Qemu-devel] [PATCH v2 23/24] target-sparc: Use cpu_loop_exit_restore from helper_check_ieee_exceptions 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 This avoids needing to save state before every FP operation. Signed-off-by: Richard Henderson --- target-sparc/fop_helper.c | 16 ++++++++++++---- target-sparc/translate.c | 6 +----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/target-sparc/fop_helper.c b/target-sparc/fop_helper.c index cdc58ea..02fbf86 100644 --- a/target-sparc/fop_helper.c +++ b/target-sparc/fop_helper.c @@ -24,7 +24,7 @@ #define QT0 (env->qt0) #define QT1 (env->qt1) -target_ulong helper_check_ieee_exceptions(CPUSPARCState *env) +static target_ulong do_check_ieee_exceptions(CPUSPARCState *env, uintptr_t ra) { target_ulong status = get_float_exception_flags(&env->fp_status); target_ulong fsr = env->fsr; @@ -51,12 +51,15 @@ target_ulong helper_check_ieee_exceptions(CPUSPARCState *env) } if ((fsr & FSR_CEXC_MASK) & ((fsr & FSR_TEM_MASK) >> 23)) { + CPUState *cs = CPU(sparc_env_get_cpu(env)); + /* Unmasked exception, generate a trap. Note that while the helper is marked as NO_WG, we can get away with writing to cpu state along the exception path, since TCG generated code will never see the write. */ env->fsr = fsr | FSR_FTT_IEEE_EXCP; - helper_raise_exception(env, TT_FP_EXCP); + cs->exception_index = TT_FP_EXCP; + cpu_loop_exit_restore(cs, ra); } else { /* Accumulate exceptions */ fsr |= (fsr & FSR_CEXC_MASK) << 5; @@ -66,6 +69,11 @@ target_ulong helper_check_ieee_exceptions(CPUSPARCState *env) return fsr; } +target_ulong helper_check_ieee_exceptions(CPUSPARCState *env) +{ + return do_check_ieee_exceptions(env, GETPC()); +} + #define F_HELPER(name, p) void helper_f##name##p(CPUSPARCState *env) #define F_BINOP(name) \ @@ -262,7 +270,7 @@ void helper_fsqrtq(CPUSPARCState *env) ret = glue(size, _compare_quiet)(reg1, reg2, \ &env->fp_status); \ } \ - fsr = helper_check_ieee_exceptions(env); \ + fsr = do_check_ieee_exceptions(env, GETPC()); \ switch (ret) { \ case float_relation_unordered: \ fsr |= (FSR_FCC1 | FSR_FCC0) << FS; \ @@ -293,7 +301,7 @@ void helper_fsqrtq(CPUSPARCState *env) ret = glue(size, _compare_quiet)(src1, src2, \ &env->fp_status); \ } \ - fsr = helper_check_ieee_exceptions(env); \ + fsr = do_check_ieee_exceptions(env, GETPC()); \ switch (ret) { \ case float_relation_unordered: \ fsr |= (FSR_FCC1 | FSR_FCC0) << FS; \ diff --git a/target-sparc/translate.c b/target-sparc/translate.c index 5874571..688594d 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -3423,7 +3423,7 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn) rs1 = GET_FIELD(insn, 13, 17); rs2 = GET_FIELD(insn, 27, 31); xop = GET_FIELD(insn, 18, 26); - save_state(dc); + switch (xop) { case 0x1: /* fmovs */ cpu_src1_32 = gen_load_fpr_F(dc, rs2); @@ -3598,7 +3598,6 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn) rs1 = GET_FIELD(insn, 13, 17); rs2 = GET_FIELD(insn, 27, 31); xop = GET_FIELD(insn, 18, 26); - save_state(dc); #ifdef TARGET_SPARC64 #define FMOVR(sz) \ @@ -5232,7 +5231,6 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn) if (gen_trap_ifnofpu(dc)) { goto jmp_insn; } - save_state(dc); switch (xop) { case 0x20: /* ldf, load fpreg */ gen_address_mask(dc, cpu_addr); @@ -5346,7 +5344,6 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn) if (gen_trap_ifnofpu(dc)) { goto jmp_insn; } - save_state(dc); switch (xop) { case 0x24: /* stf, store fpreg */ { @@ -5405,7 +5402,6 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn) goto illegal_insn; } } else if (xop > 0x33 && xop < 0x3f) { - save_state(dc); switch (xop) { #ifdef TARGET_SPARC64 case 0x34: /* V9 stfa */