From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LHFdU-00084y-T3 for qemu-devel@nongnu.org; Mon, 29 Dec 2008 05:46:12 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LHFdS-00084m-DX for qemu-devel@nongnu.org; Mon, 29 Dec 2008 05:46:11 -0500 Received: from [199.232.76.173] (port=47451 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LHFdS-00084j-6U for qemu-devel@nongnu.org; Mon, 29 Dec 2008 05:46:10 -0500 Received: from bart.se.axis.com ([195.60.68.10]:52690) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LHFdR-0006lu-PB for qemu-devel@nongnu.org; Mon, 29 Dec 2008 05:46:09 -0500 Received: from bart.se.axis.com (bart.se.axis.com [127.0.0.1]) by bart.se.axis.com (Postfix) with ESMTP id 0208A63FB5 for ; Mon, 29 Dec 2008 11:46:08 +0100 (CET) Received: from axis.com (edgar.se.axis.com [10.93.151.1]) by bart.se.axis.com (Postfix) with ESMTP id D872B63FA5 for ; Mon, 29 Dec 2008 11:46:07 +0100 (CET) Date: Mon, 29 Dec 2008 11:46:07 +0100 From: "Edgar E. Iglesias" Subject: Re: [Qemu-devel] User mode emulation and TCG_OPF_CALL_CLOBBER Message-ID: <20081229104607.GA14024@edgar.se.axis.com> References: <761ea48b0812260632u2d25f2c7i86c27911c4e9cb2b@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <761ea48b0812260632u2d25f2c7i86c27911c4e9cb2b@mail.gmail.com> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Laurent Desnogues Cc: qemu-devel@nongnu.org On Fri, Dec 26, 2008 at 03:32:06PM +0100, Laurent Desnogues wrote: > Hello, > > while looking at generated code for a user mode emulated program > I noticed some registers were saved/restored for qemu_{ld,st} > operations. My understanding is that this is only needed for softmmu > (and even in that case for the slow path as a comment in tcg.c says) > since in that case, a call to a helper might be generated. > > This register save & restore behavior is enabled by the op flag > TCG_OPF_CALL_CLOBBER. > > A quick test on ARM target and x86_64 host for a SPEC2000 test > shows removing that flag speeds up execution by about 15%. > > Did I understand things correctly? If so what would be the best Hello Laurent, I think you did and I think what you propose kind of makes sense but unfortunately your patch exposes errors on my setup. The i386 backend's ld64 seems to clobber registers (eax/edx) behind tcg's back and with your patch at least CRIS no longer passes it's testsuite on i386 hosts. (Actually, I can't see how the plain tcg_gen_ld_i64 can work reliably with the i386 backend from svn.) Anyway, I made a dirty local fix for the ld64 issue and I am seeing about 5% performance improvements with my tests. Another issue I'm worried about is when apps segfault, I think there is a risk that part of the CPUState remains in host registers making programs much harder to debug. I'd very much like to see the speedup but IMO we should first fix these issues. Thanks