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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [libffi/] [testsuite/] [libffi.call/] [closure_fn5.c] - Blame information for rev 14

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 14 jlechner
/* 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 { xfail mips64*-*-* arm*-*-* strongarm*-*-* xscale*-*-* } } */
10
 
11
#include "ffitest.h"
12
 
13
static void
14
closure_test_fn5(ffi_cif* cif,void* resp,void** args, 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] + (int)(long)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)(long)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
#ifndef USING_MMAP
63
  static ffi_closure cl;
64
#endif
65
  ffi_closure *pcl;
66
  ffi_type * cl_arg_types[17];
67
  int i, res;
68
#ifdef USING_MMAP
69
  pcl = allocate_mmap (sizeof(ffi_closure));
70
#else
71
  pcl = &cl;
72
#endif
73
 
74
  for (i = 0; i < 10; i++) {
75
    cl_arg_types[i] = &ffi_type_uint64;
76
  }
77
  cl_arg_types[10] = &ffi_type_uint;
78
  for (i = 11; i < 15; i++) {
79
    cl_arg_types[i] = &ffi_type_uint64;
80
  }
81
  cl_arg_types[15] = &ffi_type_uint;
82
  cl_arg_types[16] = NULL;
83
 
84
  /* Initialize the cif */
85
  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16,
86
                     &ffi_type_sint, cl_arg_types) == FFI_OK);
87
 
88
  CHECK(ffi_prep_closure(pcl, &cif, closure_test_fn5,
89
                         (void *) 3 /* userdata */) == FFI_OK);
90
 
91
  res = (*((closure_test_type0)pcl))
92
    (1LL, 2LL, 3LL, 4LL, 127LL, 429LL, 7LL, 8LL, 9LL, 10LL, 11, 12LL,
93
     13LL, 19LL, 21LL, 1);
94
  /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */
95
  printf("res: %d\n",res);
96
  /* { dg-output "\nres: 680" } */
97
 
98
  exit(0);
99
}

powered by: WebSVN 2.1.0

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