OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libffi/] [testsuite/] [libffi.call/] [closure_fn5.c] - Blame information for rev 800

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 732 jeremybenn
/* Area:        closure_call
2
   Purpose:     Check multiple long long values passing.
3
                Exceed the limit of gpr registers on PowerPC
4
                Darwin.
5
   Limitations: none.
6
   PR:          none.
7
   Originator:  <andreast@gcc.gnu.org> 20031026  */
8
 
9
/* { dg-do run } */
10
#include "ffitest.h"
11
 
12
static void
13
closure_test_fn5(ffi_cif* cif __UNUSED__, void* resp, void** args,
14
                 void* userdata)
15
{
16
  *(ffi_arg*)resp =
17
    (int)*(unsigned long long *)args[0] + (int)*(unsigned long long *)args[1] +
18
    (int)*(unsigned long long *)args[2] + (int)*(unsigned long long *)args[3] +
19
    (int)*(unsigned long long *)args[4] + (int)*(unsigned long long *)args[5] +
20
    (int)*(unsigned long long *)args[6] + (int)*(unsigned long long *)args[7] +
21
    (int)*(unsigned long long *)args[8] + (int)*(unsigned long long *)args[9] +
22
    (int)*(int *)args[10] +
23
    (int)*(unsigned long long *)args[11] +
24
    (int)*(unsigned long long *)args[12] +
25
    (int)*(unsigned long long *)args[13] +
26
    (int)*(unsigned long long *)args[14] +
27
    *(int *)args[15] + (intptr_t)userdata;
28
 
29
  printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n",
30
         (int)*(unsigned long long *)args[0],
31
         (int)*(unsigned long long *)args[1],
32
         (int)*(unsigned long long *)args[2],
33
         (int)*(unsigned long long *)args[3],
34
         (int)*(unsigned long long *)args[4],
35
         (int)*(unsigned long long *)args[5],
36
         (int)*(unsigned long long *)args[6],
37
         (int)*(unsigned long long *)args[7],
38
         (int)*(unsigned long long *)args[8],
39
         (int)*(unsigned long long *)args[9],
40
         (int)*(int *)args[10],
41
         (int)*(unsigned long long *)args[11],
42
         (int)*(unsigned long long *)args[12],
43
         (int)*(unsigned long long *)args[13],
44
         (int)*(unsigned long long *)args[14],
45
         *(int *)args[15],
46
         (int)(intptr_t)userdata, (int)*(ffi_arg *)resp);
47
 
48
}
49
 
50
typedef int (*closure_test_type0)(unsigned long long, unsigned long long,
51
                                  unsigned long long, unsigned long long,
52
                                  unsigned long long, unsigned long long,
53
                                  unsigned long long, unsigned long long,
54
                                  unsigned long long, unsigned long long,
55
                                  int, unsigned long long,
56
                                  unsigned long long, unsigned long long,
57
                                  unsigned long long, int);
58
 
59
int main (void)
60
{
61
  ffi_cif cif;
62
  void *code;
63
  ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
64
  ffi_type * cl_arg_types[17];
65
  int i, res;
66
 
67
  for (i = 0; i < 10; i++) {
68
    cl_arg_types[i] = &ffi_type_uint64;
69
  }
70
  cl_arg_types[10] = &ffi_type_sint;
71
  for (i = 11; i < 15; i++) {
72
    cl_arg_types[i] = &ffi_type_uint64;
73
  }
74
  cl_arg_types[15] = &ffi_type_sint;
75
  cl_arg_types[16] = NULL;
76
 
77
  /* Initialize the cif */
78
  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
79
                     &ffi_type_sint, cl_arg_types) == FFI_OK);
80
 
81
  CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn5,
82
                             (void *) 3 /* userdata */, code) == FFI_OK);
83
 
84
  res = (*((closure_test_type0)code))
85
    (1LL, 2LL, 3LL, 4LL, 127LL, 429LL, 7LL, 8LL, 9LL, 10LL, 11, 12LL,
86
     13LL, 19LL, 21LL, 1);
87
  /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */
88
  printf("res: %d\n",res);
89
  /* { dg-output "\nres: 680" } */
90
 
91
  exit(0);
92
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.