> -----Original Message----- > From: Richard Henderson <richard.hender...@linaro.org> > Sent: Friday, August 28, 2020 6:49 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 25/34] Hexagon (target/hexagon) macros to > interface with the generator > > On 8/18/20 8:50 AM, Taylor Simpson wrote: > > +#define DECL_REG(NAME, NUM, X, OFF) \ > > + TCGv NAME = tcg_temp_local_new(); \ > > + int NUM = REGNO(X) + OFF > > + > > +#define DECL_REG_WRITABLE(NAME, NUM, X, OFF) \ > > + TCGv NAME = tcg_temp_local_new(); \ > > + int NUM = REGNO(X) + OFF; \ > > + do { \ > > + int is_predicated = GET_ATTRIB(insn->opcode, A_CONDEXEC); \ > > + if (is_predicated && !is_preloaded(ctx, NUM)) { \ > > + tcg_gen_mov_tl(hex_new_value[NUM], hex_gpr[NUM]); \ > > + } \ > > + } while (0) > > +/* > > + * For read-only temps, avoid allocating and freeing > > + */ > > +#define DECL_REG_READONLY(NAME, NUM, X, OFF) \ > > + TCGv NAME; \ > > + int NUM = REGNO(X) + OFF > > + > > +#define DECL_RREG_d(NAME, NUM, X, OFF) \ > > + DECL_REG_WRITABLE(NAME, NUM, X, OFF) > > +#define DECL_RREG_e(NAME, NUM, X, OFF) \ > > + DECL_REG(NAME, NUM, X, OFF) > > Is there a good reason for all these macros? > Why not just bake this knowledge into gen_tcg_funcs.py? > Seems like it would be just a couple of functions... > > At present, both this and the intermediary files are unreadable. One has to > pass genptr.c through -E and indent to see what's going on.
I add the regid (see comment in hex_common.py) in order to reduce the number of TCGv temps and TCG code we generate. I originally had a single DEF/READ/WRITE/FREE set. We would always create a TCGv and copy to/from the temp. In read-only cases, we don't need a temp - we just point to the source. For write-only, we assign directly to the new_value. For read-write, we actually need the temp.