#include #include #include typedef struct { int * addr; /* base address of array */ int rank; /* rank of array */ int onDPU; /* if base address is FE or BE */ int extents[7]; /* extents of the array */ } DopeVector; extern void mpl_scopy( #ifdef __STDMPL__ int, plural float *, plural float * #endif ); MPL_SCOPY ( fe, be ) int * fe[]; /* FE(vax) address of FE(vax) arguments */ DopeVector * be[]; /* a BE(acu) address of BE(acu) dopevectors */ { int * var1; int dpuVar1; plural float * var2; plural float dpuVar2; plural float * var3; plural float dpuVar3; /* copy in scalar argument from front-end */ { int * ptr; var1 = &dpuVar1; copyIn( (char*)(fe+1), (char*)(&ptr), sizeof(ptr)); if (ptr) copyIn( (char*)(ptr),(char*)(var1), sizeof(*var1)); else { fprintf(stderr, "Error in MPL_SCOPY.m : No address to FE argument 1 \n"); exit(1); } } if (be[2]->onDPU) var2 = (plural float *)be[2]->addr; else /* Arrays must be on DPU */ { fprintf(stderr, "Error in MPL_SCOPY.m : argument 2 must be on DPU\n"); exit(1); } if (be[3]->onDPU) var3 = (plural float *)be[3]->addr; else /* Arrays must be on DPU */ { fprintf(stderr, "Error in MPL_SCOPY.m : argument 3 must be on DPU\n"); exit(1); } /* call the mpl function */ mpl_scopy( *var1, var2, var3); }