|
48 | 48 | } \
|
49 | 49 | } while (_res == 0);
|
50 | 50 |
|
| 51 | +#define SPML_BASE_TEST_CASE(_type, _shmem_type, _addr, _value, _cmp, _out_value) \ |
| 52 | + case _shmem_type: \ |
| 53 | + { \ |
| 54 | + _type typed_value = *(const _type*)_value; \ |
| 55 | + const _type *typed_addr = (const _type*)_addr; \ |
| 56 | + SPML_BASE_DO_CMP((*_out_value), typed_addr , _cmp, typed_value); \ |
| 57 | + } \ |
| 58 | + break; |
| 59 | + |
51 | 60 | /**
|
52 | 61 | * Check on a variable given in addr to see it is not equal to value.
|
53 | 62 | */
|
54 | 63 | int mca_spml_base_test(void* addr, int cmp, void* value, int datatype, int *out_value)
|
55 | 64 | {
|
56 |
| - volatile int *int_addr; |
57 |
| - volatile long *long_addr; |
58 |
| - volatile short *short_addr; |
59 |
| - volatile long long *longlong_addr; |
60 |
| - volatile int32_t *int32_addr; |
61 |
| - volatile int64_t *int64_addr; |
62 |
| - |
63 |
| - int int_value; |
64 |
| - long long_value; |
65 |
| - short short_value; |
66 |
| - long long longlong_value; |
67 |
| - int32_t int32_value; |
68 |
| - int64_t int64_value; |
69 |
| - |
70 |
| - ompi_fortran_integer_t *fint_addr, fint_value; |
71 |
| - ompi_fortran_integer4_t *fint4_addr, fint4_value; |
72 |
| - ompi_fortran_integer8_t *fint8_addr, fint8_value; |
73 |
| - |
74 | 65 | switch (datatype) {
|
75 |
| - |
76 |
| - /* Int */ |
77 |
| - case SHMEM_INT: |
78 |
| - int_value = *(int*) value; |
79 |
| - int_addr = (int*) addr; |
80 |
| - SPML_BASE_DO_CMP((*out_value), int_addr, cmp, int_value); |
81 |
| - break; |
82 |
| - |
83 |
| - /* Short */ |
84 |
| - case SHMEM_SHORT: |
85 |
| - short_value = *(short*) value; |
86 |
| - short_addr = (short*) addr; |
87 |
| - SPML_BASE_DO_CMP((*out_value), short_addr, cmp, short_value); |
88 |
| - break; |
89 |
| - |
90 |
| - /* Long */ |
91 |
| - case SHMEM_LONG: |
92 |
| - long_value = *(long*) value; |
93 |
| - long_addr = (long*) addr; |
94 |
| - SPML_BASE_DO_CMP((*out_value), long_addr, cmp, long_value); |
95 |
| - break; |
96 |
| - |
97 |
| - /* Long-Long */ |
98 |
| - case SHMEM_LLONG: |
99 |
| - longlong_value = *(long long*) value; |
100 |
| - longlong_addr = (long long*) addr; |
101 |
| - SPML_BASE_DO_CMP((*out_value), longlong_addr, cmp, longlong_value); |
102 |
| - break; |
103 |
| - |
104 |
| - /* Int32_t */ |
105 |
| - case SHMEM_INT32_T: |
106 |
| - int32_value = *(int32_t*) value; |
107 |
| - int32_addr = (int32_t*) addr; |
108 |
| - SPML_BASE_DO_CMP((*out_value), int32_addr, cmp, int32_value); |
109 |
| - break; |
110 |
| - |
111 |
| - /* Int64_t */ |
112 |
| - case SHMEM_INT64_T: |
113 |
| - int64_value = *(int64_t*) value; |
114 |
| - int64_addr = (int64_t*) addr; |
115 |
| - SPML_BASE_DO_CMP((*out_value), int64_addr, cmp, int64_value); |
116 |
| - break; |
117 |
| - |
118 |
| - /*C equivalent of Fortran integer type */ |
119 |
| - case SHMEM_FINT: |
120 |
| - fint_value = *(ompi_fortran_integer_t *) value; |
121 |
| - fint_addr = (ompi_fortran_integer_t *) addr; |
122 |
| - SPML_BASE_DO_CMP((*out_value), fint_addr, cmp, fint_value); |
123 |
| - break; |
124 |
| - |
125 |
| - /*C equivalent of Fortran int4 type*/ |
126 |
| - case SHMEM_FINT4: |
127 |
| - fint4_value = *(ompi_fortran_integer4_t *) value; |
128 |
| - fint4_addr = (ompi_fortran_integer4_t *) addr; |
129 |
| - SPML_BASE_DO_CMP((*out_value), fint4_addr, cmp, fint4_value); |
130 |
| - break; |
131 |
| - |
132 |
| - /*C equivalent of Fortran int8 type*/ |
133 |
| - case SHMEM_FINT8: |
134 |
| - fint8_value = *(ompi_fortran_integer8_t *) value; |
135 |
| - fint8_addr = (ompi_fortran_integer8_t *) addr; |
136 |
| - SPML_BASE_DO_CMP((*out_value), fint8_addr, cmp, fint8_value); |
137 |
| - break; |
| 66 | + SPML_BASE_TEST_CASE(int, SHMEM_INT, addr, value, cmp, out_value); |
| 67 | + SPML_BASE_TEST_CASE(unsigned int, SHMEM_UINT, addr, value, cmp, out_value); |
| 68 | + SPML_BASE_TEST_CASE(long, SHMEM_LONG, addr, value, cmp, out_value); |
| 69 | + SPML_BASE_TEST_CASE(unsigned long, SHMEM_ULONG, addr, value, cmp, out_value); |
| 70 | + SPML_BASE_TEST_CASE(short, SHMEM_SHORT, addr, value, cmp, out_value); |
| 71 | + SPML_BASE_TEST_CASE(unsigned short, SHMEM_USHORT, addr, value, cmp, out_value); |
| 72 | + SPML_BASE_TEST_CASE(long long, SHMEM_LLONG, addr, value, cmp, out_value); |
| 73 | + SPML_BASE_TEST_CASE(unsigned long long, SHMEM_ULLONG, addr, value, cmp, out_value); |
| 74 | + SPML_BASE_TEST_CASE(int32_t, SHMEM_INT32_T, addr, value, cmp, out_value); |
| 75 | + SPML_BASE_TEST_CASE(uint32_t, SHMEM_UINT32_T, addr, value, cmp, out_value); |
| 76 | + SPML_BASE_TEST_CASE(int64_t, SHMEM_INT64_T, addr, value, cmp, out_value); |
| 77 | + SPML_BASE_TEST_CASE(uint64_t, SHMEM_UINT64_T, addr, value, cmp, out_value); |
| 78 | + SPML_BASE_TEST_CASE(size_t, SHMEM_SIZE_T, addr, value, cmp, out_value); |
| 79 | + SPML_BASE_TEST_CASE(ptrdiff_t, SHMEM_PTRDIFF_T, addr, value, cmp, out_value); |
| 80 | + SPML_BASE_TEST_CASE(ompi_fortran_integer_t, SHMEM_FINT, addr, value, cmp, out_value); |
| 81 | + SPML_BASE_TEST_CASE(ompi_fortran_integer4_t, SHMEM_FINT4, addr, value, cmp, out_value); |
| 82 | + SPML_BASE_TEST_CASE(ompi_fortran_integer8_t, SHMEM_FINT8, addr, value, cmp, out_value); |
138 | 83 | }
|
139 | 84 |
|
140 | 85 | return OSHMEM_SUCCESS;
|
141 | 86 | }
|
142 | 87 |
|
| 88 | +#define SPML_BASE_WAIT_CASE(_type, _shmem_type, _addr, _value, _cmp, _res) \ |
| 89 | + case _shmem_type: \ |
| 90 | + { \ |
| 91 | + _type typed_value = *(const _type*)_value; \ |
| 92 | + const _type *typed_addr = (const _type*)_addr; \ |
| 93 | + SPML_BASE_DO_WAIT(_res, typed_addr, _cmp, typed_value); \ |
| 94 | + } \ |
| 95 | + break; |
| 96 | + |
143 | 97 | int mca_spml_base_wait(void* addr, int cmp, void* value, int datatype)
|
144 | 98 | {
|
145 |
| - volatile int *int_addr; |
146 |
| - volatile long *long_addr; |
147 |
| - volatile short *short_addr; |
148 |
| - volatile long long *longlong_addr; |
149 |
| - volatile int32_t *int32_addr; |
150 |
| - volatile int64_t *int64_addr; |
151 |
| - |
152 |
| - int int_value; |
153 |
| - long long_value; |
154 |
| - short short_value; |
155 |
| - long long longlong_value; |
156 |
| - int32_t int32_value; |
157 |
| - int64_t int64_value; |
158 |
| - |
159 |
| - ompi_fortran_integer_t *fint_addr, fint_value; |
160 |
| - ompi_fortran_integer4_t *fint4_addr, fint4_value; |
161 |
| - ompi_fortran_integer8_t *fint8_addr, fint8_value; |
162 |
| - |
163 | 99 | int res = 0;
|
164 | 100 |
|
165 | 101 | switch (datatype) {
|
166 |
| - |
167 |
| - /* Int */ |
168 |
| - case SHMEM_INT: |
169 |
| - int_value = *(int*) value; |
170 |
| - int_addr = (int*) addr; |
171 |
| - SPML_BASE_DO_WAIT(res, int_addr, cmp, int_value); |
172 |
| - break; |
173 |
| - |
174 |
| - /* Short */ |
175 |
| - case SHMEM_SHORT: |
176 |
| - short_value = *(short*) value; |
177 |
| - short_addr = (short*) addr; |
178 |
| - SPML_BASE_DO_WAIT(res, short_addr, cmp, short_value); |
179 |
| - break; |
180 |
| - |
181 |
| - /* Long */ |
182 |
| - case SHMEM_LONG: |
183 |
| - long_value = *(long*) value; |
184 |
| - long_addr = (long*) addr; |
185 |
| - SPML_BASE_DO_WAIT(res, long_addr, cmp, long_value); |
186 |
| - break; |
187 |
| - |
188 |
| - /* Long-Long */ |
189 |
| - case SHMEM_LLONG: |
190 |
| - longlong_value = *(long long*) value; |
191 |
| - longlong_addr = (long long*) addr; |
192 |
| - SPML_BASE_DO_WAIT(res, longlong_addr, cmp, longlong_value); |
193 |
| - break; |
194 |
| - |
195 |
| - /* Int32_t */ |
196 |
| - case SHMEM_INT32_T: |
197 |
| - int32_value = *(int32_t*) value; |
198 |
| - int32_addr = (int32_t*) addr; |
199 |
| - SPML_BASE_DO_WAIT(res, int32_addr, cmp, int32_value); |
200 |
| - break; |
201 |
| - |
202 |
| - /* Int64_t */ |
203 |
| - case SHMEM_INT64_T: |
204 |
| - int64_value = *(int64_t*) value; |
205 |
| - int64_addr = (int64_t*) addr; |
206 |
| - SPML_BASE_DO_WAIT(res, int64_addr, cmp, int64_value); |
207 |
| - break; |
208 |
| - |
209 |
| - /*C equivalent of Fortran integer type */ |
210 |
| - case SHMEM_FINT: |
211 |
| - fint_value = *(ompi_fortran_integer_t *) value; |
212 |
| - fint_addr = (ompi_fortran_integer_t *) addr; |
213 |
| - SPML_BASE_DO_WAIT(res, fint_addr, cmp, fint_value); |
214 |
| - break; |
215 |
| - |
216 |
| - /*C equivalent of Fortran int4 type*/ |
217 |
| - case SHMEM_FINT4: |
218 |
| - fint4_value = *(ompi_fortran_integer4_t *) value; |
219 |
| - fint4_addr = (ompi_fortran_integer4_t *) addr; |
220 |
| - SPML_BASE_DO_WAIT(res, fint4_addr, cmp, fint4_value); |
221 |
| - break; |
222 |
| - |
223 |
| - /*C equivalent of Fortran int8 type*/ |
224 |
| - case SHMEM_FINT8: |
225 |
| - fint8_value = *(ompi_fortran_integer8_t *) value; |
226 |
| - fint8_addr = (ompi_fortran_integer8_t *) addr; |
227 |
| - SPML_BASE_DO_WAIT(res, fint8_addr, cmp, fint8_value); |
228 |
| - break; |
| 102 | + SPML_BASE_WAIT_CASE(int, SHMEM_INT, addr, value, cmp, res); |
| 103 | + SPML_BASE_WAIT_CASE(unsigned int, SHMEM_UINT, addr, value, cmp, res); |
| 104 | + SPML_BASE_WAIT_CASE(long, SHMEM_LONG, addr, value, cmp, res); |
| 105 | + SPML_BASE_WAIT_CASE(unsigned long, SHMEM_ULONG, addr, value, cmp, res); |
| 106 | + SPML_BASE_WAIT_CASE(short, SHMEM_SHORT, addr, value, cmp, res); |
| 107 | + SPML_BASE_WAIT_CASE(unsigned short, SHMEM_USHORT, addr, value, cmp, res); |
| 108 | + SPML_BASE_WAIT_CASE(long long, SHMEM_LLONG, addr, value, cmp, res); |
| 109 | + SPML_BASE_WAIT_CASE(unsigned long long, SHMEM_ULLONG, addr, value, cmp, res); |
| 110 | + SPML_BASE_WAIT_CASE(int32_t, SHMEM_INT32_T, addr, value, cmp, res); |
| 111 | + SPML_BASE_WAIT_CASE(uint32_t, SHMEM_UINT32_T, addr, value, cmp, res); |
| 112 | + SPML_BASE_WAIT_CASE(int64_t, SHMEM_INT64_T, addr, value, cmp, res); |
| 113 | + SPML_BASE_WAIT_CASE(uint64_t, SHMEM_UINT64_T, addr, value, cmp, res); |
| 114 | + SPML_BASE_WAIT_CASE(size_t, SHMEM_SIZE_T, addr, value, cmp, res); |
| 115 | + SPML_BASE_WAIT_CASE(ptrdiff_t, SHMEM_PTRDIFF_T, addr, value, cmp, res); |
| 116 | + SPML_BASE_WAIT_CASE(ompi_fortran_integer_t, SHMEM_FINT, addr, value, cmp, res); |
| 117 | + SPML_BASE_WAIT_CASE(ompi_fortran_integer4_t, SHMEM_FINT4, addr, value, cmp, res); |
| 118 | + SPML_BASE_WAIT_CASE(ompi_fortran_integer8_t, SHMEM_FINT8, addr, value, cmp, res); |
229 | 119 | }
|
230 | 120 |
|
231 | 121 | return OSHMEM_SUCCESS;
|
|
0 commit comments