On Fri, Nov 27, 2020 at 05:57:27PM +0000, Brendan Jackman wrote: > The JIT case for encoding atomic ops is about to get more > complicated. In order to make the review & resulting code easier, > let's factor out some shared helpers. > > Signed-off-by: Brendan Jackman <jackmanb@xxxxxxxxxx> > --- > arch/x86/net/bpf_jit_comp.c | 39 ++++++++++++++++++++++--------------- > 1 file changed, 23 insertions(+), 16 deletions(-) > > diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c > index 94b17bd30e00..a839c1a54276 100644 > --- a/arch/x86/net/bpf_jit_comp.c > +++ b/arch/x86/net/bpf_jit_comp.c > @@ -702,6 +702,21 @@ static void emit_modrm_dstoff(u8 **pprog, u32 r1, u32 r2, int off) > *pprog = prog; > } > > +/* > + * Emit a REX byte if it will be necessary to address these registers What is "REX byte" ? May be rename it to maybe_emit_mod() ? > + */ > +static void maybe_emit_rex(u8 **pprog, u32 reg_rm, u32 reg_reg, bool wide) could you please keep original names as dst_reg/src_reg instead of reg_rm/reg_reg ? reg_reg reads really odd and reg_rm is equally puzzling unless the reader studied intel's manual. I didn't. All these new abbreviations are challenging for me. > +{ > + u8 *prog = *pprog; > + int cnt = 0; > + > + if (wide) what is 'wide' ? Why not to call it 'bool is_alu64' ? > + EMIT1(add_2mod(0x48, reg_rm, reg_reg)); > + else if (is_ereg(reg_rm) || is_ereg(reg_reg)) > + EMIT1(add_2mod(0x40, reg_rm, reg_reg)); > + *pprog = prog; > +}