> >> -----Original Message-----
> >> From: Richard Henderson <richard.hender...@linaro.org>
> >> Sent: Sunday, August 30, 2020 3:13 PM
> >> To: Taylor Simpson <tsimp...@quicinc.com>; qemu-devel@nongnu.org
> >> Cc: phi...@redhat.com; laur...@vivier.eu; riku.voi...@iki.fi;
> >> aleksandar.m.m...@gmail.com; a...@rev.ng
> >> Subject: Re: [RFC PATCH v3 30/34] Hexagon (target/hexagon) TCG for
> >> instructions with multiple definitions
> >>
> >> On 8/30/20 12:48 PM, Taylor Simpson wrote:
> >>> I'll add the following comment to indicate what's going on
> >>>
> >>> /*
> >>>   * Each of the generated helpers is wrapped with #ifndef
> >> fGEN_TCG_<tag>.
> >>>   * For example
> >>>    *     #ifndef fGEN_TCG_A2_add
> >>>    *     DEF_HELPER_3(A2_add, s32, env, s32, s32)
> >>>    *     #endif
> >>>   * We include gen_tcg.h here to provide definitions of fGEN_TCG for
> any
> >> instructions that
> >>>   * are overridden.
> >>>   *
> >>>   * This prevents unused helpers from taking up space in the executable.
> >>>   */
> >>
> >> Ah, hum.  Well.
> >>
> >> How about we figure out a way to communicate to the generator scripts
> >> which
> >> functions have been implemented "directly", and don't need to be
> >> generated at all?
> >>
> >> I don't see why we have to wait until the c preprocessor to remove this
> >> unused
> >> code, and the less we have of it, the better.
> >>
> >
> > A few reasons
> > - Makes it easy to override instruction helpers.  All one has to do is 
> > #define
> fGEN_TCG_<tag>.
>
> If the generator can examine, say, genptr_override.c.inc, then you don't
> even
> have to add a #define.  Just add the code.
>
> Perhaps something like
>
> DEFINE_FGEN(tag)
> {
>     // some code
> }
>
> where DEFINE_FGEN expands to the appropriate function declaration.  The
> generator then need only grep '^DEFINE_FGEN' and extract the list of
> overridden
> tags.
>
>
> > - When debugging the override, sometimes you want to quickly revert back
> to the helper.  Or if you've written a bunch of overrides in one shot and then
> find that a test case is failing, you can binary search which one to turn off 
> and
> get the test to pass.  This is the one with the bug to fix.
>
> No difference there, just binary searching on different text.
>
> > - Reduces time for an incremental build.  When we add or delete an
> override, we don't have to re-run the generator.
>
> About this I care not at all.  I can't imagine that more than fractions of a
> second are at stake.

I can modify the generator to skip instructions with overrides.

There are some assumptions here I'd like to clarify.  When I started this 
discussion, there seemed to be general resistance to the concept of a 
generator.  Because of this, I made the generator as simple as possible and 
pushed the complexity and optimization into code that consumes the output of 
the generator.  Also, I assumed people wouldn't read the output of the 
generator, so I didn't focus on making it readable.

Now, it sounds like my assumptions were not correct.  You pointed out two 
things to do in the generator
- Expand the macros inline
- Skip the instructions that have overrides
I addition, there other things I should do if we want the generated files to be 
more readable
- Indent the code
- Only generate one of the fGEN_TCG_<tag> or gen_helper_<tag>
- Generate the declaration of the generate_<tag> function instead of just the 
body

Thoughts?

Thanks,
Taylor

Reply via email to