blob: 78fcafaaf7d82788fe5f9a9abc86539bf8af4f96 [file] [log] [blame]
/* Check for thumb1 far jump. This is the extreme case that far jump
* will be used with minimum number of instructions. By passing this case
* it means the heuristic of saving lr for far jump meets the most extreme
* requirement. */
/* { dg-options "-Os" } */
/* { dg-skip-if "" { ! { arm_thumb1 } } } */
volatile register int r4 asm ("r4");
void f3(int i)
{
#define GO(n) \
extern volatile int g_##n; \
r4=(int)&g_##n;
#define GO8(n) \
GO(n##_0) \
GO(n##_1) \
GO(n##_2) \
GO(n##_3) \
GO(n##_4) \
GO(n##_5) \
GO(n##_6) \
GO(n##_7)
#define GO64(n) \
GO8(n##_0) \
GO8(n##_1) \
GO8(n##_2) \
GO8(n##_3) \
GO8(n##_4) \
GO8(n##_5) \
GO8(n##_6) \
GO8(n##_7) \
#define GO498(n) \
GO64(n##_0) \
GO64(n##_1) \
GO64(n##_2) \
GO64(n##_3) \
GO64(n##_4) \
GO64(n##_5) \
GO64(n##_6) \
GO8(n##_0) \
GO8(n##_1) \
GO8(n##_2) \
GO8(n##_3) \
GO8(n##_4) \
GO8(n##_5) \
GO(n##_0) \
GO(n##_1) \
if (i) {
GO498(0);
}
}
/* { dg-final { scan-assembler "push.*lr" } } */