| /* Area: ffi_call | |
| Purpose: Check for proper argument alignment. | |
| Limitations: none. | |
| PR: none. | |
| Originator: <twalljava@java.net> (from many_win32.c) */ | |
| /* { dg-do run } */ | |
| #include "ffitest.h" | |
| static float ABI_ATTR align_arguments(int i1, | |
| double f2, | |
| int i3, | |
| double f4) | |
| { | |
| return i1+f2+i3+f4; | |
| } | |
| int main(void) | |
| { | |
| ffi_cif cif; | |
| ffi_type *args[4] = { | |
| &ffi_type_sint, | |
| &ffi_type_double, | |
| &ffi_type_sint, | |
| &ffi_type_double | |
| }; | |
| double fa[2] = {1,2}; | |
| int ia[2] = {1,2}; | |
| void *values[4] = {&ia[0], &fa[0], &ia[1], &fa[1]}; | |
| float f, ff; | |
| /* Initialize the cif */ | |
| CHECK(ffi_prep_cif(&cif, ABI_NUM, 4, | |
| &ffi_type_float, args) == FFI_OK); | |
| ff = align_arguments(ia[0], fa[0], ia[1], fa[1]);; | |
| ffi_call(&cif, FFI_FN(align_arguments), &f, values); | |
| if (f == ff) | |
| printf("align arguments tests ok!\n"); | |
| else | |
| CHECK(0); | |
| exit(0); | |
| } |