|
1 | 1 | /*
|
2 | 2 | * Copyright (c) 2013 Mellanox Technologies, Inc.
|
3 | 3 | * All rights reserved.
|
| 4 | + * Copyright (c) 2017 ARM, Inc. All rights reserved. |
4 | 5 | * $COPYRIGHT$
|
5 | 6 | *
|
6 | 7 | * Additional copyrights may follow
|
|
20 | 21 | #include "oshmem/mca/spml/yoda/spml_yoda_getreq.h"
|
21 | 22 | #include "opal/mca/btl/btl.h"
|
22 | 23 |
|
23 |
| -#define SPML_BASE_DO_CMP(res, addr, op, val) \ |
24 |
| - switch((op)) { \ |
| 24 | +#define SPML_BASE_DO_CMP(_res, _addr, _op, _val) \ |
| 25 | + switch((_op)) { \ |
25 | 26 | case SHMEM_CMP_EQ: \
|
26 |
| - res = *(addr) == (val) ? 1 : 0; \ |
| 27 | + _res = *(_addr) == (_val) ? 1 : 0; \ |
27 | 28 | break; \
|
28 | 29 | case SHMEM_CMP_NE: \
|
29 |
| - res = *(addr) != (val) ? 1 : 0; \ |
| 30 | + _res = *(_addr) != (_val) ? 1 : 0; \ |
30 | 31 | break; \
|
31 | 32 | case SHMEM_CMP_GT: \
|
32 |
| - res = *(addr) > (val) ? 1 : 0; \ |
| 33 | + _res = *(_addr) > (_val) ? 1 : 0; \ |
33 | 34 | break; \
|
34 | 35 | case SHMEM_CMP_LE: \
|
35 |
| - res = *(addr) <= (val) ? 1 : 0; \ |
| 36 | + _res = *(_addr) <= (_val) ? 1 : 0; \ |
36 | 37 | break; \
|
37 | 38 | case SHMEM_CMP_LT: \
|
38 |
| - res = *(addr) < (val) ? 1: 0; \ |
| 39 | + _res = *(_addr) < (_val) ? 1 : 0; \ |
39 | 40 | break; \
|
40 | 41 | case SHMEM_CMP_GE: \
|
41 |
| - res = *(addr) >= (val) ? 1 : 0; \ |
| 42 | + _res = *(_addr) >= (_val) ? 1 : 0; \ |
42 | 43 | break; \
|
43 | 44 | }
|
44 | 45 |
|
45 |
| -#define SPML_BASE_DO_WAIT(cond, val, addr, op) \ |
46 |
| - do { \ |
47 |
| - SPML_BASE_DO_CMP(cond, val,addr,op); \ |
48 |
| - opal_progress(); \ |
49 |
| - } while (cond == 0) ; |
| 46 | +#define SPML_BASE_DO_WAIT(_res, _addr, _op, _val) \ |
| 47 | + do { \ |
| 48 | + SPML_BASE_DO_CMP(_res, _addr, _op, _val); \ |
| 49 | + if (_res == 0) { \ |
| 50 | + opal_progress(); \ |
| 51 | + } \ |
| 52 | + } while (_res == 0); |
50 | 53 |
|
51 | 54 | /**
|
52 | 55 | * Wait for data delivery.
|
53 | 56 | * Pool on a variable given in addr until it is not equal to value.
|
54 | 57 | */
|
55 | 58 | int mca_spml_base_wait(void* addr, int cmp, void* value, int datatype)
|
56 | 59 | {
|
57 |
| - int *int_addr, int_value; |
58 |
| - long *long_addr, long_value; |
59 |
| - short *short_addr, short_value; |
60 |
| - long long *longlong_addr, longlong_value; |
61 |
| - int32_t *int32_addr, int32_value; |
62 |
| - int64_t *int64_addr, int64_value; |
| 60 | + volatile int *int_addr; |
| 61 | + volatile long *long_addr; |
| 62 | + volatile short *short_addr; |
| 63 | + volatile long long *longlong_addr; |
| 64 | + volatile int32_t *int32_addr; |
| 65 | + volatile int64_t *int64_addr; |
| 66 | + |
| 67 | + int int_value; |
| 68 | + long long_value; |
| 69 | + short short_value; |
| 70 | + long long longlong_value; |
| 71 | + int32_t int32_value; |
| 72 | + int64_t int64_value; |
| 73 | + |
63 | 74 | ompi_fortran_integer_t *fint_addr, fint_value;
|
64 | 75 | ompi_fortran_integer4_t *fint4_addr, fint4_value;
|
65 | 76 | ompi_fortran_integer8_t *fint8_addr, fint8_value;
|
| 77 | + |
66 | 78 | int res = 0;
|
67 | 79 |
|
68 | 80 | switch (datatype) {
|
|
0 commit comments