summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/aarch64/test_frame_16.c
blob: 28f3826adadd5eaa6486659e4d6b6d7c5960b9d2 (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
/* Verify:
     * with outgoing.
     * single int register push.
     * varargs and callee-save size >= 256
     * Use 2 stack adjustments.  */

/* { dg-do compile } */
/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */

#define REP8(X) X,X,X,X,X,X,X,X
#define REP64(X) REP8(REP8(X))

void outgoing (__builtin_va_list, ...);

double vararg_outgoing (int x1, ...)
{
  double a1 = x1, a2 = x1 * 2, a3 = x1 * 3, a4 = x1 * 4, a5 = x1 * 5, a6 = x1 * 6;
  __builtin_va_list vl;
  __builtin_va_start (vl, x1);
  outgoing (vl, a1, a2, a3, a4, a5, a6, REP64 (1));
  __builtin_va_end (vl);
  return a1 + a2 + a3 + a4 + a5 + a6;
}

/* { dg-final { scan-assembler-times "sub\tsp, sp, #\[0-9\]+" 2 } } */