root/oshmem/include/pshmem.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Copyright (c) 2014-2017 Mellanox Technologies, Inc.
   3  *                         All rights reserved.
   4  * Copyright (c) 2014      Intel, Inc. All rights reserved
   5  * Copyright (c) 2016-2018 Research Organization for Information Science
   6  *                         and Technology (RIST).  All rights reserved.
   7  * $COPYRIGHT$
   8  *
   9  * Additional copyrights may follow
  10  *
  11  * $HEADER$
  12  */
  13 
  14 #ifndef PSHMEM_SHMEM_H
  15 #define PSHMEM_SHMEM_H
  16 
  17 #include <shmem.h>
  18 #include <pshmemx.h>
  19 
  20 #if defined(c_plusplus) || defined(__cplusplus)
  21 extern "C" {
  22 #endif
  23 
  24 /*
  25  * Profiling API
  26  */
  27 
  28 /*
  29  * Initialization routines
  30  */
  31 OSHMEM_DECLSPEC  void pshmem_init(void);
  32 OSHMEM_DECLSPEC  int pshmem_init_thread(int requested, int *provided);
  33 OSHMEM_DECLSPEC  void pshmem_global_exit(int status);
  34 
  35 /*
  36  * Finalization routines
  37  */
  38 OSHMEM_DECLSPEC  void pshmem_finalize(void);
  39 
  40 /*
  41  * Query routines
  42  */
  43 OSHMEM_DECLSPEC  int pshmem_n_pes(void);
  44 OSHMEM_DECLSPEC  int pshmem_my_pe(void);
  45 OSHMEM_DECLSPEC  void pshmem_query_thread(int *provided);
  46 
  47 /*
  48  * Accessability routines
  49  */
  50 OSHMEM_DECLSPEC int pshmem_pe_accessible(int pe);
  51 OSHMEM_DECLSPEC int pshmem_addr_accessible(const void *addr, int pe);
  52 
  53 /*
  54  * Symmetric heap routines
  55  */
  56 OSHMEM_DECLSPEC  void* pshmem_malloc(size_t size);
  57 OSHMEM_DECLSPEC  void* pshmem_calloc(size_t count, size_t size);
  58 OSHMEM_DECLSPEC  void* pshmem_align(size_t align, size_t size);
  59 OSHMEM_DECLSPEC  void* pshmem_realloc(void *ptr, size_t size);
  60 OSHMEM_DECLSPEC  void pshmem_free(void* ptr);
  61 
  62 /*
  63  * Remote pointer operations
  64  */
  65 OSHMEM_DECLSPEC  void *pshmem_ptr(const void *ptr, int pe);
  66 
  67 /*
  68  * Communication context operations
  69  */
  70 OSHMEM_DECLSPEC int pshmem_ctx_create(long options, shmem_ctx_t *ctx);
  71 OSHMEM_DECLSPEC void pshmem_ctx_destroy(shmem_ctx_t ctx);
  72 
  73 /*
  74  * Elemental put routines
  75  */
  76 OSHMEM_DECLSPEC  void pshmem_ctx_char_p(shmem_ctx_t ctx, char* addr, char value, int pe);
  77 OSHMEM_DECLSPEC  void pshmem_ctx_short_p(shmem_ctx_t ctx, short* addr, short value, int pe);
  78 OSHMEM_DECLSPEC  void pshmem_ctx_int_p(shmem_ctx_t ctx, int* addr, int value, int pe);
  79 OSHMEM_DECLSPEC  void pshmem_ctx_long_p(shmem_ctx_t ctx, long* addr, long value, int pe);
  80 OSHMEM_DECLSPEC  void pshmem_ctx_float_p(shmem_ctx_t ctx, float* addr, float value, int pe);
  81 OSHMEM_DECLSPEC  void pshmem_ctx_double_p(shmem_ctx_t ctx, double* addr, double value, int pe);
  82 OSHMEM_DECLSPEC  void pshmem_ctx_longlong_p(shmem_ctx_t ctx, long long* addr, long long value, int pe);
  83 OSHMEM_DECLSPEC  void pshmem_ctx_schar_p(shmem_ctx_t ctx, signed char* addr, signed char value, int pe);
  84 OSHMEM_DECLSPEC  void pshmem_ctx_uchar_p(shmem_ctx_t ctx, unsigned char* addr, unsigned char value, int pe);
  85 OSHMEM_DECLSPEC  void pshmem_ctx_ushort_p(shmem_ctx_t ctx, unsigned short* addr, unsigned short value, int pe);
  86 OSHMEM_DECLSPEC  void pshmem_ctx_uint_p(shmem_ctx_t ctx, unsigned int* addr, unsigned int value, int pe);
  87 OSHMEM_DECLSPEC  void pshmem_ctx_ulong_p(shmem_ctx_t ctx, unsigned long* addr, unsigned long value, int pe);
  88 OSHMEM_DECLSPEC  void pshmem_ctx_ulonglong_p(shmem_ctx_t ctx, unsigned long long* addr, unsigned long long value, int pe);
  89 OSHMEM_DECLSPEC  void pshmem_ctx_longdouble_p(shmem_ctx_t ctx, long double* addr, long double value, int pe);
  90 OSHMEM_DECLSPEC  void pshmem_ctx_int8_p(shmem_ctx_t ctx, int8_t* addr, int8_t value, int pe);
  91 OSHMEM_DECLSPEC  void pshmem_ctx_int16_p(shmem_ctx_t ctx, int16_t* addr, int16_t value, int pe);
  92 OSHMEM_DECLSPEC  void pshmem_ctx_int32_p(shmem_ctx_t ctx, int32_t* addr, int32_t value, int pe);
  93 OSHMEM_DECLSPEC  void pshmem_ctx_int64_p(shmem_ctx_t ctx, int64_t* addr, int64_t value, int pe);
  94 OSHMEM_DECLSPEC  void pshmem_ctx_uint8_p(shmem_ctx_t ctx, uint8_t* addr, uint8_t value, int pe);
  95 OSHMEM_DECLSPEC  void pshmem_ctx_uint16_p(shmem_ctx_t ctx, uint16_t* addr, uint16_t value, int pe);
  96 OSHMEM_DECLSPEC  void pshmem_ctx_uint32_p(shmem_ctx_t ctx, uint32_t* addr, uint32_t value, int pe);
  97 OSHMEM_DECLSPEC  void pshmem_ctx_uint64_p(shmem_ctx_t ctx, uint64_t* addr, uint64_t value, int pe);
  98 OSHMEM_DECLSPEC  void pshmem_ctx_size_p(shmem_ctx_t ctx, size_t* addr, size_t value, int pe);
  99 OSHMEM_DECLSPEC  void pshmem_ctx_ptrdiff_p(shmem_ctx_t ctx, ptrdiff_t* addr, ptrdiff_t value, int pe);
 100 
 101 OSHMEM_DECLSPEC  void pshmem_char_p(char* addr, char value, int pe);
 102 OSHMEM_DECLSPEC  void pshmem_short_p(short* addr, short value, int pe);
 103 OSHMEM_DECLSPEC  void pshmem_int_p(int* addr, int value, int pe);
 104 OSHMEM_DECLSPEC  void pshmem_long_p(long* addr, long value, int pe);
 105 OSHMEM_DECLSPEC  void pshmem_float_p(float* addr, float value, int pe);
 106 OSHMEM_DECLSPEC  void pshmem_double_p(double* addr, double value, int pe);
 107 OSHMEM_DECLSPEC  void pshmem_longlong_p(long long* addr, long long value, int pe);
 108 OSHMEM_DECLSPEC  void pshmem_schar_p(signed char* addr, signed char value, int pe);
 109 OSHMEM_DECLSPEC  void pshmem_uchar_p(unsigned char* addr, unsigned char value, int pe);
 110 OSHMEM_DECLSPEC  void pshmem_ushort_p(unsigned short* addr, unsigned short value, int pe);
 111 OSHMEM_DECLSPEC  void pshmem_uint_p(unsigned int* addr, unsigned int value, int pe);
 112 OSHMEM_DECLSPEC  void pshmem_ulong_p(unsigned long* addr, unsigned long value, int pe);
 113 OSHMEM_DECLSPEC  void pshmem_ulonglong_p(unsigned long long* addr, unsigned long long value, int pe);
 114 OSHMEM_DECLSPEC  void pshmem_longdouble_p(long double* addr, long double value, int pe);
 115 OSHMEM_DECLSPEC  void pshmem_int8_p(int8_t* addr, int8_t value, int pe);
 116 OSHMEM_DECLSPEC  void pshmem_int16_p(int16_t* addr, int16_t value, int pe);
 117 OSHMEM_DECLSPEC  void pshmem_int32_p(int32_t* addr, int32_t value, int pe);
 118 OSHMEM_DECLSPEC  void pshmem_int64_p(int64_t* addr, int64_t value, int pe);
 119 OSHMEM_DECLSPEC  void pshmem_uint8_p(uint8_t* addr, uint8_t value, int pe);
 120 OSHMEM_DECLSPEC  void pshmem_uint16_p(uint16_t* addr, uint16_t value, int pe);
 121 OSHMEM_DECLSPEC  void pshmem_uint32_p(uint32_t* addr, uint32_t value, int pe);
 122 OSHMEM_DECLSPEC  void pshmem_uint64_p(uint64_t* addr, uint64_t value, int pe);
 123 OSHMEM_DECLSPEC  void pshmem_size_p(size_t* addr, size_t value, int pe);
 124 OSHMEM_DECLSPEC  void pshmem_ptrdiff_p(ptrdiff_t* addr, ptrdiff_t value, int pe);
 125 #if OSHMEM_HAVE_C11
 126 #define pshmem_p(...)                                                \
 127     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                     \
 128             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)), \
 129                 char*:       pshmem_ctx_char_p,                      \
 130                 short*:      pshmem_ctx_short_p,                     \
 131                 int*:        pshmem_ctx_int_p,                       \
 132                 long*:       pshmem_ctx_long_p,                      \
 133                 long long*:  pshmem_ctx_longlong_p,                  \
 134                 signed char*:        pshmem_ctx_schar_p,             \
 135                 unsigned char*:      pshmem_ctx_uchar_p,             \
 136                 unsigned short*:     pshmem_ctx_ushort_p,            \
 137                 unsigned int*:       pshmem_ctx_uint_p,              \
 138                 unsigned long*:      pshmem_ctx_ulong_p,             \
 139                 unsigned long long*: pshmem_ctx_ulonglong_p,         \
 140                 float*:       pshmem_ctx_float_p,                    \
 141                 double*:      pshmem_ctx_double_p,                   \
 142                 long double*: pshmem_ctx_longdouble_p,               \
 143                 default:      __opshmem_datatype_ignore),            \
 144             char*:       pshmem_char_p,                              \
 145             short*:      pshmem_short_p,                             \
 146             int*:        pshmem_int_p,                               \
 147             long*:       pshmem_long_p,                              \
 148             long long*:  pshmem_longlong_p,                          \
 149             signed char*:        pshmem_schar_p,                     \
 150             unsigned char*:      pshmem_uchar_p,                     \
 151             unsigned short*:     pshmem_ushort_p,                    \
 152             unsigned int*:       pshmem_uint_p,                      \
 153             unsigned long*:      pshmem_ulong_p,                     \
 154             unsigned long long*: pshmem_ulonglong_p,                 \
 155             float*:       pshmem_float_p,                            \
 156             double*:      pshmem_double_p,                           \
 157             long double*: pshmem_longdouble_p)(__VA_ARGS__)
 158 #endif
 159 
 160 /*
 161  * Block data put routines
 162  */
 163 OSHMEM_DECLSPEC  void pshmem_ctx_char_put(shmem_ctx_t ctx, char *target, const char *source, size_t len, int pe);
 164 OSHMEM_DECLSPEC  void pshmem_ctx_short_put(shmem_ctx_t ctx, short *target, const short *source, size_t len, int pe);
 165 OSHMEM_DECLSPEC  void pshmem_ctx_int_put(shmem_ctx_t ctx, int *target, const int *source, size_t len, int pe);
 166 OSHMEM_DECLSPEC  void pshmem_ctx_long_put(shmem_ctx_t ctx, long *target, const long *source, size_t len, int pe);
 167 OSHMEM_DECLSPEC  void pshmem_ctx_float_put(shmem_ctx_t ctx, float *target, const float *source, size_t len, int pe);
 168 OSHMEM_DECLSPEC  void pshmem_ctx_double_put(shmem_ctx_t ctx, double *target, const double *source, size_t len, int pe);
 169 OSHMEM_DECLSPEC  void pshmem_ctx_longlong_put(shmem_ctx_t ctx, long long *target, const long long *source, size_t len, int pe);
 170 OSHMEM_DECLSPEC  void pshmem_ctx_schar_put(shmem_ctx_t ctx, signed char *target, const signed char *source, size_t len, int pe);
 171 OSHMEM_DECLSPEC  void pshmem_ctx_uchar_put(shmem_ctx_t ctx, unsigned char *target, const unsigned char *source, size_t len, int pe);
 172 OSHMEM_DECLSPEC  void pshmem_ctx_ushort_put(shmem_ctx_t ctx, unsigned short *target, const unsigned short *source, size_t len, int pe);
 173 OSHMEM_DECLSPEC  void pshmem_ctx_uint_put(shmem_ctx_t ctx, unsigned int *target, const unsigned int *source, size_t len, int pe);
 174 OSHMEM_DECLSPEC  void pshmem_ctx_ulong_put(shmem_ctx_t ctx, unsigned long *target, const unsigned long *source, size_t len, int pe);
 175 OSHMEM_DECLSPEC  void pshmem_ctx_ulonglong_put(shmem_ctx_t ctx, unsigned long long *target, const unsigned long long *source, size_t len, int pe);
 176 OSHMEM_DECLSPEC  void pshmem_ctx_longdouble_put(shmem_ctx_t ctx, long double *target, const long double *source, size_t len, int pe);
 177 OSHMEM_DECLSPEC  void pshmem_ctx_int8_put(shmem_ctx_t ctx, int8_t *target, const int8_t *source, size_t len, int pe);
 178 OSHMEM_DECLSPEC  void pshmem_ctx_int16_put(shmem_ctx_t ctx, int16_t *target, const int16_t *source, size_t len, int pe);
 179 OSHMEM_DECLSPEC  void pshmem_ctx_int32_put(shmem_ctx_t ctx, int32_t *target, const int32_t *source, size_t len, int pe);
 180 OSHMEM_DECLSPEC  void pshmem_ctx_int64_put(shmem_ctx_t ctx, int64_t *target, const int64_t *source, size_t len, int pe);
 181 OSHMEM_DECLSPEC  void pshmem_ctx_uint8_put(shmem_ctx_t ctx, uint8_t *target, const uint8_t *source, size_t len, int pe);
 182 OSHMEM_DECLSPEC  void pshmem_ctx_uint16_put(shmem_ctx_t ctx, uint16_t *target, const uint16_t *source, size_t len, int pe);
 183 OSHMEM_DECLSPEC  void pshmem_ctx_uint32_put(shmem_ctx_t ctx, uint32_t *target, const uint32_t *source, size_t len, int pe);
 184 OSHMEM_DECLSPEC  void pshmem_ctx_uint64_put(shmem_ctx_t ctx, uint64_t *target, const uint64_t *source, size_t len, int pe);
 185 OSHMEM_DECLSPEC  void pshmem_ctx_size_put(shmem_ctx_t ctx, size_t *target, const size_t *source, size_t len, int pe);
 186 OSHMEM_DECLSPEC  void pshmem_ctx_ptrdiff_put(shmem_ctx_t ctx, ptrdiff_t *target, const ptrdiff_t *source, size_t len, int pe);
 187 
 188 OSHMEM_DECLSPEC  void pshmem_char_put(char *target, const char *source, size_t len, int pe);
 189 OSHMEM_DECLSPEC  void pshmem_short_put(short *target, const short *source, size_t len, int pe);
 190 OSHMEM_DECLSPEC  void pshmem_int_put(int *target, const int *source, size_t len, int pe);
 191 OSHMEM_DECLSPEC  void pshmem_long_put(long *target, const long *source, size_t len, int pe);
 192 OSHMEM_DECLSPEC  void pshmem_float_put(float *target, const float *source, size_t len, int pe);
 193 OSHMEM_DECLSPEC  void pshmem_double_put(double *target, const double *source, size_t len, int pe);
 194 OSHMEM_DECLSPEC  void pshmem_longlong_put(long long *target, const long long *source, size_t len, int pe);
 195 OSHMEM_DECLSPEC  void pshmem_schar_put(signed char *target, const signed char *source, size_t len, int pe);
 196 OSHMEM_DECLSPEC  void pshmem_uchar_put(unsigned char *target, const unsigned char *source, size_t len, int pe);
 197 OSHMEM_DECLSPEC  void pshmem_ushort_put(unsigned short *target, const unsigned short *source, size_t len, int pe);
 198 OSHMEM_DECLSPEC  void pshmem_uint_put(unsigned int *target, const unsigned int *source, size_t len, int pe);
 199 OSHMEM_DECLSPEC  void pshmem_ulong_put(unsigned long *target, const unsigned long *source, size_t len, int pe);
 200 OSHMEM_DECLSPEC  void pshmem_ulonglong_put(unsigned long long *target, const unsigned long long *source, size_t len, int pe);
 201 OSHMEM_DECLSPEC  void pshmem_longdouble_put(long double *target, const long double *source, size_t len, int pe);
 202 OSHMEM_DECLSPEC  void pshmem_int8_put(int8_t *target, const int8_t *source, size_t len, int pe);
 203 OSHMEM_DECLSPEC  void pshmem_int16_put(int16_t *target, const int16_t *source, size_t len, int pe);
 204 OSHMEM_DECLSPEC  void pshmem_int32_put(int32_t *target, const int32_t *source, size_t len, int pe);
 205 OSHMEM_DECLSPEC  void pshmem_int64_put(int64_t *target, const int64_t *source, size_t len, int pe);
 206 OSHMEM_DECLSPEC  void pshmem_uint8_put(uint8_t *target, const uint8_t *source, size_t len, int pe);
 207 OSHMEM_DECLSPEC  void pshmem_uint16_put(uint16_t *target, const uint16_t *source, size_t len, int pe);
 208 OSHMEM_DECLSPEC  void pshmem_uint32_put(uint32_t *target, const uint32_t *source, size_t len, int pe);
 209 OSHMEM_DECLSPEC  void pshmem_uint64_put(uint64_t *target, const uint64_t *source, size_t len, int pe);
 210 OSHMEM_DECLSPEC  void pshmem_size_put(size_t *target, const size_t *source, size_t len, int pe);
 211 OSHMEM_DECLSPEC  void pshmem_ptrdiff_put(ptrdiff_t *target, const ptrdiff_t *source, size_t len, int pe);
 212 #if OSHMEM_HAVE_C11
 213 #define pshmem_put(...)                                              \
 214     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                     \
 215             shmem_ctx_t: _Generic(&*(__OSHMEM_VAR_ARG2(__VA_ARGS__)),\
 216                 char*:        pshmem_ctx_char_put,                   \
 217                 short*:       pshmem_ctx_short_put,                  \
 218                 int*:         pshmem_ctx_int_put,                    \
 219                 long*:        pshmem_ctx_long_put,                   \
 220                 long long*:   pshmem_ctx_longlong_put,               \
 221                 signed char*:        pshmem_ctx_schar_put,           \
 222                 unsigned char*:      pshmem_ctx_uchar_put,           \
 223                 unsigned short*:     pshmem_ctx_ushort_put,          \
 224                 unsigned int*:       pshmem_ctx_uint_put,            \
 225                 unsigned long*:      pshmem_ctx_ulong_put,           \
 226                 unsigned long long*: pshmem_ctx_ulonglong_put,       \
 227                 float*:       pshmem_ctx_float_put,                  \
 228                 double*:      pshmem_ctx_double_put,                 \
 229                 long double*: pshmem_ctx_longdouble_put,             \
 230                 default:      __opshmem_datatype_ignore),            \
 231             char*:       pshmem_char_put,                            \
 232             short*:      pshmem_short_put,                           \
 233             int*:        pshmem_int_put,                             \
 234             long*:       pshmem_long_put,                            \
 235             long long*:  pshmem_longlong_put,                        \
 236             signed char*:        pshmem_schar_put,                   \
 237             unsigned char*:      pshmem_uchar_put,                   \
 238             unsigned short*:     pshmem_ushort_put,                  \
 239             unsigned int*:       pshmem_uint_put,                    \
 240             unsigned long*:      pshmem_ulong_put,                   \
 241             unsigned long long*: pshmem_ulonglong_put,               \
 242             float*:       pshmem_float_put,                          \
 243             double*:      pshmem_double_put,                         \
 244             long double*: pshmem_longdouble_put)(__VA_ARGS__)
 245 #endif
 246 
 247 OSHMEM_DECLSPEC  void pshmem_ctx_put8(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 248 OSHMEM_DECLSPEC  void pshmem_ctx_put16(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 249 OSHMEM_DECLSPEC  void pshmem_ctx_put32(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 250 OSHMEM_DECLSPEC  void pshmem_ctx_put64(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 251 OSHMEM_DECLSPEC  void pshmem_ctx_put128(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 252 OSHMEM_DECLSPEC  void pshmem_ctx_putmem(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 253 
 254 OSHMEM_DECLSPEC  void pshmem_put8(void *target, const void *source, size_t len, int pe);
 255 OSHMEM_DECLSPEC  void pshmem_put16(void *target, const void *source, size_t len, int pe);
 256 OSHMEM_DECLSPEC  void pshmem_put32(void *target, const void *source, size_t len, int pe);
 257 OSHMEM_DECLSPEC  void pshmem_put64(void *target, const void *source, size_t len, int pe);
 258 OSHMEM_DECLSPEC  void pshmem_put128(void *target, const void *source, size_t len, int pe);
 259 OSHMEM_DECLSPEC  void pshmem_putmem(void *target, const void *source, size_t len, int pe);
 260 
 261 /*
 262  * Strided put routines
 263  */
 264 OSHMEM_DECLSPEC void pshmem_ctx_char_iput(shmem_ctx_t ctx, char* target, const char* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 265 OSHMEM_DECLSPEC void pshmem_ctx_short_iput(shmem_ctx_t ctx, short* target, const short* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 266 OSHMEM_DECLSPEC void pshmem_ctx_int_iput(shmem_ctx_t ctx, int* target, const int* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 267 OSHMEM_DECLSPEC void pshmem_ctx_long_iput(shmem_ctx_t ctx, long* target, const long* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 268 OSHMEM_DECLSPEC void pshmem_ctx_float_iput(shmem_ctx_t ctx, float* target, const float* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 269 OSHMEM_DECLSPEC void pshmem_ctx_double_iput(shmem_ctx_t ctx, double* target, const double* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 270 OSHMEM_DECLSPEC void pshmem_ctx_longlong_iput(shmem_ctx_t ctx, long long* target, const long long* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 271 OSHMEM_DECLSPEC void pshmem_ctx_schar_iput(shmem_ctx_t ctx, signed char* target, const signed char* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 272 OSHMEM_DECLSPEC void pshmem_ctx_uchar_iput(shmem_ctx_t ctx, unsigned char* target, const unsigned char* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 273 OSHMEM_DECLSPEC void pshmem_ctx_ushort_iput(shmem_ctx_t ctx, unsigned short* target, const unsigned short* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 274 OSHMEM_DECLSPEC void pshmem_ctx_uint_iput(shmem_ctx_t ctx, unsigned int* target, const unsigned int* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 275 OSHMEM_DECLSPEC void pshmem_ctx_ulong_iput(shmem_ctx_t ctx, unsigned long* target, const unsigned long* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 276 OSHMEM_DECLSPEC void pshmem_ctx_ulonglong_iput(shmem_ctx_t ctx, unsigned long long* target, const unsigned long long* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 277 OSHMEM_DECLSPEC void pshmem_ctx_longdouble_iput(shmem_ctx_t ctx, long double* target, const long double* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 278 OSHMEM_DECLSPEC void pshmem_ctx_int8_iput(shmem_ctx_t ctx, int8_t* target, const int8_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 279 OSHMEM_DECLSPEC void pshmem_ctx_int16_iput(shmem_ctx_t ctx, int16_t* target, const int16_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 280 OSHMEM_DECLSPEC void pshmem_ctx_int32_iput(shmem_ctx_t ctx, int32_t* target, const int32_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 281 OSHMEM_DECLSPEC void pshmem_ctx_int64_iput(shmem_ctx_t ctx, int64_t* target, const int64_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 282 OSHMEM_DECLSPEC void pshmem_ctx_uint8_iput(shmem_ctx_t ctx, uint8_t* target, const uint8_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 283 OSHMEM_DECLSPEC void pshmem_ctx_uint16_iput(shmem_ctx_t ctx, uint16_t* target, const uint16_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 284 OSHMEM_DECLSPEC void pshmem_ctx_uint32_iput(shmem_ctx_t ctx, uint32_t* target, const uint32_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 285 OSHMEM_DECLSPEC void pshmem_ctx_uint64_iput(shmem_ctx_t ctx, uint64_t* target, const uint64_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 286 OSHMEM_DECLSPEC void pshmem_ctx_size_iput(shmem_ctx_t ctx, size_t* target, const size_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 287 OSHMEM_DECLSPEC void pshmem_ctx_ptrdiff_iput(shmem_ctx_t ctx, ptrdiff_t* target, const ptrdiff_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 288 
 289 OSHMEM_DECLSPEC void pshmem_char_iput(char* target, const char* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 290 OSHMEM_DECLSPEC void pshmem_short_iput(short* target, const short* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 291 OSHMEM_DECLSPEC void pshmem_int_iput(int* target, const int* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 292 OSHMEM_DECLSPEC void pshmem_long_iput(long* target, const long* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 293 OSHMEM_DECLSPEC void pshmem_float_iput(float* target, const float* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 294 OSHMEM_DECLSPEC void pshmem_double_iput(double* target, const double* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 295 OSHMEM_DECLSPEC void pshmem_longlong_iput(long long* target, const long long* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 296 OSHMEM_DECLSPEC void pshmem_schar_iput(signed char* target, const signed char* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 297 OSHMEM_DECLSPEC void pshmem_uchar_iput(unsigned char* target, const unsigned char* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 298 OSHMEM_DECLSPEC void pshmem_ushort_iput(unsigned short* target, const unsigned short* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 299 OSHMEM_DECLSPEC void pshmem_uint_iput(unsigned int* target, const unsigned int* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 300 OSHMEM_DECLSPEC void pshmem_ulong_iput(unsigned long* target, const unsigned long* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 301 OSHMEM_DECLSPEC void pshmem_ulonglong_iput(unsigned long long* target, const unsigned long long* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 302 OSHMEM_DECLSPEC void pshmem_longdouble_iput(long double* target, const long double* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 303 OSHMEM_DECLSPEC void pshmem_int8_iput(int8_t* target, const int8_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 304 OSHMEM_DECLSPEC void pshmem_int16_iput(int16_t* target, const int16_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 305 OSHMEM_DECLSPEC void pshmem_int32_iput(int32_t* target, const int32_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 306 OSHMEM_DECLSPEC void pshmem_int64_iput(int64_t* target, const int64_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 307 OSHMEM_DECLSPEC void pshmem_uint8_iput(uint8_t* target, const uint8_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 308 OSHMEM_DECLSPEC void pshmem_uint16_iput(uint16_t* target, const uint16_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 309 OSHMEM_DECLSPEC void pshmem_uint32_iput(uint32_t* target, const uint32_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 310 OSHMEM_DECLSPEC void pshmem_uint64_iput(uint64_t* target, const uint64_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 311 OSHMEM_DECLSPEC void pshmem_size_iput(size_t* target, const size_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 312 OSHMEM_DECLSPEC void pshmem_ptrdiff_iput(ptrdiff_t* target, const ptrdiff_t* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 313 #if OSHMEM_HAVE_C11
 314 #define pshmem_iput(...)                                             \
 315     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                     \
 316             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)), \
 317                 char*:        pshmem_ctx_char_iput,                  \
 318                 short*:       pshmem_ctx_short_iput,                 \
 319                 int*:         pshmem_ctx_int_iput,                   \
 320                 long*:        pshmem_ctx_long_iput,                  \
 321                 long long*:   pshmem_ctx_longlong_iput,              \
 322                 signed char*:        pshmem_ctx_schar_iput,          \
 323                 unsigned char*:      pshmem_ctx_uchar_iput,          \
 324                 unsigned short*:     pshmem_ctx_ushort_iput,         \
 325                 unsigned int*:       pshmem_ctx_uint_iput,           \
 326                 unsigned long*:      pshmem_ctx_ulong_iput,          \
 327                 unsigned long long*: pshmem_ctx_ulonglong_iput,      \
 328                 float*:       pshmem_ctx_float_iput,                 \
 329                 double*:      pshmem_ctx_double_iput,                \
 330                 long double*: pshmem_ctx_longdouble_iput,            \
 331                 default:      __opshmem_datatype_ignore),            \
 332             char*:       pshmem_char_iput,                           \
 333             short*:      pshmem_short_iput,                          \
 334             int*:        pshmem_int_iput,                            \
 335             long*:       pshmem_long_iput,                           \
 336             long long*:  pshmem_longlong_iput,                       \
 337             signed char*:        pshmem_schar_iput,                  \
 338             unsigned char*:      pshmem_uchar_iput,                  \
 339             unsigned short*:     pshmem_ushort_iput,                 \
 340             unsigned int*:       pshmem_uint_iput,                   \
 341             unsigned long*:      pshmem_ulong_iput,                  \
 342             unsigned long long*: pshmem_ulonglong_iput,              \
 343             float*:       pshmem_float_iput,                         \
 344             double*:      pshmem_double_iput,                        \
 345             long double*: pshmem_longdouble_iput)(__VA_ARGS__)
 346 #endif
 347 
 348 OSHMEM_DECLSPEC void pshmem_ctx_iput8(shmem_ctx_t ctx, void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 349 OSHMEM_DECLSPEC void pshmem_ctx_iput16(shmem_ctx_t ctx, void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 350 OSHMEM_DECLSPEC void pshmem_ctx_iput32(shmem_ctx_t ctx, void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 351 OSHMEM_DECLSPEC void pshmem_ctx_iput64(shmem_ctx_t ctx, void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 352 OSHMEM_DECLSPEC void pshmem_ctx_iput128(shmem_ctx_t ctx, void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 353 
 354 OSHMEM_DECLSPEC void pshmem_iput8(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 355 OSHMEM_DECLSPEC void pshmem_iput16(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 356 OSHMEM_DECLSPEC void pshmem_iput32(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 357 OSHMEM_DECLSPEC void pshmem_iput64(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 358 OSHMEM_DECLSPEC void pshmem_iput128(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 359 
 360 /*
 361  * Nonblocking put routines
 362  */
 363 OSHMEM_DECLSPEC  void pshmem_ctx_char_put_nbi(shmem_ctx_t ctx, char *target, const char *source, size_t len, int pe);
 364 OSHMEM_DECLSPEC  void pshmem_ctx_short_put_nbi(shmem_ctx_t ctx, short *target, const short *source, size_t len, int pe);
 365 OSHMEM_DECLSPEC  void pshmem_ctx_int_put_nbi(shmem_ctx_t ctx, int *target, const int *source, size_t len, int pe);
 366 OSHMEM_DECLSPEC  void pshmem_ctx_long_put_nbi(shmem_ctx_t ctx, long *target, const long *source, size_t len, int pe);
 367 OSHMEM_DECLSPEC  void pshmem_ctx_float_put_nbi(shmem_ctx_t ctx, float *target, const float *source, size_t len, int pe);
 368 OSHMEM_DECLSPEC  void pshmem_ctx_double_put_nbi(shmem_ctx_t ctx, double *target, const double *source, size_t len, int pe);
 369 OSHMEM_DECLSPEC  void pshmem_ctx_longlong_put_nbi(shmem_ctx_t ctx, long long *target, const long long *source, size_t len, int pe);
 370 OSHMEM_DECLSPEC  void pshmem_ctx_schar_put_nbi(shmem_ctx_t ctx, signed char *target, const signed char *source, size_t len, int pe);
 371 OSHMEM_DECLSPEC  void pshmem_ctx_uchar_put_nbi(shmem_ctx_t ctx, unsigned char *target, const unsigned char *source, size_t len, int pe);
 372 OSHMEM_DECLSPEC  void pshmem_ctx_ushort_put_nbi(shmem_ctx_t ctx, unsigned short *target, const unsigned short *source, size_t len, int pe);
 373 OSHMEM_DECLSPEC  void pshmem_ctx_uint_put_nbi(shmem_ctx_t ctx, unsigned int *target, const unsigned int *source, size_t len, int pe);
 374 OSHMEM_DECLSPEC  void pshmem_ctx_ulong_put_nbi(shmem_ctx_t ctx, unsigned long *target, const unsigned long *source, size_t len, int pe);
 375 OSHMEM_DECLSPEC  void pshmem_ctx_ulonglong_put_nbi(shmem_ctx_t ctx, unsigned long long *target, const unsigned long long *source, size_t len, int pe);
 376 OSHMEM_DECLSPEC  void pshmem_ctx_longdouble_put_nbi(shmem_ctx_t ctx, long double *target, const long double *source, size_t len, int pe);
 377 OSHMEM_DECLSPEC  void pshmem_ctx_int8_put_nbi(shmem_ctx_t ctx, int8_t *target, const int8_t *source, size_t len, int pe);
 378 OSHMEM_DECLSPEC  void pshmem_ctx_int16_put_nbi(shmem_ctx_t ctx, int16_t *target, const int16_t *source, size_t len, int pe);
 379 OSHMEM_DECLSPEC  void pshmem_ctx_int32_put_nbi(shmem_ctx_t ctx, int32_t *target, const int32_t *source, size_t len, int pe);
 380 OSHMEM_DECLSPEC  void pshmem_ctx_int64_put_nbi(shmem_ctx_t ctx, int64_t *target, const int64_t *source, size_t len, int pe);
 381 OSHMEM_DECLSPEC  void pshmem_ctx_uint8_put_nbi(shmem_ctx_t ctx, uint8_t *target, const uint8_t *source, size_t len, int pe);
 382 OSHMEM_DECLSPEC  void pshmem_ctx_uint16_put_nbi(shmem_ctx_t ctx, uint16_t *target, const uint16_t *source, size_t len, int pe);
 383 OSHMEM_DECLSPEC  void pshmem_ctx_uint32_put_nbi(shmem_ctx_t ctx, uint32_t *target, const uint32_t *source, size_t len, int pe);
 384 OSHMEM_DECLSPEC  void pshmem_ctx_uint64_put_nbi(shmem_ctx_t ctx, uint64_t *target, const uint64_t *source, size_t len, int pe);
 385 OSHMEM_DECLSPEC  void pshmem_ctx_size_put_nbi(shmem_ctx_t ctx, size_t *target, const size_t *source, size_t len, int pe);
 386 OSHMEM_DECLSPEC  void pshmem_ctx_ptrdiff_put_nbi(shmem_ctx_t ctx, ptrdiff_t *target, const ptrdiff_t *source, size_t len, int pe);
 387 
 388 OSHMEM_DECLSPEC  void pshmem_char_put_nbi(char *target, const char *source, size_t len, int pe);
 389 OSHMEM_DECLSPEC  void pshmem_short_put_nbi(short *target, const short *source, size_t len, int pe);
 390 OSHMEM_DECLSPEC  void pshmem_int_put_nbi(int *target, const int *source, size_t len, int pe);
 391 OSHMEM_DECLSPEC  void pshmem_long_put_nbi(long *target, const long *source, size_t len, int pe);
 392 OSHMEM_DECLSPEC  void pshmem_float_put_nbi(float *target, const float *source, size_t len, int pe);
 393 OSHMEM_DECLSPEC  void pshmem_double_put_nbi(double *target, const double *source, size_t len, int pe);
 394 OSHMEM_DECLSPEC  void pshmem_longlong_put_nbi(long long *target, const long long *source, size_t len, int pe);
 395 OSHMEM_DECLSPEC  void pshmem_schar_put_nbi(signed char *target, const signed char *source, size_t len, int pe);
 396 OSHMEM_DECLSPEC  void pshmem_uchar_put_nbi(unsigned char *target, const unsigned char *source, size_t len, int pe);
 397 OSHMEM_DECLSPEC  void pshmem_ushort_put_nbi(unsigned short *target, const unsigned short *source, size_t len, int pe);
 398 OSHMEM_DECLSPEC  void pshmem_uint_put_nbi(unsigned int *target, const unsigned int *source, size_t len, int pe);
 399 OSHMEM_DECLSPEC  void pshmem_ulong_put_nbi(unsigned long *target, const unsigned long *source, size_t len, int pe);
 400 OSHMEM_DECLSPEC  void pshmem_ulonglong_put_nbi(unsigned long long *target, const unsigned long long *source, size_t len, int pe);
 401 OSHMEM_DECLSPEC  void pshmem_longdouble_put_nbi(long double *target, const long double *source, size_t len, int pe);
 402 OSHMEM_DECLSPEC  void pshmem_int8_put_nbi(int8_t *target, const int8_t *source, size_t len, int pe);
 403 OSHMEM_DECLSPEC  void pshmem_int16_put_nbi(int16_t *target, const int16_t *source, size_t len, int pe);
 404 OSHMEM_DECLSPEC  void pshmem_int32_put_nbi(int32_t *target, const int32_t *source, size_t len, int pe);
 405 OSHMEM_DECLSPEC  void pshmem_int64_put_nbi(int64_t *target, const int64_t *source, size_t len, int pe);
 406 OSHMEM_DECLSPEC  void pshmem_uint8_put_nbi(uint8_t *target, const uint8_t *source, size_t len, int pe);
 407 OSHMEM_DECLSPEC  void pshmem_uint16_put_nbi(uint16_t *target, const uint16_t *source, size_t len, int pe);
 408 OSHMEM_DECLSPEC  void pshmem_uint32_put_nbi(uint32_t *target, const uint32_t *source, size_t len, int pe);
 409 OSHMEM_DECLSPEC  void pshmem_uint64_put_nbi(uint64_t *target, const uint64_t *source, size_t len, int pe);
 410 OSHMEM_DECLSPEC  void pshmem_size_put_nbi(size_t *target, const size_t *source, size_t len, int pe);
 411 OSHMEM_DECLSPEC  void pshmem_ptrdiff_put_nbi(ptrdiff_t *target, const ptrdiff_t *source, size_t len, int pe);
 412 #if OSHMEM_HAVE_C11
 413 #define pshmem_put_nbi(...)                                          \
 414     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                     \
 415             shmem_ctx_t: _Generic(&*(__OSHMEM_VAR_ARG2(__VA_ARGS__)),\
 416                 char*:        pshmem_ctx_char_put_nbi,               \
 417                 short*:       pshmem_ctx_short_put_nbi,              \
 418                 int*:         pshmem_ctx_int_put_nbi,                \
 419                 long*:        pshmem_ctx_long_put_nbi,               \
 420                 long long*:   pshmem_ctx_longlong_put_nbi,           \
 421                 signed char*:        pshmem_ctx_schar_put_nbi,       \
 422                 unsigned char*:      pshmem_ctx_uchar_put_nbi,       \
 423                 unsigned short*:     pshmem_ctx_ushort_put_nbi,      \
 424                 unsigned int*:       pshmem_ctx_uint_put_nbi,        \
 425                 unsigned long*:      pshmem_ctx_ulong_put_nbi,       \
 426                 unsigned long long*: pshmem_ctx_ulonglong_put_nbi,   \
 427                 float*:       pshmem_ctx_float_put_nbi,              \
 428                 double*:      pshmem_ctx_double_put_nbi,             \
 429                 long double*: pshmem_ctx_longdouble_put_nbi,         \
 430                 default:      __opshmem_datatype_ignore),            \
 431             char*:       pshmem_char_put_nbi,                        \
 432             short*:      pshmem_short_put_nbi,                       \
 433             int*:        pshmem_int_put_nbi,                         \
 434             long*:       pshmem_long_put_nbi,                        \
 435             long long*:  pshmem_longlong_put_nbi,                    \
 436             signed char*:        pshmem_schar_put_nbi,               \
 437             unsigned char*:      pshmem_uchar_put_nbi,               \
 438             unsigned short*:     pshmem_ushort_put_nbi,              \
 439             unsigned int*:       pshmem_uint_put_nbi,                \
 440             unsigned long*:      pshmem_ulong_put_nbi,               \
 441             unsigned long long*: pshmem_ulonglong_put_nbi,           \
 442             float*:       pshmem_float_put_nbi,                      \
 443             double*:      pshmem_double_put_nbi,                     \
 444             long double*: pshmem_longdouble_put_nbi)(__VA_ARGS__)
 445 #endif
 446 
 447 OSHMEM_DECLSPEC  void pshmem_ctx_put8_nbi(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 448 OSHMEM_DECLSPEC  void pshmem_ctx_put16_nbi(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 449 OSHMEM_DECLSPEC  void pshmem_ctx_put32_nbi(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 450 OSHMEM_DECLSPEC  void pshmem_ctx_put64_nbi(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 451 OSHMEM_DECLSPEC  void pshmem_ctx_put128_nbi(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 452 OSHMEM_DECLSPEC  void pshmem_ctx_putmem_nbi(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 453 
 454 OSHMEM_DECLSPEC  void pshmem_put8_nbi(void *target, const void *source, size_t len, int pe);
 455 OSHMEM_DECLSPEC  void pshmem_put16_nbi(void *target, const void *source, size_t len, int pe);
 456 OSHMEM_DECLSPEC  void pshmem_put32_nbi(void *target, const void *source, size_t len, int pe);
 457 OSHMEM_DECLSPEC  void pshmem_put64_nbi(void *target, const void *source, size_t len, int pe);
 458 OSHMEM_DECLSPEC  void pshmem_put128_nbi(void *target, const void *source, size_t len, int pe);
 459 OSHMEM_DECLSPEC  void pshmem_putmem_nbi(void *target, const void *source, size_t len, int pe);
 460 
 461 /*
 462  * Elemental get routines
 463  */
 464 OSHMEM_DECLSPEC  char pshmem_ctx_char_g(shmem_ctx_t ctx, const char* addr, int pe);
 465 OSHMEM_DECLSPEC  short pshmem_ctx_short_g(shmem_ctx_t ctx, const short* addr, int pe);
 466 OSHMEM_DECLSPEC  int pshmem_ctx_int_g(shmem_ctx_t ctx, const int* addr, int pe);
 467 OSHMEM_DECLSPEC  long pshmem_ctx_long_g(shmem_ctx_t ctx, const long* addr, int pe);
 468 OSHMEM_DECLSPEC  float pshmem_ctx_float_g(shmem_ctx_t ctx, const float* addr, int pe);
 469 OSHMEM_DECLSPEC  double pshmem_ctx_double_g(shmem_ctx_t ctx, const double* addr, int pe);
 470 OSHMEM_DECLSPEC  long long pshmem_ctx_longlong_g(shmem_ctx_t ctx, const long long* addr, int pe);
 471 OSHMEM_DECLSPEC  long double pshmem_ctx_longdouble_g(shmem_ctx_t ctx, const long double* addr, int pe);
 472 OSHMEM_DECLSPEC  signed char pshmem_ctx_schar_g(shmem_ctx_t ctx, const signed char* addr, int pe);
 473 OSHMEM_DECLSPEC  unsigned char pshmem_ctx_uchar_g(shmem_ctx_t ctx, const unsigned char* addr, int pe);
 474 OSHMEM_DECLSPEC  unsigned short pshmem_ctx_ushort_g(shmem_ctx_t ctx, const unsigned short* addr, int pe);
 475 OSHMEM_DECLSPEC  unsigned int pshmem_ctx_uint_g(shmem_ctx_t ctx, const unsigned int* addr, int pe);
 476 OSHMEM_DECLSPEC  unsigned long pshmem_ctx_ulong_g(shmem_ctx_t ctx, const unsigned long* addr, int pe);
 477 OSHMEM_DECLSPEC  unsigned long long pshmem_ctx_ulonglong_g(shmem_ctx_t ctx, const unsigned long long* addr, int pe);
 478 OSHMEM_DECLSPEC  int8_t pshmem_ctx_int8_g(shmem_ctx_t ctx, const int8_t* addr, int pe);
 479 OSHMEM_DECLSPEC  int16_t pshmem_ctx_int16_g(shmem_ctx_t ctx, const int16_t* addr, int pe);
 480 OSHMEM_DECLSPEC  int32_t pshmem_ctx_int32_g(shmem_ctx_t ctx, const int32_t* addr, int pe);
 481 OSHMEM_DECLSPEC  int64_t pshmem_ctx_int64_g(shmem_ctx_t ctx, const int64_t* addr, int pe);
 482 OSHMEM_DECLSPEC  uint8_t pshmem_ctx_uint8_g(shmem_ctx_t ctx, const uint8_t* addr, int pe);
 483 OSHMEM_DECLSPEC  uint16_t pshmem_ctx_uint16_g(shmem_ctx_t ctx, const uint16_t* addr, int pe);
 484 OSHMEM_DECLSPEC  uint32_t pshmem_ctx_uint32_g(shmem_ctx_t ctx, const uint32_t* addr, int pe);
 485 OSHMEM_DECLSPEC  uint64_t pshmem_ctx_uint64_g(shmem_ctx_t ctx, const uint64_t* addr, int pe);
 486 OSHMEM_DECLSPEC  size_t pshmem_ctx_size_g(shmem_ctx_t ctx, const size_t* addr, int pe);
 487 OSHMEM_DECLSPEC  ptrdiff_t pshmem_ctx_ptrdiff_g(shmem_ctx_t ctx, const ptrdiff_t* addr, int pe);
 488 
 489 OSHMEM_DECLSPEC  char pshmem_char_g(const char* addr, int pe);
 490 OSHMEM_DECLSPEC  short pshmem_short_g(const short* addr, int pe);
 491 OSHMEM_DECLSPEC  int pshmem_int_g(const int* addr, int pe);
 492 OSHMEM_DECLSPEC  long pshmem_long_g(const long* addr, int pe);
 493 OSHMEM_DECLSPEC  float pshmem_float_g(const float* addr, int pe);
 494 OSHMEM_DECLSPEC  double pshmem_double_g(const double* addr, int pe);
 495 OSHMEM_DECLSPEC  long long pshmem_longlong_g(const long long* addr, int pe);
 496 OSHMEM_DECLSPEC  long double pshmem_longdouble_g(const long double* addr, int pe);
 497 OSHMEM_DECLSPEC  signed char pshmem_schar_g(const signed char* addr, int pe);
 498 OSHMEM_DECLSPEC  unsigned char pshmem_uchar_g(const unsigned char* addr, int pe);
 499 OSHMEM_DECLSPEC  unsigned short pshmem_ushort_g(const unsigned short* addr, int pe);
 500 OSHMEM_DECLSPEC  unsigned int pshmem_uint_g(const unsigned int* addr, int pe);
 501 OSHMEM_DECLSPEC  unsigned long pshmem_ulong_g(const unsigned long* addr, int pe);
 502 OSHMEM_DECLSPEC  unsigned long long pshmem_ulonglong_g(const unsigned long long* addr, int pe);
 503 OSHMEM_DECLSPEC  int8_t pshmem_int8_g(const int8_t* addr, int pe);
 504 OSHMEM_DECLSPEC  int16_t pshmem_int16_g(const int16_t* addr, int pe);
 505 OSHMEM_DECLSPEC  int32_t pshmem_int32_g(const int32_t* addr, int pe);
 506 OSHMEM_DECLSPEC  int64_t pshmem_int64_g(const int64_t* addr, int pe);
 507 OSHMEM_DECLSPEC  uint8_t pshmem_uint8_g(const uint8_t* addr, int pe);
 508 OSHMEM_DECLSPEC  uint16_t pshmem_uint16_g(const uint16_t* addr, int pe);
 509 OSHMEM_DECLSPEC  uint32_t pshmem_uint32_g(const uint32_t* addr, int pe);
 510 OSHMEM_DECLSPEC  uint64_t pshmem_uint64_g(const uint64_t* addr, int pe);
 511 OSHMEM_DECLSPEC  size_t pshmem_size_g(const size_t* addr, int pe);
 512 OSHMEM_DECLSPEC  ptrdiff_t pshmem_ptrdiff_g(const ptrdiff_t* addr, int pe);
 513 #if OSHMEM_HAVE_C11
 514 #define pshmem_g(...)                                                \
 515     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                     \
 516             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)), \
 517                 char*:        pshmem_ctx_char_g,                     \
 518                 short*:       pshmem_ctx_short_g,                    \
 519                 int*:         pshmem_ctx_int_g,                      \
 520                 long*:        pshmem_ctx_long_g,                     \
 521                 long long*:   pshmem_ctx_longlong_g,                 \
 522                 signed char*:        pshmem_ctx_schar_g,             \
 523                 unsigned char*:      pshmem_ctx_uchar_g,             \
 524                 unsigned short*:     pshmem_ctx_ushort_g,            \
 525                 unsigned int*:       pshmem_ctx_uint_g,              \
 526                 unsigned long*:      pshmem_ctx_ulong_g,             \
 527                 unsigned long long*: pshmem_ctx_ulonglong_g,         \
 528                 float*:       pshmem_ctx_float_g,                    \
 529                 double*:      pshmem_ctx_double_g,                   \
 530                 long double*: pshmem_ctx_longdouble_g,               \
 531                 default:      __opshmem_datatype_ignore),            \
 532             char*:        pshmem_char_g,                             \
 533             short*:       pshmem_short_g,                            \
 534             int*:         pshmem_int_g,                              \
 535             long*:        pshmem_long_g,                             \
 536             long long*:   pshmem_longlong_g,                         \
 537             signed char*:        pshmem_schar_g,                     \
 538             unsigned char*:      pshmem_char_g,                      \
 539             unsigned short*:     pshmem_short_g,                     \
 540             unsigned int*:       pshmem_int_g,                       \
 541             unsigned long*:      pshmem_long_g,                      \
 542             unsigned long long*: pshmem_longlong_g,                  \
 543             float*:       pshmem_float_g,                            \
 544             double*:      pshmem_double_g,                           \
 545             long double*: pshmem_longdouble_g)(__VA_ARGS__)
 546 #endif
 547 
 548 /*
 549  * Block data get routines
 550  */
 551 OSHMEM_DECLSPEC  void pshmem_ctx_char_get(shmem_ctx_t ctx, char *target, const char *source, size_t len, int pe);
 552 OSHMEM_DECLSPEC  void pshmem_ctx_short_get(shmem_ctx_t ctx, short *target, const short *source, size_t len, int pe);
 553 OSHMEM_DECLSPEC  void pshmem_ctx_int_get(shmem_ctx_t ctx, int *target, const int *source, size_t len, int pe);
 554 OSHMEM_DECLSPEC  void pshmem_ctx_long_get(shmem_ctx_t ctx, long *target, const long *source, size_t len, int pe);
 555 OSHMEM_DECLSPEC  void pshmem_ctx_float_get(shmem_ctx_t ctx, float *target, const float *source, size_t len, int pe);
 556 OSHMEM_DECLSPEC  void pshmem_ctx_double_get(shmem_ctx_t ctx, double *target, const double *source, size_t len, int pe);
 557 OSHMEM_DECLSPEC  void pshmem_ctx_longlong_get(shmem_ctx_t ctx, long long *target, const long long *source, size_t len, int pe);
 558 OSHMEM_DECLSPEC  void pshmem_ctx_schar_get(shmem_ctx_t ctx, signed char *target, const signed char *source, size_t len, int pe);
 559 OSHMEM_DECLSPEC  void pshmem_ctx_uchar_get(shmem_ctx_t ctx, unsigned char *target, const unsigned char *source, size_t len, int pe);
 560 OSHMEM_DECLSPEC  void pshmem_ctx_ushort_get(shmem_ctx_t ctx, unsigned short *target, const unsigned short *source, size_t len, int pe);
 561 OSHMEM_DECLSPEC  void pshmem_ctx_uint_get(shmem_ctx_t ctx, unsigned int *target, const unsigned int *source, size_t len, int pe);
 562 OSHMEM_DECLSPEC  void pshmem_ctx_ulong_get(shmem_ctx_t ctx, unsigned long *target, const unsigned long *source, size_t len, int pe);
 563 OSHMEM_DECLSPEC  void pshmem_ctx_ulonglong_get(shmem_ctx_t ctx, unsigned long long *target, const unsigned long long *source, size_t len, int pe);
 564 OSHMEM_DECLSPEC  void pshmem_ctx_longdouble_get(shmem_ctx_t ctx, long double *target, const long double *source, size_t len, int pe);
 565 OSHMEM_DECLSPEC  void pshmem_ctx_int8_get(shmem_ctx_t ctx, int8_t *target, const int8_t *source, size_t len, int pe);
 566 OSHMEM_DECLSPEC  void pshmem_ctx_int16_get(shmem_ctx_t ctx, int16_t *target, const int16_t *source, size_t len, int pe);
 567 OSHMEM_DECLSPEC  void pshmem_ctx_int32_get(shmem_ctx_t ctx, int32_t *target, const int32_t *source, size_t len, int pe);
 568 OSHMEM_DECLSPEC  void pshmem_ctx_int64_get(shmem_ctx_t ctx, int64_t *target, const int64_t *source, size_t len, int pe);
 569 OSHMEM_DECLSPEC  void pshmem_ctx_uint8_get(shmem_ctx_t ctx, uint8_t *target, const uint8_t *source, size_t len, int pe);
 570 OSHMEM_DECLSPEC  void pshmem_ctx_uint16_get(shmem_ctx_t ctx, uint16_t *target, const uint16_t *source, size_t len, int pe);
 571 OSHMEM_DECLSPEC  void pshmem_ctx_uint32_get(shmem_ctx_t ctx, uint32_t *target, const uint32_t *source, size_t len, int pe);
 572 OSHMEM_DECLSPEC  void pshmem_ctx_uint64_get(shmem_ctx_t ctx, uint64_t *target, const uint64_t *source, size_t len, int pe);
 573 OSHMEM_DECLSPEC  void pshmem_ctx_size_get(shmem_ctx_t ctx, size_t *target, const size_t *source, size_t len, int pe);
 574 OSHMEM_DECLSPEC  void pshmem_ctx_ptrdiff_get(shmem_ctx_t ctx, ptrdiff_t *target, const ptrdiff_t *source, size_t len, int pe);
 575 
 576 OSHMEM_DECLSPEC  void pshmem_char_get(char *target, const char *source, size_t len, int pe);
 577 OSHMEM_DECLSPEC  void pshmem_short_get(short *target, const short *source, size_t len, int pe);
 578 OSHMEM_DECLSPEC  void pshmem_int_get(int *target, const int *source, size_t len, int pe);
 579 OSHMEM_DECLSPEC  void pshmem_long_get(long *target, const long *source, size_t len, int pe);
 580 OSHMEM_DECLSPEC  void pshmem_float_get(float *target, const float *source, size_t len, int pe);
 581 OSHMEM_DECLSPEC  void pshmem_double_get(double *target, const double *source, size_t len, int pe);
 582 OSHMEM_DECLSPEC  void pshmem_longlong_get(long long *target, const long long *source, size_t len, int pe);
 583 OSHMEM_DECLSPEC  void pshmem_schar_get(signed char *target, const signed char *source, size_t len, int pe);
 584 OSHMEM_DECLSPEC  void pshmem_uchar_get(unsigned char *target, const unsigned char *source, size_t len, int pe);
 585 OSHMEM_DECLSPEC  void pshmem_ushort_get(unsigned short *target, const unsigned short *source, size_t len, int pe);
 586 OSHMEM_DECLSPEC  void pshmem_uint_get(unsigned int *target, const unsigned int *source, size_t len, int pe);
 587 OSHMEM_DECLSPEC  void pshmem_ulong_get(unsigned long *target, const unsigned long *source, size_t len, int pe);
 588 OSHMEM_DECLSPEC  void pshmem_ulonglong_get(unsigned long long *target, const unsigned long long *source, size_t len, int pe);
 589 OSHMEM_DECLSPEC  void pshmem_longdouble_get(long double *target, const long double *source, size_t len, int pe);
 590 OSHMEM_DECLSPEC  void pshmem_int8_get(int8_t *target, const int8_t *source, size_t len, int pe);
 591 OSHMEM_DECLSPEC  void pshmem_int16_get(int16_t *target, const int16_t *source, size_t len, int pe);
 592 OSHMEM_DECLSPEC  void pshmem_int32_get(int32_t *target, const int32_t *source, size_t len, int pe);
 593 OSHMEM_DECLSPEC  void pshmem_int64_get(int64_t *target, const int64_t *source, size_t len, int pe);
 594 OSHMEM_DECLSPEC  void pshmem_uint8_get(uint8_t *target, const uint8_t *source, size_t len, int pe);
 595 OSHMEM_DECLSPEC  void pshmem_uint16_get(uint16_t *target, const uint16_t *source, size_t len, int pe);
 596 OSHMEM_DECLSPEC  void pshmem_uint32_get(uint32_t *target, const uint32_t *source, size_t len, int pe);
 597 OSHMEM_DECLSPEC  void pshmem_uint64_get(uint64_t *target, const uint64_t *source, size_t len, int pe);
 598 OSHMEM_DECLSPEC  void pshmem_size_get(size_t *target, const size_t *source, size_t len, int pe);
 599 OSHMEM_DECLSPEC  void pshmem_ptrdiff_get(ptrdiff_t *target, const ptrdiff_t *source, size_t len, int pe);
 600 #if OSHMEM_HAVE_C11
 601 #define pshmem_get(...)                                              \
 602     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                     \
 603             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)), \
 604                 char*:        pshmem_ctx_char_get,                   \
 605                 short*:       pshmem_ctx_short_get,                  \
 606                 int*:         pshmem_ctx_int_get,                    \
 607                 long*:        pshmem_ctx_long_get,                   \
 608                 long long*:   pshmem_ctx_longlong_get,               \
 609                 signed char*:        pshmem_ctx_schar_get,           \
 610                 unsigned char*:      pshmem_ctx_uchar_get,           \
 611                 unsigned short*:     pshmem_ctx_ushort_get,          \
 612                 unsigned int*:       pshmem_ctx_uint_get,            \
 613                 unsigned long*:      pshmem_ctx_ulong_get,           \
 614                 unsigned long long*: pshmem_ctx_ulonglong_get,       \
 615                 float*:       pshmem_ctx_float_get,                  \
 616                 double*:      pshmem_ctx_double_get,                 \
 617                 long double*: pshmem_ctx_longdouble_get,             \
 618                 default:      __opshmem_datatype_ignore),            \
 619             char*:        pshmem_char_get,                           \
 620             short*:       pshmem_short_get,                          \
 621             int*:         pshmem_int_get,                            \
 622             long*:        pshmem_long_get,                           \
 623             long long*:   pshmem_longlong_get,                       \
 624             signed char*:        pshmem_schar_get,                   \
 625             unsigned char*:      pshmem_uchar_get,                   \
 626             unsigned short*:     pshmem_ushort_get,                  \
 627             unsigned int*:       pshmem_uint_get,                    \
 628             unsigned long*:      pshmem_ulong_get,                   \
 629             unsigned long long*: pshmem_ulonglong_get,               \
 630             float*:       pshmem_float_get,                          \
 631             double*:      pshmem_double_get,                         \
 632             long double*: pshmem_longdouble_get)(__VA_ARGS__)
 633 #endif
 634 
 635 OSHMEM_DECLSPEC  void pshmem_ctx_get8(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 636 OSHMEM_DECLSPEC  void pshmem_ctx_get16(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 637 OSHMEM_DECLSPEC  void pshmem_ctx_get32(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 638 OSHMEM_DECLSPEC  void pshmem_ctx_get64(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 639 OSHMEM_DECLSPEC  void pshmem_ctx_get128(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 640 OSHMEM_DECLSPEC  void pshmem_ctx_getmem(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 641 
 642 OSHMEM_DECLSPEC  void pshmem_get8(void *target, const void *source, size_t len, int pe);
 643 OSHMEM_DECLSPEC  void pshmem_get16(void *target, const void *source, size_t len, int pe);
 644 OSHMEM_DECLSPEC  void pshmem_get32(void *target, const void *source, size_t len, int pe);
 645 OSHMEM_DECLSPEC  void pshmem_get64(void *target, const void *source, size_t len, int pe);
 646 OSHMEM_DECLSPEC  void pshmem_get128(void *target, const void *source, size_t len, int pe);
 647 OSHMEM_DECLSPEC  void pshmem_getmem(void *target, const void *source, size_t len, int pe);
 648 
 649 /*
 650  * Strided get routines
 651  */
 652 OSHMEM_DECLSPEC void pshmem_ctx_char_iget(shmem_ctx_t ctx, char* target, const char* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 653 OSHMEM_DECLSPEC void pshmem_ctx_short_iget(shmem_ctx_t ctx, short* target, const short* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 654 OSHMEM_DECLSPEC void pshmem_ctx_int_iget(shmem_ctx_t ctx, int* target, const int* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 655 OSHMEM_DECLSPEC void pshmem_ctx_long_iget(shmem_ctx_t ctx, long* target, const long* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 656 OSHMEM_DECLSPEC void pshmem_ctx_longlong_iget(shmem_ctx_t ctx, long long* target, const long long* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 657 OSHMEM_DECLSPEC void pshmem_ctx_schar_iget(shmem_ctx_t ctx, signed char* target, const signed char* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 658 OSHMEM_DECLSPEC void pshmem_ctx_uchar_iget(shmem_ctx_t ctx, unsigned char* target, const unsigned char* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 659 OSHMEM_DECLSPEC void pshmem_ctx_ushort_iget(shmem_ctx_t ctx, unsigned short* target, const unsigned short* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 660 OSHMEM_DECLSPEC void pshmem_ctx_uint_iget(shmem_ctx_t ctx, unsigned int* target, const unsigned int* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 661 OSHMEM_DECLSPEC void pshmem_ctx_ulong_iget(shmem_ctx_t ctx, unsigned long* target, const unsigned long* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 662 OSHMEM_DECLSPEC void pshmem_ctx_ulonglong_iget(shmem_ctx_t ctx, unsigned long long* target, const unsigned long long* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 663 OSHMEM_DECLSPEC void pshmem_ctx_float_iget(shmem_ctx_t ctx, float* target, const float* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 664 OSHMEM_DECLSPEC void pshmem_ctx_double_iget(shmem_ctx_t ctx, double* target, const double* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 665 OSHMEM_DECLSPEC void pshmem_ctx_longdouble_iget(shmem_ctx_t ctx, long double* target, const long double* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 666 OSHMEM_DECLSPEC void pshmem_ctx_int8_iget(shmem_ctx_t ctx, int8_t* target, const int8_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 667 OSHMEM_DECLSPEC void pshmem_ctx_int16_iget(shmem_ctx_t ctx, int16_t* target, const int16_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 668 OSHMEM_DECLSPEC void pshmem_ctx_int32_iget(shmem_ctx_t ctx, int32_t* target, const int32_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 669 OSHMEM_DECLSPEC void pshmem_ctx_int64_iget(shmem_ctx_t ctx, int64_t* target, const int64_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 670 OSHMEM_DECLSPEC void pshmem_ctx_uint8_iget(shmem_ctx_t ctx, uint8_t* target, const uint8_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 671 OSHMEM_DECLSPEC void pshmem_ctx_uint16_iget(shmem_ctx_t ctx, uint16_t* target, const uint16_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 672 OSHMEM_DECLSPEC void pshmem_ctx_uint32_iget(shmem_ctx_t ctx, uint32_t* target, const uint32_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 673 OSHMEM_DECLSPEC void pshmem_ctx_uint64_iget(shmem_ctx_t ctx, uint64_t* target, const uint64_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 674 OSHMEM_DECLSPEC void pshmem_ctx_size_iget(shmem_ctx_t ctx, size_t* target, const size_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 675 OSHMEM_DECLSPEC void pshmem_ctx_ptrdiff_iget(shmem_ctx_t ctx, ptrdiff_t* target, const ptrdiff_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 676 
 677 OSHMEM_DECLSPEC void pshmem_char_iget(char* target, const char* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 678 OSHMEM_DECLSPEC void pshmem_short_iget(short* target, const short* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 679 OSHMEM_DECLSPEC void pshmem_int_iget(int* target, const int* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 680 OSHMEM_DECLSPEC void pshmem_float_iget(float* target, const float* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 681 OSHMEM_DECLSPEC void pshmem_double_iget(double* target, const double* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 682 OSHMEM_DECLSPEC void pshmem_longlong_iget(long long* target, const long long* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 683 OSHMEM_DECLSPEC void pshmem_longdouble_iget(long double* target, const long double* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 684 OSHMEM_DECLSPEC void pshmem_long_iget(long* target, const long* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 685 OSHMEM_DECLSPEC void pshmem_schar_iget(signed char* target, const signed char* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 686 OSHMEM_DECLSPEC void pshmem_uchar_iget(unsigned char* target, const unsigned char* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 687 OSHMEM_DECLSPEC void pshmem_ushort_iget(unsigned short* target, const unsigned short* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 688 OSHMEM_DECLSPEC void pshmem_uint_iget(unsigned int* target, const unsigned int* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 689 OSHMEM_DECLSPEC void pshmem_ulong_iget(unsigned long* target, const unsigned long* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 690 OSHMEM_DECLSPEC void pshmem_ulonglong_iget(unsigned long long* target, const unsigned long long* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 691 OSHMEM_DECLSPEC void pshmem_int8_iget(int8_t* target, const int8_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 692 OSHMEM_DECLSPEC void pshmem_int16_iget(int16_t* target, const int16_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 693 OSHMEM_DECLSPEC void pshmem_int32_iget(int32_t* target, const int32_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 694 OSHMEM_DECLSPEC void pshmem_int64_iget(int64_t* target, const int64_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 695 OSHMEM_DECLSPEC void pshmem_uint8_iget(uint8_t* target, const uint8_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 696 OSHMEM_DECLSPEC void pshmem_uint16_iget(uint16_t* target, const uint16_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 697 OSHMEM_DECLSPEC void pshmem_uint32_iget(uint32_t* target, const uint32_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 698 OSHMEM_DECLSPEC void pshmem_uint64_iget(uint64_t* target, const uint64_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 699 OSHMEM_DECLSPEC void pshmem_size_iget(size_t* target, const size_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 700 OSHMEM_DECLSPEC void pshmem_ptrdiff_iget(ptrdiff_t* target, const ptrdiff_t* source, ptrdiff_t tst, ptrdiff_t sst, size_t len, int pe);
 701 #if OSHMEM_HAVE_C11
 702 #define pshmem_iget(...)                                             \
 703     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                     \
 704             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)), \
 705                 char*:        pshmem_ctx_char_iget,                  \
 706                 short*:       pshmem_ctx_short_iget,                 \
 707                 int*:         pshmem_ctx_int_iget,                   \
 708                 long*:        pshmem_ctx_long_iget,                  \
 709                 long long*:   pshmem_ctx_longlong_iget,              \
 710                 signed char*:        pshmem_ctx_schar_iget,          \
 711                 unsigned char*:      pshmem_ctx_uchar_iget,          \
 712                 unsigned short*:     pshmem_ctx_ushort_iget,         \
 713                 unsigned int*:       pshmem_ctx_uint_iget,           \
 714                 unsigned long*:      pshmem_ctx_ulong_iget,          \
 715                 unsigned long long*: pshmem_ctx_ulonglong_iget,      \
 716                 float*:       pshmem_ctx_float_iget,                 \
 717                 double*:      pshmem_ctx_double_iget,                \
 718                 long double*: pshmem_ctx_longdouble_iget,            \
 719                 default:      __opshmem_datatype_ignore),            \
 720             char*:        pshmem_char_iget,                          \
 721             short*:       pshmem_short_iget,                         \
 722             int*:         pshmem_int_iget,                           \
 723             long*:        pshmem_long_iget,                          \
 724             long long*:   pshmem_longlong_iget,                      \
 725             signed char*:        pshmem_schar_iget,                  \
 726             unsigned char*:      pshmem_uchar_iget,                  \
 727             unsigned short*:     pshmem_ushort_iget,                 \
 728             unsigned int*:       pshmem_uint_iget,                   \
 729             unsigned long*:      pshmem_ulong_iget,                  \
 730             unsigned long long*: pshmem_ulonglong_iget,              \
 731             float*:       pshmem_float_iget,                         \
 732             double*:      pshmem_double_iget,                        \
 733             long double*: pshmem_longdouble_iget)(__VA_ARGS__)
 734 #endif
 735 
 736 OSHMEM_DECLSPEC void pshmem_ctx_iget8(shmem_ctx_t ctx, void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 737 OSHMEM_DECLSPEC void pshmem_ctx_iget16(shmem_ctx_t ctx, void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 738 OSHMEM_DECLSPEC void pshmem_ctx_iget32(shmem_ctx_t ctx, void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 739 OSHMEM_DECLSPEC void pshmem_ctx_iget64(shmem_ctx_t ctx, void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 740 OSHMEM_DECLSPEC void pshmem_ctx_iget128(shmem_ctx_t ctx, void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 741 
 742 OSHMEM_DECLSPEC void pshmem_iget8(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 743 OSHMEM_DECLSPEC void pshmem_iget16(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 744 OSHMEM_DECLSPEC void pshmem_iget32(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 745 OSHMEM_DECLSPEC void pshmem_iget64(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 746 OSHMEM_DECLSPEC void pshmem_iget128(void* target, const void* source, ptrdiff_t tst, ptrdiff_t sst,size_t len, int pe);
 747 
 748 /*
 749  * Nonblocking data get routines
 750  */
 751 OSHMEM_DECLSPEC  void pshmem_ctx_char_get_nbi(shmem_ctx_t ctx, char *target, const char *source, size_t len, int pe);
 752 OSHMEM_DECLSPEC  void pshmem_ctx_short_get_nbi(shmem_ctx_t ctx, short *target, const short *source, size_t len, int pe);
 753 OSHMEM_DECLSPEC  void pshmem_ctx_int_get_nbi(shmem_ctx_t ctx, int *target, const int *source, size_t len, int pe);
 754 OSHMEM_DECLSPEC  void pshmem_ctx_long_get_nbi(shmem_ctx_t ctx, long *target, const long *source, size_t len, int pe);
 755 OSHMEM_DECLSPEC  void pshmem_ctx_longlong_get_nbi(shmem_ctx_t ctx, long long *target, const long long *source, size_t len, int pe);
 756 OSHMEM_DECLSPEC  void pshmem_ctx_schar_get_nbi(shmem_ctx_t ctx, signed char *target, const signed char *source, size_t len, int pe);
 757 OSHMEM_DECLSPEC  void pshmem_ctx_uchar_get_nbi(shmem_ctx_t ctx, unsigned char *target, const unsigned char *source, size_t len, int pe);
 758 OSHMEM_DECLSPEC  void pshmem_ctx_ushort_get_nbi(shmem_ctx_t ctx, unsigned short *target, const unsigned short *source, size_t len, int pe);
 759 OSHMEM_DECLSPEC  void pshmem_ctx_uint_get_nbi(shmem_ctx_t ctx, unsigned int *target, const unsigned int *source, size_t len, int pe);
 760 OSHMEM_DECLSPEC  void pshmem_ctx_ulong_get_nbi(shmem_ctx_t ctx, unsigned long *target, const unsigned long *source, size_t len, int pe);
 761 OSHMEM_DECLSPEC  void pshmem_ctx_ulonglong_get_nbi(shmem_ctx_t ctx, unsigned long long *target, const unsigned long long *source, size_t len, int pe);
 762 OSHMEM_DECLSPEC  void pshmem_ctx_float_get_nbi(shmem_ctx_t ctx, float *target, const float *source, size_t len, int pe);
 763 OSHMEM_DECLSPEC  void pshmem_ctx_double_get_nbi(shmem_ctx_t ctx, double *target, const double *source, size_t len, int pe);
 764 OSHMEM_DECLSPEC  void pshmem_ctx_longdouble_get_nbi(shmem_ctx_t ctx, long double *target, const long double *source, size_t len, int pe);
 765 OSHMEM_DECLSPEC  void pshmem_ctx_int8_get_nbi(shmem_ctx_t ctx, int8_t *target, const int8_t *source, size_t len, int pe);
 766 OSHMEM_DECLSPEC  void pshmem_ctx_int16_get_nbi(shmem_ctx_t ctx, int16_t *target, const int16_t *source, size_t len, int pe);
 767 OSHMEM_DECLSPEC  void pshmem_ctx_int32_get_nbi(shmem_ctx_t ctx, int32_t *target, const int32_t *source, size_t len, int pe);
 768 OSHMEM_DECLSPEC  void pshmem_ctx_int64_get_nbi(shmem_ctx_t ctx, int64_t *target, const int64_t *source, size_t len, int pe);
 769 OSHMEM_DECLSPEC  void pshmem_ctx_uint8_get_nbi(shmem_ctx_t ctx, uint8_t *target, const uint8_t *source, size_t len, int pe);
 770 OSHMEM_DECLSPEC  void pshmem_ctx_uint16_get_nbi(shmem_ctx_t ctx, uint16_t *target, const uint16_t *source, size_t len, int pe);
 771 OSHMEM_DECLSPEC  void pshmem_ctx_uint32_get_nbi(shmem_ctx_t ctx, uint32_t *target, const uint32_t *source, size_t len, int pe);
 772 OSHMEM_DECLSPEC  void pshmem_ctx_uint64_get_nbi(shmem_ctx_t ctx, uint64_t *target, const uint64_t *source, size_t len, int pe);
 773 OSHMEM_DECLSPEC  void pshmem_ctx_size_get_nbi(shmem_ctx_t ctx, size_t *target, const size_t *source, size_t len, int pe);
 774 OSHMEM_DECLSPEC  void pshmem_ctx_ptrdiff_get_nbi(shmem_ctx_t ctx, ptrdiff_t *target, const ptrdiff_t *source, size_t len, int pe);
 775 
 776 OSHMEM_DECLSPEC  void pshmem_getmem_nbi(void *target, const void *source, size_t len, int pe);
 777 OSHMEM_DECLSPEC  void pshmem_char_get_nbi(char *target, const char *source, size_t len, int pe);
 778 OSHMEM_DECLSPEC  void pshmem_short_get_nbi(short *target, const short *source, size_t len, int pe);
 779 OSHMEM_DECLSPEC  void pshmem_int_get_nbi(int *target, const int *source, size_t len, int pe);
 780 OSHMEM_DECLSPEC  void pshmem_long_get_nbi(long *target, const long *source, size_t len, int pe);
 781 OSHMEM_DECLSPEC  void pshmem_longlong_get_nbi(long long *target, const long long *source, size_t len, int pe);
 782 OSHMEM_DECLSPEC  void pshmem_schar_get_nbi(signed char *target, const signed char *source, size_t len, int pe);
 783 OSHMEM_DECLSPEC  void pshmem_uchar_get_nbi(unsigned char *target, const unsigned char *source, size_t len, int pe);
 784 OSHMEM_DECLSPEC  void pshmem_ushort_get_nbi(unsigned short *target, const unsigned short *source, size_t len, int pe);
 785 OSHMEM_DECLSPEC  void pshmem_uint_get_nbi(unsigned int *target, const unsigned int *source, size_t len, int pe);
 786 OSHMEM_DECLSPEC  void pshmem_ulong_get_nbi(unsigned long *target, const unsigned long *source, size_t len, int pe);
 787 OSHMEM_DECLSPEC  void pshmem_ulonglong_get_nbi(unsigned long long *target, const unsigned long long *source, size_t len, int pe);
 788 OSHMEM_DECLSPEC  void pshmem_float_get_nbi(float *target, const float *source, size_t len, int pe);
 789 OSHMEM_DECLSPEC  void pshmem_double_get_nbi(double *target, const double *source, size_t len, int pe);
 790 OSHMEM_DECLSPEC  void pshmem_longdouble_get_nbi(long double *target, const long double *source, size_t len, int pe);
 791 OSHMEM_DECLSPEC  void pshmem_int8_get_nbi(int8_t *target, const int8_t *source, size_t len, int pe);
 792 OSHMEM_DECLSPEC  void pshmem_int16_get_nbi(int16_t *target, const int16_t *source, size_t len, int pe);
 793 OSHMEM_DECLSPEC  void pshmem_int32_get_nbi(int32_t *target, const int32_t *source, size_t len, int pe);
 794 OSHMEM_DECLSPEC  void pshmem_int64_get_nbi(int64_t *target, const int64_t *source, size_t len, int pe);
 795 OSHMEM_DECLSPEC  void pshmem_uint8_get_nbi(uint8_t *target, const uint8_t *source, size_t len, int pe);
 796 OSHMEM_DECLSPEC  void pshmem_uint16_get_nbi(uint16_t *target, const uint16_t *source, size_t len, int pe);
 797 OSHMEM_DECLSPEC  void pshmem_uint32_get_nbi(uint32_t *target, const uint32_t *source, size_t len, int pe);
 798 OSHMEM_DECLSPEC  void pshmem_uint64_get_nbi(uint64_t *target, const uint64_t *source, size_t len, int pe);
 799 OSHMEM_DECLSPEC  void pshmem_size_get_nbi(size_t *target, const size_t *source, size_t len, int pe);
 800 OSHMEM_DECLSPEC  void pshmem_ptrdiff_get_nbi(ptrdiff_t *target, const ptrdiff_t *source, size_t len, int pe);
 801 #if OSHMEM_HAVE_C11
 802 #define pshmem_get_nbi(...)                                          \
 803     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                     \
 804             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)), \
 805                 char*:        pshmem_ctx_char_get_nbi,               \
 806                 short*:       pshmem_ctx_short_get_nbi,              \
 807                 int*:         pshmem_ctx_int_get_nbi,                \
 808                 long*:        pshmem_ctx_long_get_nbi,               \
 809                 long long*:   pshmem_ctx_longlong_get_nbi,           \
 810                 signed char*:        pshmem_ctx_schar_get_nbi,       \
 811                 unsigned char*:      pshmem_ctx_uchar_get_nbi,       \
 812                 unsigned short*:     pshmem_ctx_ushort_get_nbi,      \
 813                 unsigned int*:       pshmem_ctx_uint_get_nbi,        \
 814                 unsigned long*:      pshmem_ctx_ulong_get_nbi,       \
 815                 unsigned long long*: pshmem_ctx_ulonglong_get_nbi,   \
 816                 float*:       pshmem_ctx_float_get_nbi,              \
 817                 double*:      pshmem_ctx_double_get_nbi,             \
 818                 long double*: pshmem_ctx_longdouble_get_nbi,         \
 819                 default:      __opshmem_datatype_ignore),            \
 820             char*:        pshmem_char_get_nbi,                       \
 821             short*:       pshmem_short_get_nbi,                      \
 822             int*:         pshmem_int_get_nbi,                        \
 823             long*:        pshmem_long_get_nbi,                       \
 824             long long*:   pshmem_longlong_get_nbi,                   \
 825             signed char*:        pshmem_schar_get_nbi,               \
 826             unsigned char*:      pshmem_uchar_get_nbi,               \
 827             unsigned short*:     pshmem_ushort_get_nbi,              \
 828             unsigned int*:       pshmem_uint_get_nbi,                \
 829             unsigned long*:      pshmem_ulong_get_nbi,               \
 830             unsigned long long*: pshmem_ulonglong_get_nbi,           \
 831             float*:       pshmem_float_get_nbi,                      \
 832             double*:      pshmem_double_get_nbi,                     \
 833             long double*: pshmem_longdouble_get_nbi)(__VA_ARGS__)
 834 #endif
 835 
 836 OSHMEM_DECLSPEC  void pshmem_ctx_get8_nbi(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 837 OSHMEM_DECLSPEC  void pshmem_ctx_get16_nbi(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 838 OSHMEM_DECLSPEC  void pshmem_ctx_get32_nbi(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 839 OSHMEM_DECLSPEC  void pshmem_ctx_get64_nbi(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 840 OSHMEM_DECLSPEC  void pshmem_ctx_get128_nbi(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 841 OSHMEM_DECLSPEC  void pshmem_ctx_getmem_nbi(shmem_ctx_t ctx, void *target, const void *source, size_t len, int pe);
 842 
 843 OSHMEM_DECLSPEC  void pshmem_get8_nbi(void *target, const void *source, size_t len, int pe);
 844 OSHMEM_DECLSPEC  void pshmem_get16_nbi(void *target, const void *source, size_t len, int pe);
 845 OSHMEM_DECLSPEC  void pshmem_get32_nbi(void *target, const void *source, size_t len, int pe);
 846 OSHMEM_DECLSPEC  void pshmem_get64_nbi(void *target, const void *source, size_t len, int pe);
 847 OSHMEM_DECLSPEC  void pshmem_get128_nbi(void *target, const void *source, size_t len, int pe);
 848 
 849 /*
 850  * Atomic operations
 851  */
 852 /* Atomic swap */
 853 OSHMEM_DECLSPEC int pshmem_ctx_int_atomic_swap(shmem_ctx_t ctx, int *target, int value, int pe);
 854 OSHMEM_DECLSPEC long pshmem_ctx_long_atomic_swap(shmem_ctx_t ctx, long *target, long value, int pe);
 855 OSHMEM_DECLSPEC long long pshmem_ctx_longlong_atomic_swap(shmem_ctx_t ctx, long long *target, long long value, int pe);
 856 OSHMEM_DECLSPEC unsigned int pshmem_ctx_uint_atomic_swap(shmem_ctx_t ctx, unsigned int *target, unsigned int value, int pe);
 857 OSHMEM_DECLSPEC unsigned long pshmem_ctx_ulong_atomic_swap(shmem_ctx_t ctx, unsigned long *target, unsigned long value, int pe);
 858 OSHMEM_DECLSPEC unsigned long long pshmem_ctx_ulonglong_atomic_swap(shmem_ctx_t ctx, unsigned long long *target, unsigned long long value, int pe);
 859 OSHMEM_DECLSPEC float pshmem_ctx_float_atomic_swap(shmem_ctx_t ctx, float *target, float value, int pe);
 860 OSHMEM_DECLSPEC double pshmem_ctx_double_atomic_swap(shmem_ctx_t ctx, double *target, double value, int pe);
 861 
 862 OSHMEM_DECLSPEC int pshmem_int_atomic_swap(int *target, int value, int pe);
 863 OSHMEM_DECLSPEC long pshmem_long_atomic_swap(long *target, long value, int pe);
 864 OSHMEM_DECLSPEC long long pshmem_longlong_atomic_swap(long long*target, long long value, int pe);
 865 OSHMEM_DECLSPEC unsigned int pshmem_uint_atomic_swap(unsigned int *target, unsigned int value, int pe);
 866 OSHMEM_DECLSPEC unsigned long pshmem_ulong_atomic_swap(unsigned long *target, unsigned long value, int pe);
 867 OSHMEM_DECLSPEC unsigned long long pshmem_ulonglong_atomic_swap(unsigned long long *target, unsigned long long value, int pe);
 868 OSHMEM_DECLSPEC float pshmem_float_atomic_swap(float *target, float value, int pe);
 869 OSHMEM_DECLSPEC double pshmem_double_atomic_swap(double *target, double value, int pe);
 870 #if OSHMEM_HAVE_C11
 871 #define pshmem_atomic_swap(...)                                       \
 872     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                      \
 873             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)),  \
 874                 int*:         pshmem_ctx_int_atomic_swap,             \
 875                 long*:        pshmem_ctx_long_atomic_swap,            \
 876                 long long*:   pshmem_ctx_longlong_atomic_swap,        \
 877                 unsigned int*:       pshmem_ctx_uint_atomic_swap,     \
 878                 unsigned long*:      pshmem_ctx_ulong_atomic_swap,    \
 879                 unsigned long long*: pshmem_ctx_ulonglong_atomic_swap,\
 880                 float*:       pshmem_ctx_float_atomic_swap,           \
 881                 double*:      pshmem_ctx_double_atomic_swap,          \
 882                 default:      __opshmem_datatype_ignore),             \
 883             int*:         pshmem_int_atomic_swap,                     \
 884             long*:        pshmem_long_atomic_swap,                    \
 885             long long*:   pshmem_longlong_atomic_swap,                \
 886             unsigned int*:       pshmem_uint_atomic_swap,             \
 887             unsigned long*:      pshmem_ulong_atomic_swap,            \
 888             unsigned long long*: pshmem_ulonglong_atomic_swap,        \
 889             float*:       pshmem_float_atomic_swap,                   \
 890             double*:      pshmem_double_atomic_swap)(__VA_ARGS__)
 891 #endif
 892 
 893 OSHMEM_DECLSPEC int pshmem_int_swap(int *target, int value, int pe);
 894 OSHMEM_DECLSPEC long pshmem_long_swap(long *target, long value, int pe);
 895 OSHMEM_DECLSPEC long long pshmem_longlong_swap(long long*target, long long value, int pe);
 896 OSHMEM_DECLSPEC float pshmem_float_swap(float *target, float value, int pe);
 897 OSHMEM_DECLSPEC double pshmem_double_swap(double *target, double value, int pe);
 898 #if OSHMEM_HAVE_C11
 899 #define pshmem_swap(dst, val, pe)               \
 900     _Generic(&*(dst),                           \
 901             int*:         pshmem_int_swap,      \
 902             long*:        pshmem_long_swap,     \
 903             long long*:   pshmem_longlong_swap, \
 904             float*:       pshmem_float_swap,    \
 905             double*:      pshmem_double_swap)(dst, val, pe)
 906 #endif
 907 
 908 /* Atomic set */
 909 OSHMEM_DECLSPEC void pshmem_ctx_int_atomic_set(shmem_ctx_t ctx, int *target, int value, int pe);
 910 OSHMEM_DECLSPEC void pshmem_ctx_long_atomic_set(shmem_ctx_t ctx, long *target, long value, int pe);
 911 OSHMEM_DECLSPEC void pshmem_ctx_longlong_atomic_set(shmem_ctx_t ctx, long long *target, long long value, int pe);
 912 OSHMEM_DECLSPEC void pshmem_ctx_uint_atomic_set(shmem_ctx_t ctx, unsigned int *target, unsigned int value, int pe);
 913 OSHMEM_DECLSPEC void pshmem_ctx_ulong_atomic_set(shmem_ctx_t ctx, unsigned long *target, unsigned long value, int pe);
 914 OSHMEM_DECLSPEC void pshmem_ctx_ulonglong_atomic_set(shmem_ctx_t ctx, unsigned long long *target, unsigned long long value, int pe);
 915 OSHMEM_DECLSPEC void pshmem_ctx_float_atomic_set(shmem_ctx_t ctx, float *target, float value, int pe);
 916 OSHMEM_DECLSPEC void pshmem_ctx_double_atomic_set(shmem_ctx_t ctx, double *target, double value, int pe);
 917 
 918 OSHMEM_DECLSPEC void pshmem_int_atomic_set(int *target, int value, int pe);
 919 OSHMEM_DECLSPEC void pshmem_long_atomic_set(long *target, long value, int pe);
 920 OSHMEM_DECLSPEC void pshmem_longlong_atomic_set(long long *target, long long value, int pe);
 921 OSHMEM_DECLSPEC void pshmem_uint_atomic_set(unsigned int *target, unsigned int value, int pe);
 922 OSHMEM_DECLSPEC void pshmem_ulong_atomic_set(unsigned long *target, unsigned long value, int pe);
 923 OSHMEM_DECLSPEC void pshmem_ulonglong_atomic_set(unsigned long long *target, unsigned long long value, int pe);
 924 OSHMEM_DECLSPEC void pshmem_float_atomic_set(float *target, float value, int pe);
 925 OSHMEM_DECLSPEC void pshmem_double_atomic_set(double *target, double value, int pe);
 926 #if OSHMEM_HAVE_C11
 927 #define pshmem_atomic_set(...)                                       \
 928     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                     \
 929             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)), \
 930                 int*:         pshmem_ctx_int_atomic_set,             \
 931                 long*:        pshmem_ctx_long_atomic_set,            \
 932                 long long*:   pshmem_ctx_longlong_atomic_set,        \
 933                 unsigned int*:       pshmem_ctx_uint_atomic_set,     \
 934                 unsigned long*:      pshmem_ctx_ulong_atomic_set,    \
 935                 unsigned long long*: pshmem_ctx_ulonglong_atomic_set,\
 936                 float*:       pshmem_ctx_float_atomic_set,           \
 937                 double*:      pshmem_ctx_double_atomic_set,          \
 938                 default:      __opshmem_datatype_ignore),            \
 939             int*:         pshmem_int_atomic_set,                     \
 940             long*:        pshmem_long_atomic_set,                    \
 941             long long*:   pshmem_longlong_atomic_set,                \
 942             unsigned int*:         pshmem_uint_atomic_set,           \
 943             unsigned long*:        pshmem_ulong_atomic_set,          \
 944             unsigned long long*:   pshmem_ulonglong_atomic_set,      \
 945             float*:       pshmem_float_atomic_set,                   \
 946             double*:      pshmem_double_atomic_set)(__VA_ARGS__)
 947 #endif
 948 
 949 OSHMEM_DECLSPEC void pshmem_int_set(int *target, int value, int pe);
 950 OSHMEM_DECLSPEC void pshmem_long_set(long *target, long value, int pe);
 951 OSHMEM_DECLSPEC void pshmem_longlong_set(long long *target, long long value, int pe);
 952 OSHMEM_DECLSPEC void pshmem_float_set(float *target, float value, int pe);
 953 OSHMEM_DECLSPEC void pshmem_double_set(double *target, double value, int pe);
 954 #if OSHMEM_HAVE_C11
 955 #define pshmem_set(dst, val, pe)                             \
 956     _Generic(&*(dst),                                        \
 957             int*:         pshmem_int_set,                    \
 958             long*:        pshmem_long_set,                   \
 959             long long*:   pshmem_longlong_set,               \
 960             float*:       pshmem_float_set,                  \
 961             double*:      pshmem_double_set)(dst, val, pe)
 962 #endif
 963 
 964 /* Atomic conditional swap */
 965 OSHMEM_DECLSPEC int pshmem_ctx_int_atomic_compare_swap(shmem_ctx_t ctx, int *target, int cond, int value, int pe);
 966 OSHMEM_DECLSPEC long pshmem_ctx_long_atomic_compare_swap(shmem_ctx_t ctx, long *target, long cond, long value, int pe);
 967 OSHMEM_DECLSPEC long long pshmem_ctx_longlong_atomic_compare_swap(shmem_ctx_t ctx, long long *target, long long cond, long long value, int pe);
 968 OSHMEM_DECLSPEC unsigned int pshmem_ctx_uint_atomic_compare_swap(shmem_ctx_t ctx, unsigned int *target, unsigned int cond, unsigned int value, int pe);
 969 OSHMEM_DECLSPEC unsigned long pshmem_ctx_ulong_atomic_compare_swap(shmem_ctx_t ctx, unsigned long *target, unsigned long cond, unsigned long value, int pe);
 970 OSHMEM_DECLSPEC unsigned long long pshmem_ctx_ulonglong_atomic_compare_swap(shmem_ctx_t ctx, unsigned long long *target, unsigned long long cond, unsigned long long value, int pe);
 971 
 972 OSHMEM_DECLSPEC int pshmem_int_atomic_compare_swap(int *target, int cond, int value, int pe);
 973 OSHMEM_DECLSPEC long pshmem_long_atomic_compare_swap(long *target, long cond, long value, int pe);
 974 OSHMEM_DECLSPEC long long pshmem_longlong_atomic_compare_swap(long long *target, long long cond, long long value, int pe);
 975 OSHMEM_DECLSPEC unsigned int pshmem_uint_atomic_compare_swap(unsigned int *target, unsigned int cond, unsigned int value, int pe);
 976 OSHMEM_DECLSPEC unsigned long pshmem_ulong_atomic_compare_swap(unsigned long *target, unsigned long cond, unsigned long value, int pe);
 977 OSHMEM_DECLSPEC unsigned long long pshmem_ulonglong_atomic_compare_swap(unsigned long long *target, unsigned long long cond, unsigned long long value, int pe);
 978 
 979 #if OSHMEM_HAVE_C11
 980 #define pshmem_atomic_compare_swap(...)                                \
 981     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                       \
 982             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)),   \
 983                 int*:         pshmem_ctx_int_atomic_compare_swap,      \
 984                 long*:        pshmem_ctx_long_atomic_compare_swap,     \
 985                 long long*:   pshmem_ctx_longlong_atomic_compare_swap, \
 986                 unsigned int*:       pshmem_ctx_uint_atomic_compare_swap,      \
 987                 unsigned long*:      pshmem_ctx_ulong_atomic_compare_swap,     \
 988                 unsigned long long*: pshmem_ctx_ulonglong_atomic_compare_swap, \
 989                 default:      __opshmem_datatype_ignore),              \
 990             int*:         pshmem_int_atomic_compare_swap,              \
 991             long*:        pshmem_long_atomic_compare_swap,             \
 992             long long*:   pshmem_longlong_atomic_compare_swap,         \
 993             unsigned int*:       pshmem_uint_atomic_compare_swap,      \
 994             unsigned long*:      pshmem_ulong_atomic_compare_swap,     \
 995             unsigned long long*: pshmem_ulonglong_atomic_compare_swap)(__VA_ARGS__)
 996 #endif
 997 
 998 OSHMEM_DECLSPEC int pshmem_int_cswap(int *target, int cond, int value, int pe);
 999 OSHMEM_DECLSPEC long pshmem_long_cswap(long *target, long cond, long value, int pe);
1000 OSHMEM_DECLSPEC long long pshmem_longlong_cswap(long long *target, long long cond, long long value, int pe);
1001 #if OSHMEM_HAVE_C11
1002 #define pshmem_cswap(dst, cond, val, pe)                       \
1003     _Generic(&*(dst),                                          \
1004             int*:         pshmem_int_cswap,                    \
1005             long*:        pshmem_long_cswap,                   \
1006             long long*:   pshmem_longlong_cswap)(dst, cond, val, pe)
1007 #endif
1008 
1009 /* Atomic Fetch&Add */
1010 OSHMEM_DECLSPEC int pshmem_ctx_int_atomic_fetch_add(shmem_ctx_t ctx, int *target, int value, int pe);
1011 OSHMEM_DECLSPEC long pshmem_ctx_long_atomic_fetch_add(shmem_ctx_t ctx, long *target, long value, int pe);
1012 OSHMEM_DECLSPEC long long pshmem_ctx_longlong_atomic_fetch_add(shmem_ctx_t ctx, long long *target, long long value, int pe);
1013 OSHMEM_DECLSPEC unsigned int pshmem_ctx_uint_atomic_fetch_add(shmem_ctx_t ctx, unsigned int *target, unsigned int value, int pe);
1014 OSHMEM_DECLSPEC unsigned long pshmem_ctx_ulong_atomic_fetch_add(shmem_ctx_t ctx, unsigned long *target, unsigned long value, int pe);
1015 OSHMEM_DECLSPEC unsigned long long pshmem_ctx_ulonglong_atomic_fetch_add(shmem_ctx_t ctx, unsigned long long *target, unsigned long long value, int pe);
1016 
1017 OSHMEM_DECLSPEC int pshmem_int_atomic_fetch_add(int *target, int value, int pe);
1018 OSHMEM_DECLSPEC long pshmem_long_atomic_fetch_add(long *target, long value, int pe);
1019 OSHMEM_DECLSPEC long long pshmem_longlong_atomic_fetch_add(long long *target, long long value, int pe);
1020 OSHMEM_DECLSPEC unsigned int pshmem_uint_atomic_fetch_add(unsigned int *target, unsigned int value, int pe);
1021 OSHMEM_DECLSPEC unsigned long pshmem_ulong_atomic_fetch_add(unsigned long *target, unsigned long value, int pe);
1022 OSHMEM_DECLSPEC unsigned long long pshmem_ulonglong_atomic_fetch_add(unsigned long long *target, unsigned long long value, int pe);
1023 #if OSHMEM_HAVE_C11
1024 #define pshmem_atomic_fetch_add(...)                                        \
1025     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                            \
1026             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)),        \
1027                 int*:         pshmem_ctx_int_atomic_fetch_add,              \
1028                 long*:        pshmem_ctx_long_atomic_fetch_add,             \
1029                 long long*:   pshmem_ctx_longlong_atomic_fetch_add,         \
1030                 unsigned int*:       pshmem_ctx_uint_atomic_fetch_add,      \
1031                 unsigned long*:      pshmem_ctx_ulong_atomic_fetch_add,     \
1032                 unsigned long long*: pshmem_ctx_ulonglong_atomic_fetch_add, \
1033                 default:      __opshmem_datatype_ignore),                   \
1034             int*:         pshmem_int_atomic_fetch_add,                      \
1035             long*:        pshmem_long_atomic_fetch_add,                     \
1036             long long*:   pshmem_longlong_atomic_fetch_add,                 \
1037             unsigned int*:       pshmem_uint_atomic_fetch_add,              \
1038             unsigned long*:      pshmem_ulong_atomic_fetch_add,             \
1039             unsigned long long*: pshmem_ulonglong_atomic_fetch_add)(__VA_ARGS__)
1040 #endif
1041 
1042 OSHMEM_DECLSPEC int pshmem_int_fadd(int *target, int value, int pe);
1043 OSHMEM_DECLSPEC long pshmem_long_fadd(long *target, long value, int pe);
1044 OSHMEM_DECLSPEC long long pshmem_longlong_fadd(long long *target, long long value, int pe);
1045 #if OSHMEM_HAVE_C11
1046 #define pshmem_fadd(dst, val, pe)                             \
1047     _Generic(&*(dst),                                         \
1048             int*:         pshmem_int_fadd,                    \
1049             long*:        pshmem_long_fadd,                   \
1050             long long*:   pshmem_longlong_fadd)(dst, val, pe)
1051 #endif
1052 
1053 /* Atomic Fetch&And */
1054 OSHMEM_DECLSPEC int pshmem_ctx_int_atomic_fetch_and(shmem_ctx_t ctx, int *target, int value, int pe);
1055 OSHMEM_DECLSPEC long pshmem_ctx_long_atomic_fetch_and(shmem_ctx_t ctx, long *target, long value, int pe);
1056 OSHMEM_DECLSPEC long long pshmem_ctx_longlong_atomic_fetch_and(shmem_ctx_t ctx, long long *target, long long value, int pe);
1057 OSHMEM_DECLSPEC unsigned int pshmem_ctx_uint_atomic_fetch_and(shmem_ctx_t ctx, unsigned int *target, unsigned int value, int pe);
1058 OSHMEM_DECLSPEC unsigned long pshmem_ctx_ulong_atomic_fetch_and(shmem_ctx_t ctx, unsigned long *target, unsigned long value, int pe);
1059 OSHMEM_DECLSPEC unsigned long long pshmem_ctx_ulonglong_atomic_fetch_and(shmem_ctx_t ctx, unsigned long long *target, unsigned long long value, int pe);
1060 OSHMEM_DECLSPEC int32_t pshmem_ctx_int32_atomic_fetch_and(shmem_ctx_t ctx, int32_t *target, int32_t value, int pe);
1061 OSHMEM_DECLSPEC int64_t pshmem_ctx_int64_atomic_fetch_and(shmem_ctx_t ctx, int64_t *target, int64_t value, int pe);
1062 OSHMEM_DECLSPEC uint32_t pshmem_ctx_uint32_atomic_fetch_and(shmem_ctx_t ctx, uint32_t *target, uint32_t value, int pe);
1063 OSHMEM_DECLSPEC uint64_t pshmem_ctx_uint64_atomic_fetch_and(shmem_ctx_t ctx, uint64_t *target, uint64_t value, int pe);
1064 
1065 OSHMEM_DECLSPEC int pshmem_int_atomic_fetch_and(int *target, int value, int pe);
1066 OSHMEM_DECLSPEC long pshmem_long_atomic_fetch_and(long *target, long value, int pe);
1067 OSHMEM_DECLSPEC long long pshmem_longlong_atomic_fetch_and(long long *target, long long value, int pe);
1068 OSHMEM_DECLSPEC unsigned int pshmem_uint_atomic_fetch_and(unsigned int *target, unsigned int value, int pe);
1069 OSHMEM_DECLSPEC unsigned long pshmem_ulong_atomic_fetch_and(unsigned long *target, unsigned long value, int pe);
1070 OSHMEM_DECLSPEC unsigned long long pshmem_ulonglong_atomic_fetch_and(unsigned long long *target, unsigned long long value, int pe);
1071 OSHMEM_DECLSPEC int32_t pshmem_int32_atomic_fetch_and(int32_t *target, int32_t value, int pe);
1072 OSHMEM_DECLSPEC int64_t pshmem_int64_atomic_fetch_and(int64_t *target, int64_t value, int pe);
1073 OSHMEM_DECLSPEC uint32_t pshmem_uint32_atomic_fetch_and(uint32_t *target, uint32_t value, int pe);
1074 OSHMEM_DECLSPEC uint64_t pshmem_uint64_atomic_fetch_and(uint64_t *target, uint64_t value, int pe);
1075 #if OSHMEM_HAVE_C11
1076 #define pshmem_atomic_fetch_and(...)                                          \
1077     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                              \
1078             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)),          \
1079                 int*:         pshmem_ctx_int_atomic_fetch_and,                \
1080                 long*:        pshmem_ctx_long_atomic_fetch_and,               \
1081                 long long*:   pshmem_ctx_longlong_atomic_fetch_and,           \
1082                 unsigned int*:         pshmem_ctx_uint_atomic_fetch_and,      \
1083                 unsigned long*:        pshmem_ctx_ulong_atomic_fetch_and,     \
1084                 unsigned long long*:   pshmem_ctx_ulonglong_atomic_fetch_and, \
1085                 int32_t*:              pshmem_ctx_int32_atomic_fetch_and,     \
1086                 int64_t*:              pshmem_ctx_int64_atomic_fetch_and,     \
1087                 uint32_t*:             pshmem_ctx_uint32_atomic_fetch_and,    \
1088                 uint64_t*:             pshmem_ctx_uint64_atomic_fetch_and,    \
1089                 default:               __opshmem_datatype_ignore),            \
1090             int*:         pshmem_int_atomic_fetch_and,                        \
1091             long*:        pshmem_long_atomic_fetch_and,                       \
1092             long long*:   pshmem_longlong_atomic_fetch_and,                   \
1093             unsigned int*:         pshmem_uint_atomic_fetch_and,              \
1094             unsigned long*:        pshmem_ulong_atomic_fetch_and,             \
1095             unsigned long long*:   pshmem_ulonglong_atomic_fetch_and,         \
1096             int32_t*:              pshmem_ctx_int32_atomic_fetch_and,         \
1097             int64_t*:              pshmem_ctx_int64_atomic_fetch_and,         \
1098             uint32_t*:             pshmem_ctx_uint32_atomic_fetch_and,        \
1099             uint64_t*:             pshmem_ctx_uint64_atomic_fetch_and)(__VA_ARGS__)
1100 #endif
1101 
1102 /* Atomic Fetch&Or */
1103 OSHMEM_DECLSPEC int pshmem_ctx_int_atomic_fetch_or(shmem_ctx_t ctx, int *target, int value, int pe);
1104 OSHMEM_DECLSPEC long pshmem_ctx_long_atomic_fetch_or(shmem_ctx_t ctx, long *target, long value, int pe);
1105 OSHMEM_DECLSPEC long long pshmem_ctx_longlong_atomic_fetch_or(shmem_ctx_t ctx, long long *target, long long value, int pe);
1106 OSHMEM_DECLSPEC unsigned int pshmem_ctx_uint_atomic_fetch_or(shmem_ctx_t ctx, unsigned int *target, unsigned int value, int pe);
1107 OSHMEM_DECLSPEC unsigned long pshmem_ctx_ulong_atomic_fetch_or(shmem_ctx_t ctx, unsigned long *target, unsigned long value, int pe);
1108 OSHMEM_DECLSPEC unsigned long long pshmem_ctx_ulonglong_atomic_fetch_or(shmem_ctx_t ctx, unsigned long long *target, unsigned long long value, int pe);
1109 OSHMEM_DECLSPEC int32_t pshmem_ctx_int32_atomic_fetch_or(shmem_ctx_t ctx, int32_t *target, int32_t value, int pe);
1110 OSHMEM_DECLSPEC int64_t pshmem_ctx_int64_atomic_fetch_or(shmem_ctx_t ctx, int64_t *target, int64_t value, int pe);
1111 OSHMEM_DECLSPEC uint32_t pshmem_ctx_uint32_atomic_fetch_or(shmem_ctx_t ctx, uint32_t *target, uint32_t value, int pe);
1112 OSHMEM_DECLSPEC uint64_t pshmem_ctx_uint64_atomic_fetch_or(shmem_ctx_t ctx, uint64_t *target, uint64_t value, int pe);
1113 
1114 OSHMEM_DECLSPEC int pshmem_int_atomic_fetch_or(int *target, int value, int pe);
1115 OSHMEM_DECLSPEC long pshmem_long_atomic_fetch_or(long *target, long value, int pe);
1116 OSHMEM_DECLSPEC long long pshmem_longlong_atomic_fetch_or(long long *target, long long value, int pe);
1117 OSHMEM_DECLSPEC unsigned int pshmem_uint_atomic_fetch_or(unsigned int *target, unsigned int value, int pe);
1118 OSHMEM_DECLSPEC unsigned long pshmem_ulong_atomic_fetch_or(unsigned long *target, unsigned long value, int pe);
1119 OSHMEM_DECLSPEC unsigned long long pshmem_ulonglong_atomic_fetch_or(unsigned long long *target, unsigned long long value, int pe);
1120 OSHMEM_DECLSPEC int32_t pshmem_int32_atomic_fetch_or(int32_t *target, int32_t value, int pe);
1121 OSHMEM_DECLSPEC int64_t pshmem_int64_atomic_fetch_or(int64_t *target, int64_t value, int pe);
1122 OSHMEM_DECLSPEC uint32_t pshmem_uint32_atomic_fetch_or(uint32_t *target, uint32_t value, int pe);
1123 OSHMEM_DECLSPEC uint64_t pshmem_uint64_atomic_fetch_or(uint64_t *target, uint64_t value, int pe);
1124 #if OSHMEM_HAVE_C11
1125 #define pshmem_atomic_fetch_or(...)                                          \
1126     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                             \
1127             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)),         \
1128                 int*:         pshmem_ctx_int_atomic_fetch_or,                \
1129                 long*:        pshmem_ctx_long_atomic_fetch_or,               \
1130                 long long*:   pshmem_ctx_longlong_atomic_fetch_or,           \
1131                 unsigned int*:         pshmem_ctx_uint_atomic_fetch_or,      \
1132                 unsigned long*:        pshmem_ctx_ulong_atomic_fetch_or,     \
1133                 unsigned long long*:   pshmem_ctx_ulonglong_atomic_fetch_or, \
1134                 int32_t*:              pshmem_ctx_int32_atomic_fetch_or,     \
1135                 int64_t*:              pshmem_ctx_int64_atomic_fetch_or,     \
1136                 uint32_t*:             pshmem_ctx_uint32_atomic_fetch_or,    \
1137                 uint64_t*:             pshmem_ctx_uint64_atomic_fetch_or,    \
1138                 default:               __opshmem_datatype_ignore),           \
1139             int*:         pshmem_int_atomic_fetch_or,                        \
1140             long*:        pshmem_long_atomic_fetch_or,                       \
1141             long long*:   pshmem_longlong_atomic_fetch_or,                   \
1142             unsigned int*:         pshmem_uint_atomic_fetch_or,              \
1143             unsigned long*:        pshmem_ulong_atomic_fetch_or,             \
1144             unsigned long long*:   pshmem_ulonglong_atomic_fetch_or,         \
1145             int32_t*:              pshmem_ctx_int32_atomic_fetch_or,         \
1146             int64_t*:              pshmem_ctx_int64_atomic_fetch_or,         \
1147             uint32_t*:             pshmem_ctx_uint32_atomic_fetch_or,        \
1148             uint64_t*:             pshmem_ctx_uint64_atomic_fetch_or)(__VA_ARGS__)
1149 #endif
1150 
1151 /* Atomic Fetch&Xor */
1152 OSHMEM_DECLSPEC int pshmem_ctx_int_atomic_fetch_xor(shmem_ctx_t ctx, int *target, int value, int pe);
1153 OSHMEM_DECLSPEC long pshmem_ctx_long_atomic_fetch_xor(shmem_ctx_t ctx, long *target, long value, int pe);
1154 OSHMEM_DECLSPEC long long pshmem_ctx_longlong_atomic_fetch_xor(shmem_ctx_t ctx, long long *target, long long value, int pe);
1155 OSHMEM_DECLSPEC unsigned int pshmem_ctx_uint_atomic_fetch_xor(shmem_ctx_t ctx, unsigned int *target, unsigned int value, int pe);
1156 OSHMEM_DECLSPEC unsigned long pshmem_ctx_ulong_atomic_fetch_xor(shmem_ctx_t ctx, unsigned long *target, unsigned long value, int pe);
1157 OSHMEM_DECLSPEC unsigned long long pshmem_ctx_ulonglong_atomic_fetch_xor(shmem_ctx_t ctx, unsigned long long *target, unsigned long long value, int pe);
1158 OSHMEM_DECLSPEC int32_t pshmem_ctx_int32_atomic_fetch_xor(shmem_ctx_t ctx, int32_t *target, int32_t value, int pe);
1159 OSHMEM_DECLSPEC int64_t pshmem_ctx_int64_atomic_fetch_xor(shmem_ctx_t ctx, int64_t *target, int64_t value, int pe);
1160 OSHMEM_DECLSPEC uint32_t pshmem_ctx_uint32_atomic_fetch_xor(shmem_ctx_t ctx, uint32_t *target, uint32_t value, int pe);
1161 OSHMEM_DECLSPEC uint64_t pshmem_ctx_uint64_atomic_fetch_xor(shmem_ctx_t ctx, uint64_t *target, uint64_t value, int pe);
1162 
1163 OSHMEM_DECLSPEC int pshmem_int_atomic_fetch_xor(int *target, int value, int pe);
1164 OSHMEM_DECLSPEC long pshmem_long_atomic_fetch_xor(long *target, long value, int pe);
1165 OSHMEM_DECLSPEC long long pshmem_longlong_atomic_fetch_xor(long long *target, long long value, int pe);
1166 OSHMEM_DECLSPEC unsigned int pshmem_uint_atomic_fetch_xor(unsigned int *target, unsigned int value, int pe);
1167 OSHMEM_DECLSPEC unsigned long pshmem_ulong_atomic_fetch_xor(unsigned long *target, unsigned long value, int pe);
1168 OSHMEM_DECLSPEC unsigned long long pshmem_ulonglong_atomic_fetch_xor(unsigned long long *target, unsigned long long value, int pe);
1169 OSHMEM_DECLSPEC int32_t pshmem_int32_atomic_fetch_xor(int32_t *target, int32_t value, int pe);
1170 OSHMEM_DECLSPEC int64_t pshmem_int64_atomic_fetch_xor(int64_t *target, int64_t value, int pe);
1171 OSHMEM_DECLSPEC uint32_t pshmem_uint32_atomic_fetch_xor(uint32_t *target, uint32_t value, int pe);
1172 OSHMEM_DECLSPEC uint64_t pshmem_uint64_atomic_fetch_xor(uint64_t *target, uint64_t value, int pe);
1173 #if OSHMEM_HAVE_C11
1174 #define pshmem_atomic_fetch_xor(...)                                          \
1175     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                              \
1176             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)),          \
1177                 int*:         pshmem_ctx_int_atomic_fetch_xor,                \
1178                 long*:        pshmem_ctx_long_atomic_fetch_xor,               \
1179                 long long*:   pshmem_ctx_longlong_atomic_fetch_xor,           \
1180                 unsigned int*:         pshmem_ctx_uint_atomic_fetch_xor,      \
1181                 unsigned long*:        pshmem_ctx_ulong_atomic_fetch_xor,     \
1182                 unsigned long long*:   pshmem_ctx_ulonglong_atomic_fetch_xor, \
1183                 int32_t*:              pshmem_ctx_int32_atomic_fetch_xor,     \
1184                 int64_t*:              pshmem_ctx_int64_atomic_fetch_xor,     \
1185                 uint32_t*:             pshmem_ctx_uint32_atomic_fetch_xor,    \
1186                 uint64_t*:             pshmem_ctx_uint64_atomic_fetch_xor,    \
1187                 default:               __opshmem_datatype_ignore),            \
1188             int*:         pshmem_int_atomic_fetch_xor,                        \
1189             long*:        pshmem_long_atomic_fetch_xor,                       \
1190             long long*:   pshmem_longlong_atomic_fetch_xor,                   \
1191             unsigned int*:         pshmem_uint_atomic_fetch_xor,              \
1192             unsigned long*:        pshmem_ulong_atomic_fetch_xor,             \
1193             unsigned long long*:   pshmem_ulonglong_atomic_fetch_xor,         \
1194             int32_t*:              pshmem_ctx_int32_atomic_fetch_xor,         \
1195             int64_t*:              pshmem_ctx_int64_atomic_fetch_xor,         \
1196             uint32_t*:             pshmem_ctx_uint32_atomic_fetch_xor,        \
1197             uint64_t*:             pshmem_ctx_uint64_atomic_fetch_xor)(__VA_ARGS__)
1198 #endif
1199 
1200 /* Atomic Fetch */
1201 OSHMEM_DECLSPEC int pshmem_ctx_int_atomic_fetch(shmem_ctx_t ctx, const int *target, int pe);
1202 OSHMEM_DECLSPEC long pshmem_ctx_long_atomic_fetch(shmem_ctx_t ctx, const long *target, int pe);
1203 OSHMEM_DECLSPEC long long pshmem_ctx_longlong_atomic_fetch(shmem_ctx_t ctx, const long long *target, int pe);
1204 OSHMEM_DECLSPEC unsigned int pshmem_ctx_uint_atomic_fetch(shmem_ctx_t ctx, const unsigned int *target, int pe);
1205 OSHMEM_DECLSPEC unsigned long pshmem_ctx_ulong_atomic_fetch(shmem_ctx_t ctx, const unsigned long *target, int pe);
1206 OSHMEM_DECLSPEC unsigned long long pshmem_ctx_ulonglong_atomic_fetch(shmem_ctx_t ctx, const unsigned long long *target, int pe);
1207 OSHMEM_DECLSPEC float pshmem_ctx_float_atomic_fetch(shmem_ctx_t ctx, const float *target, int pe);
1208 OSHMEM_DECLSPEC double pshmem_ctx_double_atomic_fetch(shmem_ctx_t ctx, const double *target, int pe);
1209 
1210 OSHMEM_DECLSPEC int pshmem_int_atomic_fetch(const int *target, int pe);
1211 OSHMEM_DECLSPEC long pshmem_long_atomic_fetch(const long *target, int pe);
1212 OSHMEM_DECLSPEC long long pshmem_longlong_atomic_fetch(const long long *target, int pe);
1213 OSHMEM_DECLSPEC unsigned int pshmem_uint_atomic_fetch(const unsigned int *target, int pe);
1214 OSHMEM_DECLSPEC unsigned long pshmem_ulong_atomic_fetch(const unsigned long *target, int pe);
1215 OSHMEM_DECLSPEC unsigned long long pshmem_ulonglong_atomic_fetch(const unsigned long long *target, int pe);
1216 OSHMEM_DECLSPEC float pshmem_float_atomic_fetch(const float *target, int pe);
1217 OSHMEM_DECLSPEC double pshmem_double_atomic_fetch(const double *target, int pe);
1218 #if OSHMEM_HAVE_C11
1219 #define pshmem_atomic_fetch(...)                                        \
1220     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                        \
1221             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)),    \
1222                 int*:         pshmem_ctx_int_atomic_fetch,              \
1223                 long*:        pshmem_ctx_long_atomic_fetch,             \
1224                 long long*:   pshmem_ctx_longlong_atomic_fetch,         \
1225                 unsigned int*:       pshmem_ctx_uint_atomic_fetch,      \
1226                 unsigned long*:      pshmem_ctx_ulong_atomic_fetch,     \
1227                 unsigned long long*: pshmem_ctx_ulonglong_atomic_fetch, \
1228                 float*:       pshmem_ctx_float_atomic_fetch,            \
1229                 double*:      pshmem_ctx_double_atomic_fetch,           \
1230                 default:      __opshmem_datatype_ignore),               \
1231             int*:        pshmem_int_atomic_fetch,                       \
1232             long*:       pshmem_long_atomic_fetch,                      \
1233             long long*:  pshmem_longlong_atomic_fetch,                  \
1234             unsigned int*:       pshmem_uint_atomic_fetch,              \
1235             unsigned long*:      pshmem_ulong_atomic_fetch,             \
1236             unsigned long long*: pshmem_ulonglong_atomic_fetch,         \
1237             float*:       pshmem_float_atomic_fetch,                    \
1238             double*:      pshmem_double_atomic_fetch)(__VA_ARGS__)
1239 #endif
1240 
1241 OSHMEM_DECLSPEC int pshmem_int_fetch(const int *target, int pe);
1242 OSHMEM_DECLSPEC long pshmem_long_fetch(const long *target, int pe);
1243 OSHMEM_DECLSPEC long long pshmem_longlong_fetch(const long long *target, int pe);
1244 OSHMEM_DECLSPEC float pshmem_float_fetch(const float *target, int pe);
1245 OSHMEM_DECLSPEC double pshmem_double_fetch(const double *target, int pe);
1246 #if OSHMEM_HAVE_C11
1247 #define pshmem_fetch(dst, pe)                            \
1248     _Generic(&*(dst),                                    \
1249             int*:        pshmem_int_fetch,               \
1250             long*:       pshmem_long_fetch,              \
1251             long long*:  pshmem_longlong_fetch,          \
1252             float*:      pshmem_float_fetch,             \
1253             double*:     pshmem_double_fetch)(dst, pe)
1254 #endif
1255 
1256 /* Atomic Fetch&Inc */
1257 OSHMEM_DECLSPEC int pshmem_ctx_int_atomic_fetch_inc(shmem_ctx_t ctx, int *target, int pe);
1258 OSHMEM_DECLSPEC long pshmem_ctx_long_atomic_fetch_inc(shmem_ctx_t ctx, long *target, int pe);
1259 OSHMEM_DECLSPEC long long pshmem_ctx_longlong_atomic_fetch_inc(shmem_ctx_t ctx, long long *target, int pe);
1260 OSHMEM_DECLSPEC unsigned int pshmem_ctx_uint_atomic_fetch_inc(shmem_ctx_t ctx, unsigned int *target, int pe);
1261 OSHMEM_DECLSPEC unsigned long pshmem_ctx_ulong_atomic_fetch_inc(shmem_ctx_t ctx, unsigned long *target, int pe);
1262 OSHMEM_DECLSPEC unsigned long long pshmem_ctx_ulonglong_atomic_fetch_inc(shmem_ctx_t ctx, unsigned long long *target, int pe);
1263 
1264 OSHMEM_DECLSPEC int pshmem_int_atomic_fetch_inc(int *target, int pe);
1265 OSHMEM_DECLSPEC long pshmem_long_atomic_fetch_inc(long *target, int pe);
1266 OSHMEM_DECLSPEC long long pshmem_longlong_atomic_fetch_inc(long long *target, int pe);
1267 OSHMEM_DECLSPEC unsigned int pshmem_uint_atomic_fetch_inc(unsigned int *target, int pe);
1268 OSHMEM_DECLSPEC unsigned long pshmem_ulong_atomic_fetch_inc(unsigned long *target, int pe);
1269 OSHMEM_DECLSPEC unsigned long long pshmem_ulonglong_atomic_fetch_inc(unsigned long long *target, int pe);
1270 #if OSHMEM_HAVE_C11
1271 #define pshmem_atomic_fetch_inc(...)                                 \
1272     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                     \
1273             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)), \
1274                 int*:         pshmem_ctx_int_atomic_fetch_inc,       \
1275                 long*:        pshmem_ctx_long_atomic_fetch_inc,      \
1276                 long long*:   pshmem_ctx_longlong_atomic_fetch_inc,  \
1277                 unsigned int*:       pshmem_ctx_uint_atomic_fetch_inc,      \
1278                 unsigned long*:      pshmem_ctx_ulong_atomic_fetch_inc,     \
1279                 unsigned long long*: pshmem_ctx_ulonglong_atomic_fetch_inc, \
1280                 default:      __opshmem_datatype_ignore),            \
1281             int*:         pshmem_int_atomic_fetch_inc,               \
1282             long*:        pshmem_long_atomic_fetch_inc,              \
1283             long long*:   pshmem_longlong_atomic_fetch_inc,          \
1284             unsigned int*:       pshmem_uint_atomic_fetch_inc,       \
1285             unsigned long*:      pshmem_ulong_atomic_fetch_inc,      \
1286             unsigned long long*: pshmem_ulonglong_atomic_fetch_inc)(__VA_ARGS__)
1287 #endif
1288 
1289 OSHMEM_DECLSPEC int pshmem_int_finc(int *target, int pe);
1290 OSHMEM_DECLSPEC long pshmem_long_finc(long *target, int pe);
1291 OSHMEM_DECLSPEC long long pshmem_longlong_finc(long long *target, int pe);
1292 #if OSHMEM_HAVE_C11
1293 #define pshmem_finc(dst, pe)                                  \
1294     _Generic(&*(dst),                                         \
1295             int*:         pshmem_int_finc,                    \
1296             long*:        pshmem_long_finc,                   \
1297             long long*:   pshmem_longlong_finc)(dst, pe)
1298 #endif
1299 
1300 /* Atomic Add */
1301 OSHMEM_DECLSPEC void pshmem_ctx_int_atomic_add(shmem_ctx_t ctx, int *target, int value, int pe);
1302 OSHMEM_DECLSPEC void pshmem_ctx_long_atomic_add(shmem_ctx_t ctx, long *target, long value, int pe);
1303 OSHMEM_DECLSPEC void pshmem_ctx_longlong_atomic_add(shmem_ctx_t ctx, long long *target, long long value, int pe);
1304 OSHMEM_DECLSPEC void pshmem_ctx_uint_atomic_add(shmem_ctx_t ctx, unsigned int *target, unsigned int value, int pe);
1305 OSHMEM_DECLSPEC void pshmem_ctx_ulong_atomic_add(shmem_ctx_t ctx, unsigned long *target, unsigned long value, int pe);
1306 OSHMEM_DECLSPEC void pshmem_ctx_ulonglong_atomic_add(shmem_ctx_t ctx, unsigned long long *target, unsigned long long value, int pe);
1307 
1308 OSHMEM_DECLSPEC void pshmem_int_atomic_add(int *target, int value, int pe);
1309 OSHMEM_DECLSPEC void pshmem_long_atomic_add(long *target, long value, int pe);
1310 OSHMEM_DECLSPEC void pshmem_longlong_atomic_add(long long *target, long long value, int pe);
1311 OSHMEM_DECLSPEC void pshmem_uint_atomic_add(unsigned int *target, unsigned int value, int pe);
1312 OSHMEM_DECLSPEC void pshmem_ulong_atomic_add(unsigned long *target, unsigned long value, int pe);
1313 OSHMEM_DECLSPEC void pshmem_ulonglong_atomic_add(unsigned long long *target, unsigned long long value, int pe);
1314 #if OSHMEM_HAVE_C11
1315 #define pshmem_atomic_add(...)                                        \
1316     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                      \
1317             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)),  \
1318                 int*:         pshmem_ctx_int_atomic_add,              \
1319                 long*:        pshmem_ctx_long_atomic_add,             \
1320                 long long*:   pshmem_ctx_longlong_atomic_add,         \
1321                 unsigned int*:       pshmem_ctx_uint_atomic_add,      \
1322                 unsigned long*:      pshmem_ctx_ulong_atomic_add,     \
1323                 unsigned long long*: pshmem_ctx_ulonglong_atomic_add, \
1324                 default:      __opshmem_datatype_ignore),             \
1325             int*:         pshmem_int_atomic_add,                      \
1326             long*:        pshmem_long_atomic_add,                     \
1327             long long*:   pshmem_longlong_atomic_add,                 \
1328             unsigned int*:       pshmem_uint_atomic_add,              \
1329             unsigned long*:      pshmem_ulong_atomic_add,             \
1330             unsigned long long*: pshmem_ulonglong_atomic_add)(__VA_ARGS__)
1331 #endif
1332 
1333 OSHMEM_DECLSPEC void pshmem_int_add(int *target, int value, int pe);
1334 OSHMEM_DECLSPEC void pshmem_long_add(long *target, long value, int pe);
1335 OSHMEM_DECLSPEC void pshmem_longlong_add(long long *target, long long value, int pe);
1336 #if OSHMEM_HAVE_C11
1337 #define pshmem_add(dst, val, pe)                             \
1338     _Generic(&*(dst),                                        \
1339             int*:         pshmem_int_add,                    \
1340             long*:        pshmem_long_add,                   \
1341             long long*:   pshmem_longlong_add)(dst, val, pe)
1342 #endif
1343 
1344 /* Atomic And */
1345 OSHMEM_DECLSPEC void pshmem_ctx_int_atomic_and(shmem_ctx_t ctx, int *target, int value, int pe);
1346 OSHMEM_DECLSPEC void pshmem_ctx_long_atomic_and(shmem_ctx_t ctx, long *target, long value, int pe);
1347 OSHMEM_DECLSPEC void pshmem_ctx_longlong_atomic_and(shmem_ctx_t ctx, long long *target, long long value, int pe);
1348 OSHMEM_DECLSPEC void pshmem_ctx_uint_atomic_and(shmem_ctx_t ctx, unsigned int *target, unsigned int value, int pe);
1349 OSHMEM_DECLSPEC void pshmem_ctx_ulong_atomic_and(shmem_ctx_t ctx, unsigned long *target, unsigned long value, int pe);
1350 OSHMEM_DECLSPEC void pshmem_ctx_ulonglong_atomic_and(shmem_ctx_t ctx, unsigned long long *target, unsigned long long value, int pe);
1351 OSHMEM_DECLSPEC void pshmem_ctx_int32_atomic_and(shmem_ctx_t ctx, int32_t *target, int32_t value, int pe);
1352 OSHMEM_DECLSPEC void pshmem_ctx_int64_atomic_and(shmem_ctx_t ctx, int64_t *target, int64_t value, int pe);
1353 OSHMEM_DECLSPEC void pshmem_ctx_uint32_atomic_and(shmem_ctx_t ctx, uint32_t *target, uint32_t value, int pe);
1354 OSHMEM_DECLSPEC void pshmem_ctx_uint64_atomic_and(shmem_ctx_t ctx, uint64_t *target, uint64_t value, int pe);
1355 
1356 OSHMEM_DECLSPEC void pshmem_int_atomic_and(int *target, int value, int pe);
1357 OSHMEM_DECLSPEC void pshmem_long_atomic_and(long *target, long value, int pe);
1358 OSHMEM_DECLSPEC void pshmem_longlong_atomic_and(long long *target, long long value, int pe);
1359 OSHMEM_DECLSPEC void pshmem_uint_atomic_and(unsigned int *target, unsigned int value, int pe);
1360 OSHMEM_DECLSPEC void pshmem_ulong_atomic_and(unsigned long *target, unsigned long value, int pe);
1361 OSHMEM_DECLSPEC void pshmem_ulonglong_atomic_and(unsigned long long *target, unsigned long long value, int pe);
1362 OSHMEM_DECLSPEC void pshmem_int32_atomic_and(int32_t *target, int32_t value, int pe);
1363 OSHMEM_DECLSPEC void pshmem_int64_atomic_and(int64_t *target, int64_t value, int pe);
1364 OSHMEM_DECLSPEC void pshmem_uint32_atomic_and(uint32_t *target, uint32_t value, int pe);
1365 OSHMEM_DECLSPEC void pshmem_uint64_atomic_and(uint64_t *target, uint64_t value, int pe);
1366 #if OSHMEM_HAVE_C11
1367 #define pshmem_atomic_and(...)                                          \
1368     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                        \
1369             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)),    \
1370                 int*:         pshmem_ctx_int_atomic_and,                \
1371                 long*:        pshmem_ctx_long_atomic_and,               \
1372                 long long*:   pshmem_ctx_longlong_atomic_and,           \
1373                 unsigned int*:         pshmem_ctx_uint_atomic_and,      \
1374                 unsigned long*:        pshmem_ctx_ulong_atomic_and,     \
1375                 unsigned long long*:   pshmem_ctx_ulonglong_atomic_and, \
1376                 default:               __opshmem_datatype_ignore),      \
1377             int*:         pshmem_int_atomic_and,                        \
1378             long*:        pshmem_long_atomic_and,                       \
1379             long long*:   pshmem_longlong_atomic_and,                   \
1380             unsigned int*:         pshmem_uint_atomic_and,              \
1381             unsigned long*:        pshmem_ulong_atomic_and,             \
1382             unsigned long long*:   pshmem_ulonglong_atomic_and)(__VA_ARGS__)
1383 #endif
1384 
1385 /* Atomic Or */
1386 OSHMEM_DECLSPEC void pshmem_ctx_int_atomic_or(shmem_ctx_t ctx, int *target, int value, int pe);
1387 OSHMEM_DECLSPEC void pshmem_ctx_long_atomic_or(shmem_ctx_t ctx, long *target, long value, int pe);
1388 OSHMEM_DECLSPEC void pshmem_ctx_longlong_atomic_or(shmem_ctx_t ctx, long long *target, long long value, int pe);
1389 OSHMEM_DECLSPEC void pshmem_ctx_uint_atomic_or(shmem_ctx_t ctx, unsigned int *target, unsigned int value, int pe);
1390 OSHMEM_DECLSPEC void pshmem_ctx_ulong_atomic_or(shmem_ctx_t ctx, unsigned long *target, unsigned long value, int pe);
1391 OSHMEM_DECLSPEC void pshmem_ctx_ulonglong_atomic_or(shmem_ctx_t ctx, unsigned long long *target, unsigned long long value, int pe);
1392 OSHMEM_DECLSPEC void pshmem_ctx_int32_atomic_or(shmem_ctx_t ctx, int32_t *target, int32_t value, int pe);
1393 OSHMEM_DECLSPEC void pshmem_ctx_int64_atomic_or(shmem_ctx_t ctx, int64_t *target, int64_t value, int pe);
1394 OSHMEM_DECLSPEC void pshmem_ctx_uint32_atomic_or(shmem_ctx_t ctx, uint32_t *target, uint32_t value, int pe);
1395 OSHMEM_DECLSPEC void pshmem_ctx_uint64_atomic_or(shmem_ctx_t ctx, uint64_t *target, uint64_t value, int pe);
1396 
1397 OSHMEM_DECLSPEC void pshmem_int_atomic_or(int *target, int value, int pe);
1398 OSHMEM_DECLSPEC void pshmem_long_atomic_or(long *target, long value, int pe);
1399 OSHMEM_DECLSPEC void pshmem_longlong_atomic_or(long long *target, long long value, int pe);
1400 OSHMEM_DECLSPEC void pshmem_uint_atomic_or(unsigned int *target, unsigned int value, int pe);
1401 OSHMEM_DECLSPEC void pshmem_ulong_atomic_or(unsigned long *target, unsigned long value, int pe);
1402 OSHMEM_DECLSPEC void pshmem_ulonglong_atomic_or(unsigned long long *target, unsigned long long value, int pe);
1403 OSHMEM_DECLSPEC void pshmem_int32_atomic_or(int32_t *target, int32_t value, int pe);
1404 OSHMEM_DECLSPEC void pshmem_int64_atomic_or(int64_t *target, int64_t value, int pe);
1405 OSHMEM_DECLSPEC void pshmem_uint32_atomic_or(uint32_t *target, uint32_t value, int pe);
1406 OSHMEM_DECLSPEC void pshmem_uint64_atomic_or(uint64_t *target, uint64_t value, int pe);
1407 #if OSHMEM_HAVE_C11
1408 #define pshmem_atomic_or(...)                                          \
1409     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                       \
1410             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)),   \
1411                 int*:         pshmem_ctx_int_atomic_or,                \
1412                 long*:        pshmem_ctx_long_atomic_or,               \
1413                 long long*:   pshmem_ctx_longlong_atomic_or,           \
1414                 unsigned int*:         pshmem_ctx_uint_atomic_or,      \
1415                 unsigned long*:        pshmem_ctx_ulong_atomic_or,     \
1416                 unsigned long long*:   pshmem_ctx_ulonglong_atomic_or, \
1417                 default:               __opshmem_datatype_ignore),     \
1418             int*:         pshmem_int_atomic_or,                        \
1419             long*:        pshmem_long_atomic_or,                       \
1420             long long*:   pshmem_longlong_atomic_or,                   \
1421             unsigned int*:         pshmem_uint_atomic_or,              \
1422             unsigned long*:        pshmem_ulong_atomic_or,             \
1423             unsigned long long*:   pshmem_ulonglong_atomic_or)(__VA_ARGS__)
1424 #endif
1425 
1426 /* Atomic Xor */
1427 OSHMEM_DECLSPEC void pshmem_ctx_int_atomic_xor(shmem_ctx_t ctx, int *target, int value, int pe);
1428 OSHMEM_DECLSPEC void pshmem_ctx_long_atomic_xor(shmem_ctx_t ctx, long *target, long value, int pe);
1429 OSHMEM_DECLSPEC void pshmem_ctx_longlong_atomic_xor(shmem_ctx_t ctx, long long *target, long long value, int pe);
1430 OSHMEM_DECLSPEC void pshmem_ctx_uint_atomic_xor(shmem_ctx_t ctx, unsigned int *target, unsigned int value, int pe);
1431 OSHMEM_DECLSPEC void pshmem_ctx_ulong_atomic_xor(shmem_ctx_t ctx, unsigned long *target, unsigned long value, int pe);
1432 OSHMEM_DECLSPEC void pshmem_ctx_ulonglong_atomic_xor(shmem_ctx_t ctx, unsigned long long *target, unsigned long long value, int pe);
1433 OSHMEM_DECLSPEC void pshmem_ctx_int32_atomic_xor(shmem_ctx_t ctx, int32_t *target, int32_t value, int pe);
1434 OSHMEM_DECLSPEC void pshmem_ctx_int64_atomic_xor(shmem_ctx_t ctx, int64_t *target, int64_t value, int pe);
1435 OSHMEM_DECLSPEC void pshmem_ctx_uint32_atomic_xor(shmem_ctx_t ctx, uint32_t *target, uint32_t value, int pe);
1436 OSHMEM_DECLSPEC void pshmem_ctx_uint64_atomic_xor(shmem_ctx_t ctx, uint64_t *target, uint64_t value, int pe);
1437 
1438 OSHMEM_DECLSPEC void pshmem_int_atomic_xor(int *target, int value, int pe);
1439 OSHMEM_DECLSPEC void pshmem_long_atomic_xor(long *target, long value, int pe);
1440 OSHMEM_DECLSPEC void pshmem_longlong_atomic_xor(long long *target, long long value, int pe);
1441 OSHMEM_DECLSPEC void pshmem_uint_atomic_xor(unsigned int *target, unsigned int value, int pe);
1442 OSHMEM_DECLSPEC void pshmem_ulong_atomic_xor(unsigned long *target, unsigned long value, int pe);
1443 OSHMEM_DECLSPEC void pshmem_ulonglong_atomic_xor(unsigned long long *target, unsigned long long value, int pe);
1444 OSHMEM_DECLSPEC void pshmem_int32_atomic_xor(int32_t *target, int32_t value, int pe);
1445 OSHMEM_DECLSPEC void pshmem_int64_atomic_xor(int64_t *target, int64_t value, int pe);
1446 OSHMEM_DECLSPEC void pshmem_uint32_atomic_xor(uint32_t *target, uint32_t value, int pe);
1447 OSHMEM_DECLSPEC void pshmem_uint64_atomic_xor(uint64_t *target, uint64_t value, int pe);
1448 #if OSHMEM_HAVE_C11
1449 #define pshmem_atomic_xor(...)                                          \
1450     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                        \
1451             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)),    \
1452                 int*:         pshmem_ctx_int_atomic_xor,                \
1453                 long*:        pshmem_ctx_long_atomic_xor,               \
1454                 long long*:   pshmem_ctx_longlong_atomic_xor,           \
1455                 unsigned int*:         pshmem_ctx_uint_atomic_xor,      \
1456                 unsigned long*:        pshmem_ctx_ulong_atomic_xor,     \
1457                 unsigned long long*:   pshmem_ctx_ulonglong_atomic_xor, \
1458                 default:               __opshmem_datatype_ignore),      \
1459             int*:         pshmem_int_atomic_xor,                        \
1460             long*:        pshmem_long_atomic_xor,                       \
1461             long long*:   pshmem_longlong_atomic_xor,                   \
1462             unsigned int*:         pshmem_uint_atomic_xor,              \
1463             unsigned long*:        pshmem_ulong_atomic_xor,             \
1464             unsigned long long*:   pshmem_ulonglong_atomic_xor)(__VA_ARGS__)
1465 #endif
1466 
1467 /* Atomic Inc */
1468 OSHMEM_DECLSPEC void pshmem_ctx_int_atomic_inc(shmem_ctx_t ctx, int *target, int pe);
1469 OSHMEM_DECLSPEC void pshmem_ctx_long_atomic_inc(shmem_ctx_t ctx, long *target, int pe);
1470 OSHMEM_DECLSPEC void pshmem_ctx_longlong_atomic_inc(shmem_ctx_t ctx, long long *target, int pe);
1471 OSHMEM_DECLSPEC void pshmem_ctx_uint_atomic_inc(shmem_ctx_t ctx, unsigned int *target, int pe);
1472 OSHMEM_DECLSPEC void pshmem_ctx_ulong_atomic_inc(shmem_ctx_t ctx, unsigned long *target, int pe);
1473 OSHMEM_DECLSPEC void pshmem_ctx_ulonglong_atomic_inc(shmem_ctx_t ctx, unsigned long long *target, int pe);
1474 
1475 OSHMEM_DECLSPEC void pshmem_int_atomic_inc(int *target, int pe);
1476 OSHMEM_DECLSPEC void pshmem_long_atomic_inc(long *target, int pe);
1477 OSHMEM_DECLSPEC void pshmem_longlong_atomic_inc(long long *target, int pe);
1478 OSHMEM_DECLSPEC void pshmem_uint_atomic_inc(unsigned int *target, int pe);
1479 OSHMEM_DECLSPEC void pshmem_ulong_atomic_inc(unsigned long *target, int pe);
1480 OSHMEM_DECLSPEC void pshmem_ulonglong_atomic_inc(unsigned long long *target, int pe);
1481 #if OSHMEM_HAVE_C11
1482 #define pshmem_atomic_inc(...)                                       \
1483     _Generic(&*(__OSHMEM_VAR_ARG1(__VA_ARGS__)),                     \
1484             shmem_ctx_t:  _Generic((__OSHMEM_VAR_ARG2(__VA_ARGS__)), \
1485                 int*:         pshmem_ctx_int_atomic_inc,             \
1486                 long*:        pshmem_ctx_long_atomic_inc,            \
1487                 long long*:   pshmem_ctx_longlong_atomic_inc,        \
1488                 unsigned int*:       pshmem_ctx_uint_atomic_inc,     \
1489                 unsigned long*:      pshmem_ctx_ulong_atomic_inc,    \
1490                 unsigned long long*: pshmem_ctx_ulonglong_atomic_inc,\
1491                 default:      __opshmem_datatype_ignore),            \
1492             int*:         pshmem_int_atomic_inc,                     \
1493             long*:        pshmem_long_atomic_inc,                    \
1494             long long*:   pshmem_longlong_atomic_inc,                \
1495             unsigned int*:       pshmem_uint_atomic_inc,             \
1496             unsigned long*:      pshmem_ulong_atomic_inc,            \
1497             unsigned long long*: pshmem_ulonglong_atomic_inc)(__VA_ARGS__)
1498 #endif
1499 
1500 OSHMEM_DECLSPEC void pshmem_int_inc(int *target, int pe);
1501 OSHMEM_DECLSPEC void pshmem_long_inc(long *target, int pe);
1502 OSHMEM_DECLSPEC void pshmem_longlong_inc(long long *target, int pe);
1503 #if OSHMEM_HAVE_C11
1504 #define pshmem_inc(dst, pe)                            \
1505     _Generic(&*(dst),                                  \
1506             int*:         pshmem_int_inc,              \
1507             long*:        pshmem_long_inc,             \
1508             long long*:   pshmem_longlong_inc)(dst, pe)
1509 #endif
1510 
1511 /*
1512  * Lock functions
1513  */
1514 OSHMEM_DECLSPEC void pshmem_set_lock(volatile long *lock);
1515 OSHMEM_DECLSPEC void pshmem_clear_lock(volatile long *lock);
1516 OSHMEM_DECLSPEC int pshmem_test_lock(volatile long *lock);
1517 
1518 /*
1519  * P2P sync routines
1520  */
1521 OSHMEM_DECLSPEC  void pshmem_short_wait(volatile short *addr, short value);
1522 OSHMEM_DECLSPEC  void pshmem_int_wait(volatile int *addr, int value);
1523 OSHMEM_DECLSPEC  void pshmem_long_wait(volatile long *addr, long value);
1524 OSHMEM_DECLSPEC  void pshmem_longlong_wait(volatile long long *addr, long long value);
1525 OSHMEM_DECLSPEC  void pshmem_wait(volatile long *addr, long value);
1526 
1527 OSHMEM_DECLSPEC  void pshmem_short_wait_until(volatile short *addr, int cmp, short value);
1528 OSHMEM_DECLSPEC  void pshmem_int_wait_until(volatile int *addr, int cmp, int value);
1529 OSHMEM_DECLSPEC  void pshmem_long_wait_until(volatile long *addr, int cmp, long value);
1530 OSHMEM_DECLSPEC  void pshmem_longlong_wait_until(volatile long long *addr, int cmp, long long value);
1531 OSHMEM_DECLSPEC  void pshmem_ushort_wait_until(volatile unsigned short *addr, int cmp, unsigned short value);
1532 OSHMEM_DECLSPEC  void pshmem_uint_wait_until(volatile unsigned int *addr, int cmp, unsigned int value);
1533 OSHMEM_DECLSPEC  void pshmem_ulong_wait_until(volatile unsigned long *addr, int cmp, unsigned long value);
1534 OSHMEM_DECLSPEC  void pshmem_ulonglong_wait_until(volatile unsigned long long *addr, int cmp, unsigned long long value);
1535 OSHMEM_DECLSPEC  void pshmem_int32_wait_until(volatile int32_t *addr, int cmp, int32_t value);
1536 OSHMEM_DECLSPEC  void pshmem_int64_wait_until(volatile int64_t *addr, int cmp, int64_t value);
1537 OSHMEM_DECLSPEC  void pshmem_uint32_wait_until(volatile uint32_t *addr, int cmp, uint32_t value);
1538 OSHMEM_DECLSPEC  void pshmem_uint64_wait_until(volatile uint64_t *addr, int cmp, uint64_t value);
1539 OSHMEM_DECLSPEC  void pshmem_size_wait_until(volatile size_t *addr, int cmp, size_t value);
1540 OSHMEM_DECLSPEC  void pshmem_ptrdiff_wait_until(volatile ptrdiff_t *addr, int cmp, ptrdiff_t value);
1541 #if OSHMEM_HAVE_C11
1542 #define pshmem_wait_until(addr, cmp, value)                  \
1543     _Generic(&*(addr),                                       \
1544         short*:       pshmem_short_wait_until,               \
1545         int*:         pshmem_int_wait_until,                 \
1546         long*:        pshmem_long_wait_until,                \
1547         long long*:   pshmem_longlong_wait_until,            \
1548         unsigned short*:       pshmem_short_wait_until,      \
1549         unsigned int*:         pshmem_int_wait_until,        \
1550         unsigned long*:        pshmem_long_wait_until,       \
1551         unsigned long long*:   pshmem_longlong_wait_until)(addr, cmp, value)
1552 #endif
1553 
1554 OSHMEM_DECLSPEC  int pshmem_short_test(volatile short *addr, int cmp, short value);
1555 OSHMEM_DECLSPEC  int pshmem_int_test(volatile int *addr, int cmp, int value);
1556 OSHMEM_DECLSPEC  int pshmem_long_test(volatile long *addr, int cmp, long value);
1557 OSHMEM_DECLSPEC  int pshmem_longlong_test(volatile long long *addr, int cmp, long long value);
1558 OSHMEM_DECLSPEC  int pshmem_ushort_test(volatile unsigned short *addr, int cmp, unsigned short value);
1559 OSHMEM_DECLSPEC  int pshmem_uint_test(volatile unsigned int *addr, int cmp, unsigned int value);
1560 OSHMEM_DECLSPEC  int pshmem_ulong_test(volatile unsigned long *addr, int cmp, unsigned long value);
1561 OSHMEM_DECLSPEC  int pshmem_ulonglong_test(volatile unsigned long long *addr, int cmp, unsigned long long value);
1562 OSHMEM_DECLSPEC  int pshmem_int32_test(volatile int32_t *addr, int cmp, int32_t value);
1563 OSHMEM_DECLSPEC  int pshmem_int64_test(volatile int64_t *addr, int cmp, int64_t value);
1564 OSHMEM_DECLSPEC  int pshmem_uint32_test(volatile uint32_t *addr, int cmp, uint32_t value);
1565 OSHMEM_DECLSPEC  int pshmem_uint64_test(volatile uint64_t *addr, int cmp, uint64_t value);
1566 OSHMEM_DECLSPEC  int pshmem_size_test(volatile size_t *addr, int cmp, size_t value);
1567 OSHMEM_DECLSPEC  int pshmem_ptrdiff_test(volatile ptrdiff_t *addr, int cmp, ptrdiff_t value);
1568 #if OSHMEM_HAVE_C11
1569 #define pshmem_test(addr, cmp, value)                  \
1570     _Generic(&*(addr),                                 \
1571         short*:       pshmem_short_test,               \
1572         int*:         pshmem_int_test,                 \
1573         long*:        pshmem_long_test,                \
1574         long long*:   pshmem_longlong_test,            \
1575         unsigned short*:       pshmem_short_test,      \
1576         unsigned int*:         pshmem_int_test,        \
1577         unsigned long*:        pshmem_long_test,       \
1578         unsigned long long*:   pshmem_longlong_test)(addr, cmp, value)
1579 #endif
1580 
1581 /*
1582  * Barrier sync routines
1583  */
1584 OSHMEM_DECLSPEC  void pshmem_barrier(int PE_start, int logPE_stride, int PE_size, long *pSync);
1585 OSHMEM_DECLSPEC  void pshmem_barrier_all(void);
1586 OSHMEM_DECLSPEC  void pshmem_sync(int PE_start, int logPE_stride, int PE_size, long *pSync);
1587 OSHMEM_DECLSPEC  void pshmem_sync_all(void);
1588 OSHMEM_DECLSPEC  void pshmem_fence(void);
1589 OSHMEM_DECLSPEC  void pshmem_ctx_fence(shmem_ctx_t ctx);
1590 OSHMEM_DECLSPEC  void pshmem_quiet(void);
1591 OSHMEM_DECLSPEC  void pshmem_ctx_quiet(shmem_ctx_t ctx);
1592 
1593 /*
1594  * Collective routines
1595  */
1596 OSHMEM_DECLSPEC void pshmem_broadcast32(void *target, const void *source, size_t nlong, int PE_root, int PE_start, int logPE_stride, int PE_size, long *pSync);
1597 OSHMEM_DECLSPEC void pshmem_broadcast64(void *target, const void *source, size_t nlong, int PE_root, int PE_start, int logPE_stride, int PE_size, long *pSync);
1598 OSHMEM_DECLSPEC void pshmem_collect32(void *target, const void *source, size_t nlong, int PE_start, int logPE_stride, int PE_size, long *pSync);
1599 OSHMEM_DECLSPEC void pshmem_collect64(void *target, const void *source, size_t nlong, int PE_start, int logPE_stride, int PE_size, long *pSync);
1600 OSHMEM_DECLSPEC void pshmem_fcollect32(void *target, const void *source, size_t nlong, int PE_start, int logPE_stride, int PE_size, long *pSync);
1601 OSHMEM_DECLSPEC void pshmem_fcollect64(void *target, const void *source, size_t nlong, int PE_start, int logPE_stride, int PE_size, long *pSync);
1602 OSHMEM_DECLSPEC void pshmem_alltoall32(void *target, const void *source, size_t nelems, int PE_start, int logPE_stride, int PE_size, long *pSync);
1603 OSHMEM_DECLSPEC void pshmem_alltoall64(void *target, const void *source, size_t nelems, int PE_start, int logPE_stride, int PE_size, long *pSync);
1604 OSHMEM_DECLSPEC void pshmem_alltoalls32(void *target, const void *source, ptrdiff_t dst, ptrdiff_t sst, size_t nelems, int PE_start, int logPE_stride, int PE_size, long *pSync);
1605 OSHMEM_DECLSPEC void pshmem_alltoalls64(void *target, const void *source, ptrdiff_t dst, ptrdiff_t sst, size_t nelems, int PE_start, int logPE_stride, int PE_size, long *pSync);
1606 
1607 /*
1608  * Reduction routines
1609  */
1610 OSHMEM_DECLSPEC void pshmem_short_and_to_all(short *target, const short *source, int nreduce, int PE_start, int logPE_stride, int PE_size, short *pWrk, long *pSync);
1611 OSHMEM_DECLSPEC void pshmem_int_and_to_all(int *target, const int *source, int nreduce, int PE_start, int logPE_stride, int PE_size, int *pWrk, long *pSync);
1612 OSHMEM_DECLSPEC void pshmem_long_and_to_all(long *target, const long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long *pWrk, long *pSync);
1613 OSHMEM_DECLSPEC void pshmem_longlong_and_to_all(long long *target, const long long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long long *pWrk, long *pSync);
1614 
1615 OSHMEM_DECLSPEC void pshmem_short_or_to_all(short *target, const short *source, int nreduce, int PE_start, int logPE_stride, int PE_size, short *pWrk, long *pSync);
1616 OSHMEM_DECLSPEC void pshmem_int_or_to_all(int *target, const int *source, int nreduce, int PE_start, int logPE_stride, int PE_size, int *pWrk, long *pSync);
1617 OSHMEM_DECLSPEC void pshmem_long_or_to_all(long *target, const long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long *pWrk, long *pSync);
1618 OSHMEM_DECLSPEC void pshmem_longlong_or_to_all(long long *target, const long long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long long *pWrk, long *pSync);
1619 
1620 OSHMEM_DECLSPEC void pshmem_short_xor_to_all(short *target, const short *source, int nreduce, int PE_start, int logPE_stride, int PE_size, short *pWrk, long *pSync);
1621 OSHMEM_DECLSPEC void pshmem_int_xor_to_all(int *target, const int *source, int nreduce, int PE_start, int logPE_stride, int PE_size, int *pWrk, long *pSync);
1622 OSHMEM_DECLSPEC void pshmem_long_xor_to_all(long *target, const long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long *pWrk, long *pSync);
1623 OSHMEM_DECLSPEC void pshmem_longlong_xor_to_all(long long *target, const long long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long long *pWrk, long *pSync);
1624 
1625 OSHMEM_DECLSPEC void pshmem_short_max_to_all(short *target, const short *source, int nreduce, int PE_start, int logPE_stride, int PE_size, short *pWrk, long *pSync);
1626 OSHMEM_DECLSPEC void pshmem_int_max_to_all(int *target, const int *source, int nreduce, int PE_start, int logPE_stride, int PE_size, int *pWrk, long *pSync);
1627 OSHMEM_DECLSPEC void pshmem_long_max_to_all(long *target, const long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long *pWrk, long *pSync);
1628 OSHMEM_DECLSPEC void pshmem_longlong_max_to_all(long long *target, const long long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long long *pWrk, long *pSync);
1629 OSHMEM_DECLSPEC void pshmem_float_max_to_all(float *target, const float *source, int nreduce, int PE_start, int logPE_stride, int PE_size, float *pWrk, long *pSync);
1630 OSHMEM_DECLSPEC void pshmem_double_max_to_all(double *target, const double *source, int nreduce, int PE_start, int logPE_stride, int PE_size, double *pWrk, long *pSync);
1631 OSHMEM_DECLSPEC void pshmem_longdouble_max_to_all(long double *target, const long double *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long double *pWrk, long *pSync);
1632 
1633 OSHMEM_DECLSPEC void pshmem_short_min_to_all(short *target, const short *source, int nreduce, int PE_start, int logPE_stride, int PE_size, short *pWrk, long *pSync);
1634 OSHMEM_DECLSPEC void pshmem_int_min_to_all(int *target, const int *source, int nreduce, int PE_start, int logPE_stride, int PE_size, int *pWrk, long *pSync);
1635 OSHMEM_DECLSPEC void pshmem_long_min_to_all(long *target, const long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long *pWrk, long *pSync);
1636 OSHMEM_DECLSPEC void pshmem_longlong_min_to_all(long long *target, const long long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long long *pWrk, long *pSync);
1637 OSHMEM_DECLSPEC void pshmem_float_min_to_all(float *target, const float *source, int nreduce, int PE_start, int logPE_stride, int PE_size, float *pWrk, long *pSync);
1638 OSHMEM_DECLSPEC void pshmem_double_min_to_all(double *target, const double *source, int nreduce, int PE_start, int logPE_stride, int PE_size, double *pWrk, long *pSync);
1639 OSHMEM_DECLSPEC void pshmem_longdouble_min_to_all(long double *target, const long double *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long double *pWrk, long *pSync);
1640 
1641 OSHMEM_DECLSPEC void pshmem_short_sum_to_all(short *target, const short *source, int nreduce, int PE_start, int logPE_stride, int PE_size, short *pWrk, long *pSync);
1642 OSHMEM_DECLSPEC void pshmem_int_sum_to_all(int *target, const int *source, int nreduce, int PE_start, int logPE_stride, int PE_size, int *pWrk, long *pSync);
1643 OSHMEM_DECLSPEC void pshmem_long_sum_to_all(long *target, const long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long *pWrk, long *pSync);
1644 OSHMEM_DECLSPEC void pshmem_longlong_sum_to_all(long long *target, const long long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long long *pWrk, long *pSync);
1645 OSHMEM_DECLSPEC void pshmem_float_sum_to_all(float *target, const float *source, int nreduce, int PE_start, int logPE_stride, int PE_size, float *pWrk, long *pSync);
1646 OSHMEM_DECLSPEC void pshmem_double_sum_to_all(double *target, const double *source, int nreduce, int PE_start, int logPE_stride, int PE_size, double *pWrk, long *pSync);
1647 OSHMEM_DECLSPEC void pshmem_longdouble_sum_to_all(long double *target, const long double *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long double *pWrk, long *pSync);
1648 OSHMEM_DECLSPEC void pshmem_complexf_sum_to_all(OSHMEM_COMPLEX_TYPE(float) *target, const OSHMEM_COMPLEX_TYPE(float) *source, int nreduce, int PE_start, int logPE_stride, int PE_size, OSHMEM_COMPLEX_TYPE(float) *pWrk, long *pSync);
1649 OSHMEM_DECLSPEC void pshmem_complexd_sum_to_all(OSHMEM_COMPLEX_TYPE(double) *target, const OSHMEM_COMPLEX_TYPE(double) *source, int nreduce, int PE_start, int logPE_stride, int PE_size, OSHMEM_COMPLEX_TYPE(double) *pWrk, long *pSync);
1650 
1651 OSHMEM_DECLSPEC void pshmem_short_prod_to_all(short *target, const short *source, int nreduce, int PE_start, int logPE_stride, int PE_size, short *pWrk, long *pSync);
1652 OSHMEM_DECLSPEC void pshmem_int_prod_to_all(int *target, const int *source, int nreduce, int PE_start, int logPE_stride, int PE_size, int *pWrk, long *pSync);
1653 OSHMEM_DECLSPEC void pshmem_long_prod_to_all(long *target, const long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long *pWrk, long *pSync);
1654 OSHMEM_DECLSPEC void pshmem_longlong_prod_to_all(long long *target, const long long *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long long *pWrk, long *pSync);
1655 OSHMEM_DECLSPEC void pshmem_float_prod_to_all(float *target, const float *source, int nreduce, int PE_start, int logPE_stride, int PE_size, float *pWrk, long *pSync);
1656 OSHMEM_DECLSPEC void pshmem_double_prod_to_all(double *target, const double *source, int nreduce, int PE_start, int logPE_stride, int PE_size, double *pWrk, long *pSync);
1657 OSHMEM_DECLSPEC void pshmem_longdouble_prod_to_all(long double *target, const long double *source, int nreduce, int PE_start, int logPE_stride, int PE_size, long double *pWrk, long *pSync);
1658 OSHMEM_DECLSPEC void pshmem_complexf_prod_to_all(OSHMEM_COMPLEX_TYPE(float) *target, const OSHMEM_COMPLEX_TYPE(float) *source, int nreduce, int PE_start, int logPE_stride, int PE_size, OSHMEM_COMPLEX_TYPE(float) *pWrk, long *pSync);
1659 OSHMEM_DECLSPEC void pshmem_complexd_prod_to_all(OSHMEM_COMPLEX_TYPE(double) *target, const OSHMEM_COMPLEX_TYPE(double) *source, int nreduce, int PE_start, int logPE_stride, int PE_size, OSHMEM_COMPLEX_TYPE(double) *pWrk, long *pSync);
1660 
1661 /*
1662  * Platform specific cache management routines
1663  */
1664 OSHMEM_DECLSPEC void pshmem_udcflush(void);
1665 OSHMEM_DECLSPEC void pshmem_udcflush_line(void* target);
1666 OSHMEM_DECLSPEC void pshmem_set_cache_inv(void);
1667 OSHMEM_DECLSPEC void pshmem_set_cache_line_inv(void* target);
1668 OSHMEM_DECLSPEC void pshmem_clear_cache_inv(void);
1669 OSHMEM_DECLSPEC void pshmem_clear_cache_line_inv(void* target);
1670 
1671 #if defined(c_plusplus) || defined(__cplusplus)
1672 }
1673 #endif
1674 
1675 
1676 #endif /* PSHMEM_SHMEM_H */

/* [<][>][^][v][top][bottom][index][help] */