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

Reply via email to