aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/aarch64/sve/pcs/saves_3.c
blob: 1fe86b0eac33c43568dfba85eb28f057559f3f25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/* { 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;
}