1/* Check that indirect sibcalls understand regparm.  */
2/* { dg-do run { target ia32 } } */
3/* { dg-options "-O2" } */
4
5extern void abort (void);
6
7int (*f)(int, int) __attribute__((regparm(2)));
8int (*g)(int, int, int) __attribute__((regparm(3)));
9
10int __attribute__((noinline))
11foo(void)
12{
13  return f(1, 2);
14}
15
16int __attribute__((noinline))
17bar(void)
18{
19  return g(1, 2, 3);
20}
21
22int __attribute__((regparm(2)))
23f1(int x, int y)
24{
25  return x*3 + y;
26}
27
28int __attribute__((regparm(3)))
29g1(int x, int y, int z)
30{
31  return x*9 + y*3 + z;
32}
33
34int main()
35{
36  f = f1;
37  g = g1;
38  if (foo() != 1*3 + 2)
39    abort ();
40  if (bar() != 1*9 + 2*3 + 3)
41    abort ();
42  return 0;
43}
44