work around for buggy new xlc compiler on copper ( with aix53)
authorGengbin Zheng <gzheng@illinois.edu>
Sat, 10 Dec 2005 18:07:40 +0000 (18:07 +0000)
committerGengbin Zheng <gzheng@illinois.edu>
Sat, 10 Dec 2005 18:07:40 +0000 (18:07 +0000)
src/libs/ck-libs/ampi/ampi.C
src/libs/ck-libs/ampi/ampif.C

index 8a79b11d0e07cebf1cee9b533201895f6797de17..bee7658c027920e8d3f7ac41fedfb1e0d3924afa 100644 (file)
@@ -476,19 +476,20 @@ static CProxy_ampiWorlds ampiWorldsGroup;
 static void init_operations()
 {
   CtvInitialize(MPI_Op_Array, mpi_ops);
-  register int i = 0;
-  CtvAccess(mpi_ops)[i++] = MPI_MAX;
-  CtvAccess(mpi_ops)[i++] = MPI_MIN;
-  CtvAccess(mpi_ops)[i++] = MPI_SUM;
-  CtvAccess(mpi_ops)[i++] = MPI_PROD;
-  CtvAccess(mpi_ops)[i++] = MPI_LAND;
-  CtvAccess(mpi_ops)[i++] = MPI_BAND;
-  CtvAccess(mpi_ops)[i++] = MPI_LOR;
-  CtvAccess(mpi_ops)[i++] = MPI_BOR;
-  CtvAccess(mpi_ops)[i++] = MPI_LXOR;
-  CtvAccess(mpi_ops)[i++] = MPI_BXOR;
-  CtvAccess(mpi_ops)[i++] = MPI_MAXLOC;
-  CtvAccess(mpi_ops)[i++] = MPI_MINLOC;
+  int i = 0;
+  MPI_Op *tab = CtvAccess(mpi_ops);
+  tab[i++] = MPI_MAX;
+  tab[i++] = MPI_MIN;
+  tab[i++] = MPI_SUM;
+  tab[i++] = MPI_PROD;
+  tab[i++] = MPI_LAND;
+  tab[i++] = MPI_BAND;
+  tab[i++] = MPI_LOR;
+  tab[i++] = MPI_BOR;
+  tab[i++] = MPI_LXOR;
+  tab[i++] = MPI_BXOR;
+  tab[i++] = MPI_MAXLOC;
+  tab[i++] = MPI_MINLOC;
 
   CtvInitialize(int, mpi_opc);
   CtvAccess(mpi_opc) = i;
@@ -4100,7 +4101,8 @@ CDECL
 int AMPI_Cart_sub(MPI_Comm comm, int *remain_dims, MPI_Comm *newcomm) {
   AMPIAPI("AMPI_Cart_sub");
 
-  int i, color, key, *coords, ndims, rank;
+  int i, *coords, ndims, rank;
+  int color = 1, key = 1;
 
   AMPI_Comm_rank(comm, &rank);
   ampiCommStruct &c = getAmpiParent()->getCart(comm);
index a5ea9e30e58d8a01201909557680ef7c64fa2a72..4afc99daad4de85af9affc2b0dab0adfa6d596fa 100644 (file)
@@ -201,7 +201,8 @@ CtvExtern(int, mpi_opc);
 // must be consistent with mpif.h
 #define MPI_OP_FIRST   100
 
-#define GET_MPI_OP(idx)      (CmiAssert(idx - MPI_OP_FIRST >= 0 && idx - MPI_OP_FIRST < CtvAccess(mpi_opc)), CtvAccess(mpi_ops)[idx - MPI_OP_FIRST])
+//#define GET_MPI_OP(idx)      (CmiAssert(idx - MPI_OP_FIRST >= 0 && idx - MPI_OP_FIRST < CtvAccess(mpi_opc)), CtvAccess(mpi_ops)[idx - MPI_OP_FIRST])
+inline MPI_Op & GET_MPI_OP(int idx)      { MPI_Op *tab=CtvAccess(mpi_ops); return tab[idx - MPI_OP_FIRST]; }
 
 void mpi_init_universe(int *unicomm)
 {
@@ -613,14 +614,14 @@ void mpi_scan(void* sendbuf, void* recvbuf, int* count, int* datatype, int* opc,
 void mpi_op_create(int* function, int* commute, int* opc, int* ierr){
   MPI_Op op;
   *ierr = MPI_Op_create((MPI_User_function *)function, *commute, (MPI_Op *)&op);
-  CtvAccess(mpi_ops)[CtvAccess(mpi_opc)++] = op;
+  GET_MPI_OP(CtvAccess(mpi_opc)++) = op;
   *opc = CtvAccess(mpi_opc)-1;
 }
 
 void mpi_op_free(int* opc, int* ierr){
   MPI_Op op = GET_MPI_OP(*opc);
   GET_MPI_OP(*opc) = NULL;
-  *ierr = MPI_Op_free((MPI_Op *)op);
+  *ierr = MPI_Op_free((MPI_Op *)&op);
 }
 
 void mpi_comm_dup(int *comm, int *newcomm, int *ierr)