> > 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 >>