From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NVROX-0001pg-6U for qemu-devel@nongnu.org; Thu, 14 Jan 2010 10:13:57 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NVROW-0001ox-BY for qemu-devel@nongnu.org; Thu, 14 Jan 2010 10:13:56 -0500 Received: from [199.232.76.173] (port=55871 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NVROW-0001oq-2M for qemu-devel@nongnu.org; Thu, 14 Jan 2010 10:13:56 -0500 Received: from hall.aurel32.net ([88.191.82.174]:46866) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1NVROV-0002ql-Eh for qemu-devel@nongnu.org; Thu, 14 Jan 2010 10:13:55 -0500 Date: Thu, 14 Jan 2010 16:13:51 +0100 From: Aurelien Jarno Subject: Re: [Qemu-devel] [PATCH] PPC: Add wrapper for target long DCR operations Message-ID: <20100114151351.GC16630@volta.aurel32.net> References: <1262360466-25417-1-git-send-email-agraf@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <1262360466-25417-1-git-send-email-agraf@suse.de> 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 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. > #if !defined(CONFIG_USER_ONLY) > void helper_40x_rfci (void) > { > diff --git a/target-ppc/translate.c b/target-ppc/translate.c > index d4e81ce..d83d196 100644 > --- a/target-ppc/translate.c > +++ b/target-ppc/translate.c > @@ -5565,7 +5565,7 @@ static void gen_mfdcr(DisasContext *ctx) > /* NIP cannot be restored if the memory exception comes from an helper */ > gen_update_nip(ctx, ctx->nip - 4); > dcrn = tcg_const_tl(SPR(ctx->opcode)); > - gen_helper_load_dcr(cpu_gpr[rD(ctx->opcode)], dcrn); > + gen_helper_load_dcr_tl(cpu_gpr[rD(ctx->opcode)], dcrn); > tcg_temp_free(dcrn); > #endif > } > @@ -5584,7 +5584,7 @@ static void gen_mtdcr(DisasContext *ctx) > /* NIP cannot be restored if the memory exception comes from an helper */ > gen_update_nip(ctx, ctx->nip - 4); > dcrn = tcg_const_tl(SPR(ctx->opcode)); > - gen_helper_store_dcr(dcrn, cpu_gpr[rS(ctx->opcode)]); > + gen_helper_store_dcr_tl(dcrn, cpu_gpr[rS(ctx->opcode)]); > tcg_temp_free(dcrn); > #endif > } > @@ -5602,7 +5602,7 @@ static void gen_mfdcrx(DisasContext *ctx) > } > /* NIP cannot be restored if the memory exception comes from an helper */ > gen_update_nip(ctx, ctx->nip - 4); > - gen_helper_load_dcr(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]); > + gen_helper_load_dcr_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]); > /* Note: Rc update flag set leads to undefined state of Rc0 */ > #endif > } > @@ -5620,7 +5620,7 @@ static void gen_mtdcrx(DisasContext *ctx) > } > /* NIP cannot be restored if the memory exception comes from an helper */ > gen_update_nip(ctx, ctx->nip - 4); > - gen_helper_store_dcr(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]); > + gen_helper_store_dcr_tl(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]); > /* Note: Rc update flag set leads to undefined state of Rc0 */ > #endif > } > @@ -5630,7 +5630,7 @@ static void gen_mfdcrux(DisasContext *ctx) > { > /* NIP cannot be restored if the memory exception comes from an helper */ > gen_update_nip(ctx, ctx->nip - 4); > - gen_helper_load_dcr(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]); > + gen_helper_load_dcr_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]); > /* Note: Rc update flag set leads to undefined state of Rc0 */ > } > > @@ -5639,7 +5639,7 @@ static void gen_mtdcrux(DisasContext *ctx) > { > /* NIP cannot be restored if the memory exception comes from an helper */ > gen_update_nip(ctx, ctx->nip - 4); > - gen_helper_store_dcr(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]); > + gen_helper_store_dcr_tl(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]); > /* Note: Rc update flag set leads to undefined state of Rc0 */ > } > > -- > 1.6.0.2 > > > > -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurelien@aurel32.net http://www.aurel32.net