blob: 2d29ce2c00070178f190c043aadf38fcb0c1de1b [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O -g" } */
/* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */
#include <arm_sve.h>
int sve_callee (svint8_t);
/*
** standard_caller:
** stp x29, x30, \[sp, -16\]!
** mov x29, sp
** mov z0\.b, #1
** bl sve_callee
** add w0, w0, #?1
** ldp x29, x30, \[sp\], 16
** ret
*/
int standard_caller (void) { return sve_callee (svdup_s8 (1)) + 1; }
/*
** vpcs_caller:
** stp x29, x30, \[sp, -16\]!
** mov x29, sp
** mov z0\.b, #1
** bl sve_callee
** add w0, w0, #?1
** ldp x29, x30, \[sp\], 16
** ret
*/
__attribute__((aarch64_vector_pcs))
int vpcs_caller (void) { return sve_callee (svdup_s8 (1)) + 1; }
/*
** sve_caller:
** stp x29, x30, \[sp, -16\]!
** mov x29, sp
** mov z0\.b, #1
** bl sve_callee
** add w0, w0, #?1
** ldp x29, x30, \[sp\], 16
** ret
*/
int sve_caller (svbool_t p0) { return sve_callee (svdup_s8 (1)) + 1; }
/*
** standard_caller_ptr:
** stp x29, x30, \[sp, -16\]!
** mov x29, sp
** mov z0\.h, #1
** blr x0
** add w0, w0, #?1
** ldp x29, x30, \[sp\], 16
** ret
*/
int
standard_caller_ptr (int (*fn) (__SVInt16_t))
{
return fn (svdup_s16 (1)) + 1;
}
/*
** vpcs_caller_ptr:
** stp x29, x30, \[sp, -16\]!
** mov x29, sp
** mov z0\.h, #1
** blr x0
** add w0, w0, #?1
** ldp x29, x30, \[sp\], 16
** ret
*/
int __attribute__((aarch64_vector_pcs))
vpcs_caller_ptr (int (*fn) (__SVInt16_t))
{
return fn (svdup_s16 (1)) + 1;
}
/*
** sve_caller_ptr:
** stp x29, x30, \[sp, -16\]!
** mov x29, sp
** mov z0\.h, #1
** blr x0
** add w0, w0, #?1
** ldp x29, x30, \[sp\], 16
** ret
*/
int
sve_caller_ptr (svbool_t pg, int (*fn) (svint16_t))
{
return fn (svdup_s16 (1)) + 1;
}