Skip to content

Commit ade062a

Browse files
authored
Merge pull request #10920 from gleon99/gleon99/shmem-comparisons
oshmem: Fix unsigned type comparisons
2 parents dae7c52 + d081fc1 commit ade062a

File tree

2 files changed

+68
-178
lines changed

2 files changed

+68
-178
lines changed

oshmem/mca/spml/base/spml_base.c

Lines changed: 52 additions & 162 deletions
Original file line numberDiff line numberDiff line change
@@ -48,184 +48,74 @@
4848
} \
4949
} while (_res == 0);
5050

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+
5160
/**
5261
* Check on a variable given in addr to see it is not equal to value.
5362
*/
5463
int mca_spml_base_test(void* addr, int cmp, void* value, int datatype, int *out_value)
5564
{
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-
7465
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);
13883
}
13984

14085
return OSHMEM_SUCCESS;
14186
}
14287

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+
14397
int mca_spml_base_wait(void* addr, int cmp, void* value, int datatype)
14498
{
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-
16399
int res = 0;
164100

165101
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);
229119
}
230120

231121
return OSHMEM_SUCCESS;

oshmem/shmem/c/shmem_wait.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -116,16 +116,16 @@ SHMEM_TYPE_WAIT_UNTIL(_short, volatile short, SHMEM_SHORT, shmem)
116116
SHMEM_TYPE_WAIT_UNTIL(_int, volatile int, SHMEM_INT, shmem)
117117
SHMEM_TYPE_WAIT_UNTIL(_long, volatile long, SHMEM_LONG, shmem)
118118
SHMEM_TYPE_WAIT_UNTIL(_longlong, volatile long long, SHMEM_LLONG, shmem)
119-
SHMEM_TYPE_WAIT_UNTIL(_ushort, volatile unsigned short, SHMEM_SHORT, shmem)
120-
SHMEM_TYPE_WAIT_UNTIL(_uint, volatile unsigned int, SHMEM_INT, shmem)
121-
SHMEM_TYPE_WAIT_UNTIL(_ulong, volatile unsigned long, SHMEM_LONG, shmem)
122-
SHMEM_TYPE_WAIT_UNTIL(_ulonglong, volatile unsigned long long, SHMEM_LLONG, shmem)
119+
SHMEM_TYPE_WAIT_UNTIL(_ushort, volatile unsigned short, SHMEM_USHORT, shmem)
120+
SHMEM_TYPE_WAIT_UNTIL(_uint, volatile unsigned int, SHMEM_UINT, shmem)
121+
SHMEM_TYPE_WAIT_UNTIL(_ulong, volatile unsigned long, SHMEM_ULONG, shmem)
122+
SHMEM_TYPE_WAIT_UNTIL(_ulonglong, volatile unsigned long long, SHMEM_ULLONG, shmem)
123123
SHMEM_TYPE_WAIT_UNTIL(_int32, volatile int32_t, SHMEM_INT32_T, shmem)
124124
SHMEM_TYPE_WAIT_UNTIL(_int64, volatile int64_t, SHMEM_INT64_T, shmem)
125-
SHMEM_TYPE_WAIT_UNTIL(_uint32, volatile uint32_t, SHMEM_INT32_T, shmem)
126-
SHMEM_TYPE_WAIT_UNTIL(_uint64, volatile uint64_t, SHMEM_INT64_T, shmem)
127-
SHMEM_TYPE_WAIT_UNTIL(_size, volatile size_t, SHMEM_LLONG, shmem)
128-
SHMEM_TYPE_WAIT_UNTIL(_ptrdiff, volatile ptrdiff_t, SHMEM_LLONG, shmem)
125+
SHMEM_TYPE_WAIT_UNTIL(_uint32, volatile uint32_t, SHMEM_UINT32_T, shmem)
126+
SHMEM_TYPE_WAIT_UNTIL(_uint64, volatile uint64_t, SHMEM_UINT64_T, shmem)
127+
SHMEM_TYPE_WAIT_UNTIL(_size, volatile size_t, SHMEM_SIZE_T, shmem)
128+
SHMEM_TYPE_WAIT_UNTIL(_ptrdiff, volatile ptrdiff_t, SHMEM_PTRDIFF_T, shmem)
129129

130130
SHMEM_TYPE_WAIT_UNTIL(_int32, int32_t, SHMEM_INT32_T, shmemx)
131131
SHMEM_TYPE_WAIT_UNTIL(_int64, int64_t, SHMEM_INT64_T, shmemx)
@@ -152,13 +152,13 @@ SHMEM_TYPE_TEST(_short, volatile short, SHMEM_SHORT, shmem)
152152
SHMEM_TYPE_TEST(_int, volatile int, SHMEM_INT, shmem)
153153
SHMEM_TYPE_TEST(_long, volatile long, SHMEM_LONG, shmem)
154154
SHMEM_TYPE_TEST(_longlong, volatile long long, SHMEM_LLONG, shmem)
155-
SHMEM_TYPE_TEST(_ushort, volatile unsigned short, SHMEM_SHORT, shmem)
156-
SHMEM_TYPE_TEST(_uint, volatile unsigned int, SHMEM_INT, shmem)
157-
SHMEM_TYPE_TEST(_ulong, volatile unsigned long, SHMEM_LONG, shmem)
158-
SHMEM_TYPE_TEST(_ulonglong, volatile unsigned long long, SHMEM_LLONG, shmem)
155+
SHMEM_TYPE_TEST(_ushort, volatile unsigned short, SHMEM_USHORT, shmem)
156+
SHMEM_TYPE_TEST(_uint, volatile unsigned int, SHMEM_UINT, shmem)
157+
SHMEM_TYPE_TEST(_ulong, volatile unsigned long, SHMEM_ULONG, shmem)
158+
SHMEM_TYPE_TEST(_ulonglong, volatile unsigned long long, SHMEM_ULLONG, shmem)
159159
SHMEM_TYPE_TEST(_int32, volatile int32_t, SHMEM_INT32_T, shmem)
160160
SHMEM_TYPE_TEST(_int64, volatile int64_t, SHMEM_INT64_T, shmem)
161-
SHMEM_TYPE_TEST(_uint32, volatile uint32_t, SHMEM_INT32_T, shmem)
162-
SHMEM_TYPE_TEST(_uint64, volatile uint64_t, SHMEM_INT64_T, shmem)
163-
SHMEM_TYPE_TEST(_size, volatile size_t, SHMEM_LLONG, shmem)
164-
SHMEM_TYPE_TEST(_ptrdiff, volatile ptrdiff_t, SHMEM_LLONG, shmem)
161+
SHMEM_TYPE_TEST(_uint32, volatile uint32_t, SHMEM_UINT32_T, shmem)
162+
SHMEM_TYPE_TEST(_uint64, volatile uint64_t, SHMEM_UINT64_T, shmem)
163+
SHMEM_TYPE_TEST(_size, volatile size_t, SHMEM_SIZE_T, shmem)
164+
SHMEM_TYPE_TEST(_ptrdiff, volatile ptrdiff_t, SHMEM_PTRDIFF_T, shmem)

0 commit comments

Comments
 (0)