view gcc/testsuite/gcc.target/aarch64/sve/pcs/varargs_2_u32.c @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents 1830386684a0
children
line wrap: on
line source

/* { dg-do compile } */
/* { dg-options "-O2 -fno-stack-clash-protection -g" } */
/* { dg-final { check-function-bodies "**" "" { target lp64 } } } */

#include <arm_sve.h>
#include <stdarg.h>

/*
** callee_0:
**	...
**	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x1\]
**	...
**	st1w	\1, \2, \[x0\]
**	...
**	ret
*/
void __attribute__((noipa))
callee_0 (int32_t *ptr, ...)
{
  va_list va;
  svint32_t vec;

  va_start (va, ptr);
  vec = va_arg (va, svint32_t);
  va_end (va);
  svst1 (svptrue_b8 (), ptr, vec);
}

/*
** caller_0:
**	...
**	mov	(z[0-9]+\.s), #42
**	...
**	st1w	\1, p[0-7], \[x1\]
**	...
**	ret
*/
void __attribute__((noipa))
caller_0 (int32_t *ptr)
{
  callee_0 (ptr, svdup_u32 (42));
}

/*
** callee_1:
**	...
**	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x2\]
**	...
**	st1w	\1, p[0-7], \[x0\]
**	...
**	ret
*/
void __attribute__((noipa))
callee_1 (int32_t *ptr, ...)
{
  va_list va;
  svint32_t vec;

  va_start (va, ptr);
  va_arg (va, int);
  vec = va_arg (va, svint32_t);
  va_end (va);
  svst1 (svptrue_b8 (), ptr, vec);
}

/*
** caller_1:
**	...
**	mov	(z[0-9]+\.s), #42
**	...
**	st1w	\1, p[0-7], \[x2\]
**	...
**	ret
*/
void __attribute__((noipa))
caller_1 (int32_t *ptr)
{
  callee_1 (ptr, 1, svdup_u32 (42));
}

/*
** callee_7:
**	...
**	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[x7\]
**	...
**	st1w	\1, p[0-7], \[x0\]
**	...
**	ret
*/
void __attribute__((noipa))
callee_7 (int32_t *ptr, ...)
{
  va_list va;
  svint32_t vec;

  va_start (va, ptr);
  va_arg (va, int);
  va_arg (va, int);
  va_arg (va, int);
  va_arg (va, int);
  va_arg (va, int);
  va_arg (va, int);
  vec = va_arg (va, svint32_t);
  va_end (va);
  svst1 (svptrue_b8 (), ptr, vec);
}

/*
** caller_7:
**	...
**	mov	(z[0-9]+\.s), #42
**	...
**	st1w	\1, p[0-7], \[x7\]
**	...
**	ret
*/
void __attribute__((noipa))
caller_7 (int32_t *ptr)
{
  callee_7 (ptr, 1, 2, 3, 4, 5, 6, svdup_u32 (42));
}

/* FIXME: We should be able to get rid of the va_list object.  */
/*
** callee_8:
**	sub	sp, sp, #([0-9]+)
**	...
**	ldr	(x[0-9]+), \[sp, \1\]
**	...
**	ld1w	(z[0-9]+\.s), (p[0-7])/z, \[\2\]
**	...
**	st1w	\3, \4, \[x0\]
**	...
**	ret
*/
void __attribute__((noipa))
callee_8 (int32_t *ptr, ...)
{
  va_list va;
  svint32_t vec;

  va_start (va, ptr);
  va_arg (va, int);
  va_arg (va, int);
  va_arg (va, int);
  va_arg (va, int);
  va_arg (va, int);
  va_arg (va, int);
  va_arg (va, int);
  vec = va_arg (va, svint32_t);
  va_end (va);
  svst1 (svptrue_b8 (), ptr, vec);
}

/*
** caller_8:
**	...
**	mov	(z[0-9]+\.s), #42
**	...
**	st1w	\1, p[0-7], \[(x[0-9]+)\]
**	...
**	str	\2, \[sp\]
**	...
**	ret
*/
void __attribute__((noipa))
caller_8 (int32_t *ptr)
{
  callee_8 (ptr, 1, 2, 3, 4, 5, 6, 7, svdup_u32 (42));
}