/* -*- Mode: c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
* (C) 2012 by Argonne National Laboratory.
* See COPYRIGHT in top-level directory.
*/
/* This file contains functions that support the RMA code but use some "private"
* headers from the mpir_op_util.h in the "coll" directory. The alternative is to put
* this file in src/mpi/rma instead and add -I${top_srcdir}/src/mpi/coll to the
* AM_CPPFLAGS. That option is less preferable because the usage of "mpir_op_util.h"
* can bleed out of this directory and it clutters the CPPFLAGS further. */
#include "mpiimpl.h"
#include "mpir_op_util.h"
/* Returns true iff the given type is valid for use in MPI-3 RMA atomics, such
* as MPI_Compare_and_swap or MPI_Fetch_and_op. Does NOT return MPICH error
* codes. */
#undef FUNCNAME
#define FUNCNAME MPIR_Sched_cb_free_buf
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Type_is_rma_atomic(MPI_Datatype type)
{
switch (type) {
#undef MPIR_OP_TYPE_MACRO
#define MPIR_OP_TYPE_MACRO(mpi_type_, c_type_, type_name_) case mpi_type_:
MPIR_OP_TYPE_GROUP(C_INTEGER)
MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER)
MPIR_OP_TYPE_GROUP(LOGICAL)
MPIR_OP_TYPE_GROUP(BYTE)
MPIR_OP_TYPE_GROUP(C_INTEGER_EXTRA)
MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER_EXTRA)
MPIR_OP_TYPE_GROUP(LOGICAL_EXTRA)
MPIR_OP_TYPE_GROUP(BYTE_EXTRA)
return TRUE;
break;
#undef MPIR_OP_TYPE_MACRO
default:
return FALSE;
break;
}
}
/* Returns true if (a == b) when interepreted using the given datatype.
* Currently, this is only defined for RMA atomic types.
*/
#undef FUNCNAME
#define FUNCNAME MPIR_COMPARE_EQUAL
#undef FCNAME
#define FCNAME MPL_QUOTE(FUNCNAME)
int MPIR_Compare_equal(const void *a, const void *b, MPI_Datatype type)
{
switch (type) {
#undef MPIR_OP_TYPE_MACRO
#define MPIR_OP_TYPE_MACRO(mpi_type_, c_type_, type_name_) \
case mpi_type_: \
if (*(c_type_ *)a == *(c_type_ *)b) \
return TRUE; \
break;
MPIR_OP_TYPE_GROUP(C_INTEGER)
MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER)
MPIR_OP_TYPE_GROUP(LOGICAL)
MPIR_OP_TYPE_GROUP(BYTE)
MPIR_OP_TYPE_GROUP(C_INTEGER_EXTRA)
MPIR_OP_TYPE_GROUP(FORTRAN_INTEGER_EXTRA)
MPIR_OP_TYPE_GROUP(LOGICAL_EXTRA)
#undef MPIR_OP_TYPE_MACRO
default:
return FALSE;
break;
}
return FALSE;
}