Is there any issue with using following structure in the DPI-C function input ?
typedef struct {
real i;
real k;
real l;
real m;
real j;
real toggle;
real real_in[4];
real imag_in[4];
} struct0_T;
c-code
void increment(const struct0_T *a, const double b[4], struct1_T *res,
double re_out_real[4], double re_out_imag[4])
{
res->ij = a->i * b[0] + a->j * b[1];
res->kl = a->k * b[2] + a->l * b[3];
if (a->toggle == 0.0) {
re_out_real[0] = a->real_in[0] * 5.0;
re_out_imag[0] = a->imag_in[0] * 5.0;
re_out_real[1] = a->real_in[1] * 5.0;
re_out_imag[1] = a->imag_in[1] * 5.0;
re_out_real[2] = a->real_in[2] * 5.0;
re_out_imag[2] = a->imag_in[2] * 5.0;
re_out_real[3] = a->real_in[3] * 5.0;
re_out_imag[3] = a->imag_in[3] * 5.0;
} else {
re_out_real[0] = a->real_in[0] * 4.0;
re_out_imag[0] = a->imag_in[0] * 4.0;
re_out_real[1] = a->real_in[1] * 4.0;
re_out_imag[1] = a->imag_in[1] * 4.0;
re_out_real[2] = a->real_in[2] * 4.0;
re_out_imag[2] = a->imag_in[2] * 4.0;
re_out_real[3] = a->real_in[3] * 4.0;
re_out_imag[3] = a->imag_in[3] * 4.0;
}
res->real_out[0] = re_out_real[0];
res->imag_out[0] = re_out_imag[0];
res->real_out[1] = re_out_real[1];
res->imag_out[1] = re_out_imag[1];
res->real_out[2] = re_out_real[2];
res->imag_out[2] = re_out_imag[2];
res->real_out[3] = re_out_real[3];
res->imag_out[3] = re_out_imag[3];
printf("real _in = %f \n", a->real_in[0]);
fflush(stdout);
printf("imag _in = %f \n", a->imag_in[0]);
fflush(stdout);
printf("real _in = %f \n", a->real_in[1]);
fflush(stdout);
printf("imag _in = %f \n", a->imag_in[1]);
fflush(stdout);
printf("real _in = %f \n", a->real_in[2]);
fflush(stdout);
printf("imag _in = %f \n", a->imag_in[2]);
fflush(stdout);
printf("real _in = %f \n", a->real_in[3]);
fflush(stdout);
printf("imag _in = %f \n", a->imag_in[3]);
fflush(stdout);
printf("real _out = %f \n", re_out_real[0]);
fflush(stdout);
printf("imag _out = %f \n", re_out_imag[0]);
fflush(stdout);
printf("real _out = %f \n", re_out_real[1]);
fflush(stdout);
printf("imag _out = %f \n", re_out_imag[1]);
fflush(stdout);
printf("real _out = %f \n", re_out_real[2]);
fflush(stdout);
printf("imag _out = %f \n", re_out_imag[2]);
fflush(stdout);
printf("real _out = %f \n", re_out_real[3]);
fflush(stdout);
printf("imag _out = %f \n", re_out_imag[3]);
fflush(stdout);
}
when this routine is called in SV, it somehow doesnt read the 1st elements of the real_in, imag_in members of the struct. values appear to be shifted by 2 indices. 0th and 1st elments of these arrays read 0.
if the type of these arrays is “int” , then the values are read correctly on the c-side of the interface.
Any comments. Thanks in advance.