On 18/09/13 15:00, Richard Earnshaw wrote:
> On ARM targets that normally support LDRD/STRD there are tuning
> parameters that express the preference for using these instructions over
> LDM/STM. However, that's only a preference and when the architecture
> and tuning options differ (for example, tuning for Cortex-A15 but using
> the ARMv5 ISA) then it is essential to ensure that the architecture also
> has the instructions.
>
> R.
>
> 2013-09-18 Richard Earnshaw <rearn...@arm.com>
>
> * arm.c (arm_get_frame_offsets): Validate architecture supports
> LDRD/STRD before accepting the tuning preference.
> (arm_expand_prologue): Likewise.
> (arm_expand_epilogue): Likewise.
>
> Committed to trunk. A 4.8 back-port will follow.
>
> R.
>
>
And this time with the patch...
R.
--- arm.c (revision 202671)
+++ arm.c (local)
@@ -17955,7 +17956,8 @@ arm_get_frame_offsets (void)
if (! any_sibcall_could_use_r3 ()
&& arm_size_return_regs () <= 12
&& (offsets->saved_regs_mask & (1 << 3)) == 0
- && (TARGET_THUMB2 || !current_tune->prefer_ldrd_strd))
+ && (TARGET_THUMB2
+ || !(TARGET_LDRD && current_tune->prefer_ldrd_strd)))
{
reg = 3;
}
@@ -18380,7 +18382,8 @@ arm_expand_prologue (void)
}
}
- if (current_tune->prefer_ldrd_strd
+ if (TARGET_LDRD
+ && current_tune->prefer_ldrd_strd
&& !optimize_function_for_size_p (cfun))
{
if (TARGET_THUMB2)
@@ -24649,7 +24652,8 @@ arm_expand_epilogue (bool really_return)
}
else
{
- if (current_tune->prefer_ldrd_strd
+ if (TARGET_LDRD
+ && current_tune->prefer_ldrd_strd
&& !optimize_function_for_size_p (cfun))
{
if (TARGET_THUMB2)