On Mon, Oct 14, 2019 at 05:16:03PM -0400, Michael Meissner wrote: > On Fri, Oct 11, 2019 at 04:17:02PM -0500, Segher Boessenkool wrote: > > > * config/rs6000/predicates.md (lwa_operand): Allow using PLWA to > > > generate sign extend with odd offsets. > > > > I don't understand what this means. "Odd offsets" isn't correct, in any > > case? > > Non-zero in the bottom 2/4 bits. I'll try to come up with different words.
Ah. "If prefixed is allowed, allow addresses not a multiple of 4."? > > > + /* The LWA instruction uses the DS-form format where the bottom two > > > bits of > > > + the offset must be 0. The prefixed PLWA does not have this > > > + restriction. */ > > > + if (address_is_prefixed (addr, DImode, NON_PREFIXED_DS)) > > > + return true; > > > > DImode? > > Yes, because LWA converts SImode to DImode. Well, the access is to a SImode datum. But you want DImode here so it uses the code for ld (the DS-mode code) also for lwa. Hrm, address_to_insn_form needs a comment for that then, and so do callers like this one. Should be fine with that, it's just an irregularity in the ISA. > > > +;; Return 1 if op is either a register operand or a memory operand that > > > does > > > +;; not use a prefixed address. > > > +(define_predicate "reg_or_non_prefixed_memory" > > > + (match_code "reg,subreg,mem") > > > +{ > > > + return (gpc_reg_operand (op, mode) || non_prefixed_memory (op, mode)); > > > +}) > > > > This never allows subreg. > > Gpc_reg_operand allows subreg, assuming that register_operand allows subreg. It does, and I have no idea what I thought here now. Sorry. Segher