> 
> Yes in big-endian DI mode value are stored into VFP registers, and
> here register 16 is the first of them s0.  Just in case you want to do
> more test, the issue can be seen with a oneline testcase:
> 
> __attribute__((__vector_size__(2 * sizeof(int)))) int fn1() {}

Yep we may well have DImode values in the VFP register bank.

> 
>> I observe that FIRST_VIRTUAL_REGISTER is 104, whereas LAST_ARM_REG is 15. So
>> it might be that the pattern should check against the latter instead of the
>> former - as arm_hard_regno_mode_ok does...
> 
> yes, when checking that that the operand register number is lower or
> equals to LAST_ARM_REGNUM the infinite loop is avoided.  I haven't
> pass a full validation so far, but it has the same effect than
> checking that the changing mode is authorized.  If you think that this
> checking makes more sense, I can rerun a full valid.



It sounds to me like checking against LAST_ARM_REGNUM is the better approach. 
The additional test in the movdi expander was to prevent illegitimate ldrd / 
strd instructions from being generated.

Thus, OK if there are no regressions - Please give it some time to bake on 
trunk before backporting to FSF 5 and / or do some additional validation 
(including the regression testsuite) before doing the backport.



regards
Ramana


> 
> Thanks,
> Yvan
> 
> 
> yes
> 
> 
>> --Alan
>>

Reply via email to