Richard Sandiford <rdsandif...@googlemail.com> writes: > Richard Sandiford <richard.sandif...@linaro.org> writes: >> 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.
Thanks. >> 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... > > Here it is. Like I say, most of it is just exposing LO at expand time > for MIPS16, while not affecting normal mode. The changes relevant to > this patch are the ones to use muldiv_target_operand and the change > to move_operand. Both patches now committed after retesting on x86_64-linux-gnu and mips64-linux-gnu. Richard