PageRenderTime 26ms CodeModel.GetById 16ms app.highlight 7ms RepoModel.GetById 1ms app.codeStats 0ms

/js/src/ctypes/libffi/testsuite/libffi.call/many.c

http://github.com/zpao/v8monkey
C | 69 lines | 52 code | 10 blank | 7 comment | 3 complexity | f5260f5f182a88a7a32d7079b77a540b MD5 | raw file
 1/* Area:	ffi_call
 2   Purpose:	Check return value float, with many arguments
 3   Limitations:	none.
 4   PR:		none.
 5   Originator:	From the original ffitest.c  */
 6
 7/* { dg-do run } */
 8#include "ffitest.h"
 9
10#include <float.h>
11
12static float many(float f1,
13		  float f2,
14		  float f3,
15		  float f4,
16		  float f5,
17		  float f6,
18		  float f7,
19		  float f8,
20		  float f9,
21		  float f10,
22		  float f11,
23		  float f12,
24		  float f13)
25{
26#if 0
27  printf("%f %f %f %f %f %f %f %f %f %f %f %f %f\n",
28	 (double) f1, (double) f2, (double) f3, (double) f4, (double) f5, 
29	 (double) f6, (double) f7, (double) f8, (double) f9, (double) f10,
30	 (double) f11, (double) f12, (double) f13);
31#endif
32
33  return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13);
34}
35
36int main (void)
37{
38  ffi_cif cif;
39  ffi_type *args[13];
40  void *values[13];
41  float fa[13];
42  float f, ff;
43  int i;
44
45  for (i = 0; i < 13; i++)
46    {
47      args[i] = &ffi_type_float;
48      values[i] = &fa[i];
49      fa[i] = (float) i;
50    }
51
52    /* Initialize the cif */
53    CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 13, 
54		       &ffi_type_float, args) == FFI_OK);
55
56    ffi_call(&cif, FFI_FN(many), &f, values);
57
58    ff =  many(fa[0], fa[1],
59	       fa[2], fa[3],
60	       fa[4], fa[5],
61	       fa[6], fa[7],
62	       fa[8], fa[9],
63	       fa[10],fa[11],fa[12]);
64
65    if (f - ff < FLT_EPSILON)
66      exit(0);
67    else
68      abort();
69}