1a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* Area:	ffi_call
2a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Purpose:	Check return value double.
3a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Limitations:	none.
4a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   PR:		none.
5a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project   Originator:	<andreast@gcc.gnu.org> 20050212  */
6a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
7a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* { dg-do run } */
8a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#include "ffitest.h"
9a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
10a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectstatic double return_dbl(double dbl1, float fl2, unsigned int in3, double dbl4)
11a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project{
12a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  return dbl1 + fl2 + in3 + dbl4;
13a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project}
14a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectint main (void)
15a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project{
16a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  ffi_cif cif;
17a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  ffi_type *args[MAX_ARGS];
18a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  void *values[MAX_ARGS];
19a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  double dbl1, dbl4, rdbl;
20a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  float fl2;
21a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  unsigned int in3;
22a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  args[0] = &ffi_type_double;
23a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  args[1] = &ffi_type_float;
24a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  args[2] = &ffi_type_uint;
25a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  args[3] = &ffi_type_double;
26a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  values[0] = &dbl1;
27a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  values[1] = &fl2;
28a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  values[2] = &in3;
29a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  values[3] = &dbl4;
30a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
31a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  /* Initialize the cif */
32a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4,
33a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project		     &ffi_type_double, args) == FFI_OK);
34a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  dbl1 = 127.0;
35a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  fl2 = 128.0;
36a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  in3 = 255;
37a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  dbl4 = 512.7;
38a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project
39a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values);
40a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  printf ("%f vs %f\n", rdbl, return_dbl(dbl1, fl2, in3, dbl4));
41a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  CHECK(rdbl ==  dbl1 + fl2 + in3 + dbl4);
42a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project  exit(0);
43a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project}
44