diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index be51c77..d89e853 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -5482,7 +5482,8 @@ operands[1] = force_reg (DImode, operands[1]); } if (REG_P (operands[0]) && REGNO (operands[0]) < FIRST_VIRTUAL_REGISTER - && !HARD_REGNO_MODE_OK (REGNO (operands[0]), DImode)) + && !HARD_REGNO_MODE_OK (REGNO (operands[0]), DImode) + && !REG_CANNOT_CHANGE_MODE_P (REGNO (operands[0]), DImode, SImode)) { /* Avoid LDRD's into an odd-numbered register pair in ARM state when expanding function calls. */ @@ -5501,7 +5502,8 @@ DONE; } else if (REG_P (operands[1]) && REGNO (operands[1]) < FIRST_VIRTUAL_REGISTER - && !HARD_REGNO_MODE_OK (REGNO (operands[1]), DImode)) + && !HARD_REGNO_MODE_OK (REGNO (operands[1]), DImode) + && !REG_CANNOT_CHANGE_MODE_P (REGNO (operands[1]), DImode, SImode)) { /* Avoid STRD's from an odd-numbered register pair in ARM state when expanding function prologue. */