#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_strsm_upn( #ifdef __STDMPL__ int, int, int, plural float *, int, plural float * #endif ); MPL_STRSM_UPN ( 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; int * var2; int dpuVar2; int * var3; int dpuVar3; plural float * var4; plural float dpuVar4; int * var5; int dpuVar5; plural float * var6; plural float dpuVar6; /* 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_STRSM_UPN.m : No address to FE argument 1 \n"); exit(1); } } /* copy in scalar argument from front-end */ { int * ptr; var2 = &dpuVar2; copyIn( (char*)(fe+2), (char*)(&ptr), sizeof(ptr)); if (ptr) copyIn( (char*)(ptr),(char*)(var2), sizeof(*var2)); else { fprintf(stderr, "Error in MPL_STRSM_UPN.m : No address to FE argument 2 \n"); exit(1); } } /* copy in scalar argument from front-end */ { int * ptr; var3 = &dpuVar3; copyIn( (char*)(fe+3), (char*)(&ptr), sizeof(ptr)); if (ptr) copyIn( (char*)(ptr),(char*)(var3), sizeof(*var3)); else { fprintf(stderr, "Error in MPL_STRSM_UPN.m : No address to FE argument 3 \n"); exit(1); } } if (be[4]->onDPU) var4 = (plural float *)be[4]->addr; else /* Arrays must be on DPU */ { fprintf(stderr, "Error in MPL_STRSM_UPN.m : argument 4 must be on DPU\n"); exit(1); } /* copy in scalar argument from front-end */ { int * ptr; var5 = &dpuVar5; copyIn( (char*)(fe+5), (char*)(&ptr), sizeof(ptr)); if (ptr) copyIn( (char*)(ptr),(char*)(var5), sizeof(*var5)); else { fprintf(stderr, "Error in MPL_STRSM_UPN.m : No address to FE argument 5 \n"); exit(1); } } if (be[6]->onDPU) var6 = (plural float *)be[6]->addr; else /* Arrays must be on DPU */ { fprintf(stderr, "Error in MPL_STRSM_UPN.m : argument 6 must be on DPU\n"); exit(1); } /* call the mpl function */ mpl_strsm_upn( *var1, *var2, *var3, var4, *var5, var6); }