|
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