blob: 6bcbb57725b8f8445594e56fef309acb3d216529 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O -fshrink-wrap -fstack-clash-protection -msve-vector-bits=256 -g" } */
/* { dg-final { check-function-bodies "**" "" } } */
#pragma GCC aarch64 "arm_sve.h"
svbool_t take_stack_args (volatile void *, void *, int, int, int,
int, int, int, int);
/*
** test_1:
** sub sp, sp, #48
** str z16, \[sp\]
** ...
** ptrue p0\.b, vl32
** ldr z16, \[sp\]
** add sp, sp, #?48
** ret
*/
svbool_t
test_1 (void)
{
volatile int x = 1;
asm volatile ("" ::: "z16");
return svptrue_b8 ();
}
/*
** test_2:
** sub sp, sp, #80
** stp x24, x25, \[sp, 32\]
** str x26, \[sp, 48\]
** str z16, \[sp\]
** ...
** ptrue p0\.b, vl32
** ldr z16, \[sp\]
** ldp x24, x25, \[sp, 32\]
** ldr x26, \[sp, 48\]
** add sp, sp, #?80
** ret
*/
svbool_t
test_2 (void)
{
volatile int x = 1;
asm volatile ("" ::: "z16", "x24", "x25", "x26");
return svptrue_b8 ();
}
/*
** test_3:
** mov x12, #?4160
** sub sp, sp, x12
** stp x24, x25, \[sp, 32\]
** str x26, \[sp, 48\]
** str z16, \[sp\]
** ...
** ptrue p0\.b, vl32
** ldr z16, \[sp\]
** ldp x24, x25, \[sp, 32\]
** ldr x26, \[sp, 48\]
** add sp, sp, x12
** ret
*/
svbool_t
test_3 (void)
{
volatile int x[1024];
asm volatile ("" :: "r" (x) : "z16", "x24", "x25", "x26");
return svptrue_b8 ();
}
/*
** test_4:
** sub sp, sp, #64
** str z16, \[sp\]
** ...
** ptrue p0\.h, vl16
** ldr z16, \[sp\]
** add sp, sp, #?64
** ret
*/
svbool_t
test_4 (void)
{
volatile svint32_t b;
b = svdup_s32 (1);
asm volatile ("" ::: "z16");
return svptrue_b16 ();
}
/*
** test_5:
** sub sp, sp, #96
** stp x24, x25, \[sp, 32\]
** str x26, \[sp, 48\]
** str z16, \[sp\]
** ...
** ptrue p0\.h, vl16
** ldr z16, \[sp\]
** ldp x24, x25, \[sp, 32\]
** ldr x26, \[sp, 48\]
** add sp, sp, #?96
** ret
*/
svbool_t
test_5 (void)
{
volatile svint32_t b;
b = svdup_s32 (1);
asm volatile ("" ::: "z16", "x24", "x25", "x26");
return svptrue_b16 ();
}
/*
** test_6:
** stp x29, x30, \[sp, -16\]!
** mov x29, sp
** sub sp, sp, #32
** str z16, \[sp\]
** ...
** ptrue p0\.b, vl32
** add sp, sp, #?16
** ldr z16, \[sp\]
** add sp, sp, #?32
** ldp x29, x30, \[sp\], 16
** ret
*/
svbool_t
test_6 (void)
{
take_stack_args (0, 0, 1, 2, 3, 4, 5, 6, 7);
asm volatile ("" ::: "z16");
return svptrue_b8 ();
}
/*
** test_7:
** mov x12, #?4144
** sub sp, sp, x12
** stp x29, x30, \[sp, 32\]
** add x29, sp, #?32
** str z16, \[sp\]
** sub sp, sp, #16
** ...
** ptrue p0\.b, vl32
** add sp, sp, #?16
** ldr z16, \[sp\]
** add sp, sp, #?32
** ldp x29, x30, \[sp\]
** mov x12, #?4112
** add sp, sp, x12
** ret
*/
svbool_t
test_7 (void)
{
volatile int x[1024];
take_stack_args (x, 0, 1, 2, 3, 4, 5, 6, 7);
asm volatile ("" ::: "z16");
return svptrue_b8 ();
}
/*
** test_8:
** mov x12, #?4176
** sub sp, sp, x12
** stp x29, x30, \[sp, 32\]
** add x29, sp, #?32
** stp x24, x25, \[sp, 48\]
** str x26, \[sp, 64\]
** str z16, \[sp\]
** sub sp, sp, #16
** ...
** ptrue p0\.b, vl32
** add sp, sp, #?16
** ldr z16, \[sp\]
** add sp, sp, #?32
** ldp x24, x25, \[sp, 16\]
** ldr x26, \[sp, 32\]
** ldp x29, x30, \[sp\]
** mov x12, #?4144
** add sp, sp, x12
** ret
*/
svbool_t
test_8 (void)
{
volatile int x[1024];
take_stack_args (x, 0, 1, 2, 3, 4, 5, 6, 7);
asm volatile ("" ::: "z16", "x24", "x25", "x26");
return svptrue_b8 ();
}
/*
** test_9:
** mov x12, #?4144
** sub sp, sp, x12
** stp x29, x30, \[sp, 32\]
** add x29, sp, #?32
** str z16, \[sp\]
** sub sp, sp, #16
** ...
** ptrue p0\.b, vl32
** sub sp, x29, #32
** ldr z16, \[sp\]
** add sp, sp, #?32
** ldp x29, x30, \[sp\]
** mov x12, #?4112
** add sp, sp, x12
** ret
*/
svbool_t
test_9 (int n)
{
volatile int x[1024];
take_stack_args (x, __builtin_alloca (n), 1, 2, 3, 4, 5, 6, 7);
asm volatile ("" ::: "z16");
return svptrue_b8 ();
}
/*
** test_10:
** mov x12, #?4176
** sub sp, sp, x12
** stp x29, x30, \[sp, 32\]
** add x29, sp, #?32
** stp x24, x25, \[sp, 48\]
** str x26, \[sp, 64\]
** str z16, \[sp\]
** sub sp, sp, #16
** ...
** ptrue p0\.b, vl32
** sub sp, x29, #32
** ldr z16, \[sp\]
** add sp, sp, #?32
** ldp x24, x25, \[sp, 16\]
** ldr x26, \[sp, 32\]
** ldp x29, x30, \[sp\]
** mov x12, #?4144
** add sp, sp, x12
** ret
*/
svbool_t
test_10 (int n)
{
volatile int x[1024];
take_stack_args (x, __builtin_alloca (n), 1, 2, 3, 4, 5, 6, 7);
asm volatile ("" ::: "z16", "x24", "x25", "x26");
return svptrue_b8 ();
}
/*
** test_11:
** sub sp, sp, #65536
** str xzr, \[sp, 1024\]
** mov x12, #?64480
** sub sp, sp, x12
** stp x29, x30, \[sp, 32\]
** add x29, sp, #?32
** stp x24, x25, \[sp, 48\]
** str x26, \[sp, 64\]
** str z16, \[sp\]
** sub sp, sp, #16
** ...
** ptrue p0\.b, vl32
** sub sp, x29, #32
** ldr z16, \[sp\]
** add sp, sp, #?32
** ldp x24, x25, \[sp, 16\]
** ldr x26, \[sp, 32\]
** ldp x29, x30, \[sp\]
** add sp, sp, #?3008
** add sp, sp, #?126976
** ret
*/
svbool_t
test_11 (int n)
{
volatile int x[0x7ee4];
take_stack_args (x, __builtin_alloca (n), 1, 2, 3, 4, 5, 6, 7);
asm volatile ("" ::: "z16", "x24", "x25", "x26");
return svptrue_b8 ();
}