From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54560) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wk9AK-0007km-NI for qemu-devel@nongnu.org; Tue, 13 May 2014 05:38:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Wk9AC-00009F-Vw for qemu-devel@nongnu.org; Tue, 13 May 2014 05:38:28 -0400 Received: from static.88-198-71-155.clients.your-server.de ([88.198.71.155]:33008 helo=socrates.bennee.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wk9AC-000091-Po for qemu-devel@nongnu.org; Tue, 13 May 2014 05:38:20 -0400 References: <1399938424-6703-1-git-send-email-rth@twiddle.net> <1399938424-6703-9-git-send-email-rth@twiddle.net> From: Alex =?utf-8?Q?Benn=C3=A9e?= In-reply-to: <1399938424-6703-9-git-send-email-rth@twiddle.net> Date: Tue, 13 May 2014 10:38:29 +0100 Message-ID: <87y4y66msq.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH 08/10] tcg: Save flags and computed sizemask in TCGHelperInfo List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Richard Henderson Cc: qemu-devel@nongnu.org, aurelien@aurel32.net Richard Henderson writes: > Signed-off-by: Richard Henderson > --- > +#define DEF_HELPER_FLAGS_0(NAME, FLAGS, ret) \ > + { .func = HELPER(NAME), .name = #NAME, .flags = FLAGS, \ > + .sizemask = dh_sizemask(ret, 0) }, > + > +#define DEF_HELPER_FLAGS_1(NAME, FLAGS, ret, t1) \ > + { .func = HELPER(NAME), .name = #NAME, .flags = FLAGS, \ > + .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) }, > + > +#define DEF_HELPER_FLAGS_2(NAME, FLAGS, ret, t1, t2) \ > + { .func = HELPER(NAME), .name = #NAME, .flags = FLAGS, \ > + .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) \ > + | dh_sizemask(t2, 2) }, > + > +#define DEF_HELPER_FLAGS_3(NAME, FLAGS, ret, t1, t2, t3) \ > + { .func = HELPER(NAME), .name = #NAME, .flags = FLAGS, \ > + .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) \ > + | dh_sizemask(t2, 2) | dh_sizemask(t3, 3) }, > + > +#define DEF_HELPER_FLAGS_4(NAME, FLAGS, ret, t1, t2, t3, t4) \ > + { .func = HELPER(NAME), .name = #NAME, .flags = FLAGS, \ > + .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) \ > + | dh_sizemask(t2, 2) | dh_sizemask(t3, 3) | dh_sizemask(t4, 4) }, > + > +#define DEF_HELPER_FLAGS_5(NAME, FLAGS, ret, t1, t2, t3, t4, t5) \ > + { .func = HELPER(NAME), .name = #NAME, .flags = FLAGS, \ > + .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) \ > + | dh_sizemask(t2, 2) | dh_sizemask(t3, 3) | dh_sizemask(t4, 4) \ > + | dh_sizemask(t5, 5) }, I'll come back to this when I understand the sizemask stuff better. > > #include "helper.h" > #include "tcg-runtime.h" > diff --git a/tcg/tcg.c b/tcg/tcg.c > index 3bbf982..d71a9bf 100644 > --- a/tcg/tcg.c > +++ b/tcg/tcg.c > @@ -310,6 +310,8 @@ void tcg_pool_reset(TCGContext *s) > typedef struct TCGHelperInfo { > void *func; > const char *name; > + unsigned flags; > + unsigned sizemask; > } TCGHelperInfo; > > #include "exec/helper-proto.h" > @@ -696,6 +698,11 @@ void tcg_gen_callN(TCGContext *s, void *func, unsigned int flags, > int real_args; > int nb_rets; > TCGArg *nparam; > + TCGHelperInfo *info; > + > + info = g_hash_table_lookup(s->helpers, (gpointer)func); > + assert(info != NULL); > + assert(info->sizemask == sizemask); I assume g_assert vs assert is purely cosmetic? QEMU seems inconsistent at best about this :-/ > > #if defined(__sparc__) && !defined(__arch64__) \ > && !defined(CONFIG_TCG_INTERPRETER) -- Alex Bennée