From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NdnJj-0002hf-OD for qemu-devel@nongnu.org; Sat, 06 Feb 2010 11:15:31 -0500 Received: from [199.232.76.173] (port=53546 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NdnJj-0002hW-8G for qemu-devel@nongnu.org; Sat, 06 Feb 2010 11:15:31 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1NdnJh-0004hY-3I for qemu-devel@nongnu.org; Sat, 06 Feb 2010 11:15:31 -0500 Received: from hall.aurel32.net ([88.191.82.174]:38912) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NdnJg-0004hE-L2 for qemu-devel@nongnu.org; Sat, 06 Feb 2010 11:15:28 -0500 Date: Sat, 6 Feb 2010 17:15:26 +0100 From: Aurelien Jarno Subject: Re: [Qemu-devel] [PATCH] PPC: Add wrapper for target long DCR operations Message-ID: <20100206161526.GD11050@volta.aurel32.net> References: <1262360466-25417-1-git-send-email-agraf@suse.de> <20100114151351.GC16630@volta.aurel32.net> <1095D71B-8F96-4270-A4AC-AC3C28BE055C@suse.de> <20100114170204.GG16630@volta.aurel32.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexander Graf Cc: qemu-devel@nongnu.org On Thu, Jan 14, 2010 at 06:04:25PM +0100, Alexander Graf wrote: > > On 14.01.2010, at 18:02, Aurelien Jarno wrote: > > > On Thu, Jan 14, 2010 at 04:19:31PM +0100, Alexander Graf wrote: > >> > >> On 14.01.2010, at 16:13, Aurelien Jarno wrote: > >> > >>> On Fri, Jan 01, 2010 at 04:41:06PM +0100, Alexander Graf wrote: > >>>> The recent transition to always have the DCR helper functions take 32 bit > >>>> values broke the PPC64 target, as tlong became 64 bits there. > >>>> > >>>> This patch moves all translate.c callers to a _tl function that simply > >>>> calls the uint32_t functions. That way we don't need to mess with TCG > >>>> trying to pass registers as uint32_t variables to functions. > >>>> > >>>> Fixes PPC64 build with --enable-debug-tcg > >>>> > >>>> Signed-off-by: Alexander Graf > >>>> Reported-by: Stefan Weil > >>>> --- > >>>> target-ppc/cpu.h | 2 ++ > >>>> target-ppc/helper.h | 4 ++-- > >>>> target-ppc/op_helper.c | 10 ++++++++++ > >>>> target-ppc/translate.c | 12 ++++++------ > >>>> 4 files changed, 20 insertions(+), 8 deletions(-) > >>>> > >>>> diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h > >>>> index d15bba1..60a8b68 100644 > >>>> --- a/target-ppc/cpu.h > >>>> +++ b/target-ppc/cpu.h > >>>> @@ -733,6 +733,8 @@ void ppc_store_slb (CPUPPCState *env, target_ulong rb, target_ulong rs); > >>>> void ppc_store_sr (CPUPPCState *env, int srnum, target_ulong value); > >>>> #endif /* !defined(CONFIG_USER_ONLY) */ > >>>> void ppc_store_msr (CPUPPCState *env, target_ulong value); > >>>> +void helper_store_dcr (uint32_t dcrn, uint32_t val); > >>>> +uint32_t helper_load_dcr (uint32_t dcrn); > >>>> > >>>> void ppc_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...)); > >>>> > >>>> diff --git a/target-ppc/helper.h b/target-ppc/helper.h > >>>> index 40d4ced..86f0af7 100644 > >>>> --- a/target-ppc/helper.h > >>>> +++ b/target-ppc/helper.h > >>>> @@ -359,8 +359,8 @@ DEF_HELPER_2(divo, tl, tl, tl) > >>>> DEF_HELPER_2(divs, tl, tl, tl) > >>>> DEF_HELPER_2(divso, tl, tl, tl) > >>>> > >>>> -DEF_HELPER_1(load_dcr, i32, i32); > >>>> -DEF_HELPER_2(store_dcr, void, i32, i32) > >>>> +DEF_HELPER_1(load_dcr_tl, tl, tl); > >>>> +DEF_HELPER_2(store_dcr_tl, void, tl, tl) > >>>> > >>>> DEF_HELPER_1(load_dump_spr, void, i32) > >>>> DEF_HELPER_1(store_dump_spr, void, i32) > >>>> diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c > >>>> index cea27f2..6c375d3 100644 > >>>> --- a/target-ppc/op_helper.c > >>>> +++ b/target-ppc/op_helper.c > >>>> @@ -1844,6 +1844,11 @@ uint32_t helper_load_dcr (uint32_t dcrn) > >>>> return val; > >>>> } > >>>> > >>>> +target_ulong helper_load_dcr_tl (target_ulong dcrn) > >>>> +{ > >>>> + return (uint32_t)helper_load_dcr((uint32_t)dcrn); > >>>> +} > >>>> + > >>>> void helper_store_dcr (uint32_t dcrn, uint32_t val) > >>>> { > >>>> if (unlikely(env->dcr_env == NULL)) { > >>>> @@ -1857,6 +1862,11 @@ void helper_store_dcr (uint32_t dcrn, uint32_t val) > >>>> } > >>>> } > >>>> > >>>> +void helper_store_dcr_tl (target_ulong dcrn, target_ulong val) > >>>> +{ > >>>> + helper_store_dcr((uint32_t)dcrn, (uint32_t)val); > >>>> +} > >>>> + > >>> > >>> I do wonder why we need to keep the old helper_load_dcr() and > >>> helper_store_dcr() instead of modifying them directly. They doesn't seems > >>> to be used elsewhere. > >> > >> Last time I checked they were used in hw/*ppc*.c. Maybe mangled through funny preprocessor or function callback logic. But maybe I'm wrong :). > >> > > > > I am not able to find them. I have tried to remove helper_load_dcr() and > > helper_store_dcr() from target-ppc/cpu.h and the code still compiles. > > Hm, right. The only references are to ppc_dcr_read and ppc_dcr_write. I guess the other helpers are superfluous then. > I have applied a patch to fix the problem. -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurelien@aurel32.net http://www.aurel32.net