Bernd Schmidt <ber...@codesourcery.com> writes: > On 09/25/11 19:16, Richard Sandiford wrote: >> The last bit is indirect, via a new HARD_REG_SET called operand_reg_set. >> And this set is the reason why I'm sending the patch now. The MIPS16 port >> has always had a problem with the HI and LO registers: they can only be >> set by multiplication and division instructions, and only read by MFHI >> and MFLO. Unlike normal MIPS, there are no MTHI and MTLO instructions. > [...] > > Now that we use pressure classes >> instead (a good thing), I'm finally going to try to fix this "properly". >> And that means (a) fixing HI and LO and (b) stopping them from being >> treated as register operands. (b) is important because if we start >> out with this (valid) instruction before reload: > > The only slightly nonobvious thing about this is that mfhi/mflo can't > have their operand represented using a register_operand. I haven't > looked; I assume that's the case. Ok.
Right. The follow-up MIPS patch (which I've been sitting on, I suppose I should post it when I get home, sorry) removes HI and LO from the new operand_reg_set and extends move_operand to explicitly allow LO. A lot of the multiplication patterns need rejigging to expose LO early when required, so it's not pretty... Richard