On 16/04/15 00:00, Kugan wrote:
>
>
> On 16/04/15 08:32, Jakub Jelinek wrote:
>> On Thu, Apr 16, 2015 at 08:27:24AM +1000, Kugan wrote:
>>> + if (<CODE> == LSHIFTRT)
>>> + {
>>> + emit_insn (gen_aarch64_lshr_sisd_or_int_<mode>3 (operands[0],
>>> operands[1], operands[2]));
>>
>> That is way too long line, please wrap it.
>>
>>> + DONE;
>>> + }
>>> }
>>> )
>>>
>>> @@ -3361,11 +3367,12 @@
>>> )
>>>
>>> ;; Logical right shift using SISD or Integer instruction
>>> -(define_insn "*aarch64_lshr_sisd_or_int_<mode>3"
>>> - [(set (match_operand:GPI 0 "register_operand" "=w,&w,r")
>>> +(define_insn "aarch64_lshr_sisd_or_int_<mode>3"
>>> + [(set (match_operand:GPI 0 "register_operand" "=w,w,r")
>>> (lshiftrt:GPI
>>> (match_operand:GPI 1 "register_operand" "w,w,r")
>>> - (match_operand:QI 2 "aarch64_reg_or_shift_imm_<mode>"
>>> "Us<cmode>,w,rUs<cmode>")))]
>>> + (match_operand:QI 2 "aarch64_reg_or_shift_imm_<mode>"
>>> "Us<cmode>,w,rUs<cmode>")))
>>
>> Though, this one too...
>>
>
> Fixed in the attached patch.
>
> Thanks,
> Kugan
>
Not ok.
You need to ensure that your scratch register cannot overlap op1, since
the scratch is written before op1 is read.
R.