1*1fd5a2e1SPrashanth Swaminathan/* -*-c-*- */ 2*1fd5a2e1SPrashanth Swaminathan#include "ffitest.h" 3*1fd5a2e1SPrashanth Swaminathan 4*1fd5a2e1SPrashanth Swaminathan#include <stdlib.h> 5*1fd5a2e1SPrashanth Swaminathan#include <complex.h> 6*1fd5a2e1SPrashanth Swaminathan 7*1fd5a2e1SPrashanth Swaminathanstatic _Complex T_C_TYPE many(_Complex T_C_TYPE c1, 8*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c2, 9*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c3, 10*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c4, 11*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c5, 12*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c6, 13*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c7, 14*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c8, 15*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c9, 16*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c10, 17*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c11, 18*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c12, 19*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c13) 20*1fd5a2e1SPrashanth Swaminathan{ 21*1fd5a2e1SPrashanth Swaminathan printf("0 :%f,%fi\n" 22*1fd5a2e1SPrashanth Swaminathan "1 :%f,%fi\n" 23*1fd5a2e1SPrashanth Swaminathan "2 :%f,%fi\n" 24*1fd5a2e1SPrashanth Swaminathan "3 :%f,%fi\n" 25*1fd5a2e1SPrashanth Swaminathan "4 :%f,%fi\n" 26*1fd5a2e1SPrashanth Swaminathan "5 :%f,%fi\n" 27*1fd5a2e1SPrashanth Swaminathan "6 :%f,%fi\n" 28*1fd5a2e1SPrashanth Swaminathan "7 :%f,%fi\n" 29*1fd5a2e1SPrashanth Swaminathan "8 :%f,%fi\n" 30*1fd5a2e1SPrashanth Swaminathan "9 :%f,%fi\n" 31*1fd5a2e1SPrashanth Swaminathan "10:%f,%fi\n" 32*1fd5a2e1SPrashanth Swaminathan "11:%f,%fi\n" 33*1fd5a2e1SPrashanth Swaminathan "12:%f,%fi\n", 34*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c1), T_CONV cimag (c1), 35*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c2), T_CONV cimag (c2), 36*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c3), T_CONV cimag (c3), 37*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c4), T_CONV cimag (c4), 38*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c5), T_CONV cimag (c5), 39*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c6), T_CONV cimag (c6), 40*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c7), T_CONV cimag (c7), 41*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c8), T_CONV cimag (c8), 42*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c9), T_CONV cimag (c9), 43*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c10), T_CONV cimag (c10), 44*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c11), T_CONV cimag (c11), 45*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c12), T_CONV cimag (c12), 46*1fd5a2e1SPrashanth Swaminathan T_CONV creal (c13), T_CONV cimag (c13)); 47*1fd5a2e1SPrashanth Swaminathan 48*1fd5a2e1SPrashanth Swaminathan return (c1+c2-c3-c4+c5+c6+c7-c8-c9-c10-c11+c12+c13); 49*1fd5a2e1SPrashanth Swaminathan} 50*1fd5a2e1SPrashanth Swaminathan 51*1fd5a2e1SPrashanth Swaminathanint main (void) 52*1fd5a2e1SPrashanth Swaminathan{ 53*1fd5a2e1SPrashanth Swaminathan ffi_cif cif; 54*1fd5a2e1SPrashanth Swaminathan ffi_type *args[13]; 55*1fd5a2e1SPrashanth Swaminathan void *values[13]; 56*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE ca[13]; 57*1fd5a2e1SPrashanth Swaminathan _Complex T_C_TYPE c, cc; 58*1fd5a2e1SPrashanth Swaminathan int i; 59*1fd5a2e1SPrashanth Swaminathan 60*1fd5a2e1SPrashanth Swaminathan for (i = 0; i < 13; i++) 61*1fd5a2e1SPrashanth Swaminathan { 62*1fd5a2e1SPrashanth Swaminathan args[i] = &T_FFI_TYPE; 63*1fd5a2e1SPrashanth Swaminathan values[i] = &ca[i]; 64*1fd5a2e1SPrashanth Swaminathan ca[i] = i + (-20 - i) * I; 65*1fd5a2e1SPrashanth Swaminathan } 66*1fd5a2e1SPrashanth Swaminathan 67*1fd5a2e1SPrashanth Swaminathan /* Initialize the cif */ 68*1fd5a2e1SPrashanth Swaminathan CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 13, &T_FFI_TYPE, args) == FFI_OK); 69*1fd5a2e1SPrashanth Swaminathan 70*1fd5a2e1SPrashanth Swaminathan ffi_call(&cif, FFI_FN(many), &c, values); 71*1fd5a2e1SPrashanth Swaminathan 72*1fd5a2e1SPrashanth Swaminathan cc = many(ca[0], ca[1], ca[2], ca[3], ca[4], ca[5], ca[6], ca[7], ca[8], 73*1fd5a2e1SPrashanth Swaminathan ca[9], ca[10], ca[11], ca[12]); 74*1fd5a2e1SPrashanth Swaminathan CHECK(creal (cc) == creal (c)); 75*1fd5a2e1SPrashanth Swaminathan CHECK(cimag (cc) == cimag (c)); 76*1fd5a2e1SPrashanth Swaminathan 77*1fd5a2e1SPrashanth Swaminathan exit(0); 78*1fd5a2e1SPrashanth Swaminathan} 79