23 #ifndef OMPI_DATATYPE_INTERNAL_H
24 #define OMPI_DATATYPE_INTERNAL_H
26 #include "opal/datatype/opal_datatype_internal.h"
27 #include "ompi/class/ompi_free_list.h"
34 #define OMPI_DATATYPE_MPI_EMPTY 0x00
35 #define OMPI_DATATYPE_MPI_INT8_T 0x01
36 #define OMPI_DATATYPE_MPI_UINT8_T 0x02
37 #define OMPI_DATATYPE_MPI_INT16_T 0x03
38 #define OMPI_DATATYPE_MPI_UINT16_T 0x04
39 #define OMPI_DATATYPE_MPI_INT32_T 0x05
40 #define OMPI_DATATYPE_MPI_UINT32_T 0x06
41 #define OMPI_DATATYPE_MPI_INT64_T 0x07
42 #define OMPI_DATATYPE_MPI_UINT64_T 0x08
43 #define OMPI_DATATYPE_MPI_FLOAT 0x09
44 #define OMPI_DATATYPE_MPI_DOUBLE 0x0A
45 #define OMPI_DATATYPE_MPI_LONG_DOUBLE 0x0B
46 #define OMPI_DATATYPE_MPI_COMPLEX8 0x0C
47 #define OMPI_DATATYPE_MPI_COMPLEX16 0x0D
48 #define OMPI_DATATYPE_MPI_COMPLEX32 0x0E
49 #define OMPI_DATATYPE_MPI_WCHAR 0x0F
50 #define OMPI_DATATYPE_MPI_PACKED 0x10
52 #define OMPI_DATATYPE_MPI_BOOL 0x11
54 #define OMPI_DATATYPE_MPI_LOGICAL 0x12
55 #define OMPI_DATATYPE_MPI_CHARACTER 0x13
56 #define OMPI_DATATYPE_MPI_INTEGER 0x14
57 #define OMPI_DATATYPE_MPI_REAL 0x15
58 #define OMPI_DATATYPE_MPI_DOUBLE_PRECISION 0x16
63 #define OMPI_DATATYPE_MPI_COMPLEX 0x17
64 #define OMPI_DATATYPE_MPI_DOUBLE_COMPLEX 0x18
65 #define OMPI_DATATYPE_MPI_LONG_DOUBLE_COMPLEX 0x19
66 #define OMPI_DATATYPE_MPI_2INT 0x1A
67 #define OMPI_DATATYPE_MPI_2INTEGER 0x1B
68 #define OMPI_DATATYPE_MPI_2REAL 0x1C
69 #define OMPI_DATATYPE_MPI_2DBLPREC 0x1D
70 #define OMPI_DATATYPE_MPI_2COMPLEX 0x1E
71 #define OMPI_DATATYPE_MPI_2DOUBLE_COMPLEX 0x1F
75 #define OMPI_DATATYPE_MPI_FLOAT_INT 0x20
76 #define OMPI_DATATYPE_MPI_DOUBLE_INT 0x21
77 #define OMPI_DATATYPE_MPI_LONG_DOUBLE_INT 0x22
78 #define OMPI_DATATYPE_MPI_LONG_INT 0x23
79 #define OMPI_DATATYPE_MPI_SHORT_INT 0x24
83 #define OMPI_DATATYPE_MPI_AINT 0x25
84 #define OMPI_DATATYPE_MPI_OFFSET 0x26
85 #define OMPI_DATATYPE_MPI_C_BOOL 0x27
86 #define OMPI_DATATYPE_MPI_C_COMPLEX 0x28
87 #define OMPI_DATATYPE_MPI_C_FLOAT_COMPLEX 0x29
88 #define OMPI_DATATYPE_MPI_C_DOUBLE_COMPLEX 0x2A
89 #define OMPI_DATATYPE_MPI_C_LONG_DOUBLE_COMPLEX 0x2B
91 #define OMPI_DATATYPE_MPI_LB 0x2C
92 #define OMPI_DATATYPE_MPI_UB 0x2D
94 #define OMPI_DATATYPE_MPI_UNAVAILABLE 0x2E
96 #define OMPI_DATATYPE_MPI_MAX_PREDEFINED (OMPI_DATATYPE_MPI_UNAVAILABLE+1)
104 #define OMPI_DATATYPE_MPI_CHAR OMPI_DATATYPE_MPI_INT8_T
105 #define OMPI_DATATYPE_MPI_SIGNED_CHAR OMPI_DATATYPE_MPI_INT8_T
106 #define OMPI_DATATYPE_MPI_UNSIGNED_CHAR OMPI_DATATYPE_MPI_UINT8_T
107 #define OMPI_DATATYPE_MPI_BYTE OMPI_DATATYPE_MPI_UINT8_T
108 #elif SIZEOF_CHAR == 2
109 #define OMPI_DATATYPE_MPI_CHAR OMPI_DATATYPE_MPI_INT16_T
110 #define OMPI_DATATYPE_MPI_SIGNED_CHAR OMPI_DATATYPE_MPI_INT16_T
111 #define OMPI_DATATYPE_MPI_UNSIGNED_CHAR OMPI_DATATYPE_MPI_UINT16_T
112 #define OMPI_DATATYPE_MPI_BYTE OMPI_DATATYPE_MPI_UINT16_T
113 #elif SIZEOF_CHAR == 4
114 #define OMPI_DATATYPE_MPI_CHAR OMPI_DATATYPE_MPI_INT32_T
115 #define OMPI_DATATYPE_MPI_SIGNED_CHAR OMPI_DATATYPE_MPI_INT32_T
116 #define OMPI_DATATYPE_MPI_UNSIGNED_CHAR OMPI_DATATYPE_MPI_UINT32_T
117 #define OMPI_DATATYPE_MPI_BYTE OMPI_DATATYPE_MPI_UINT32_T
118 #elif SIZEOF_CHAR == 8
119 #define OMPI_DATATYPE_MPI_CHAR OMPI_DATATYPE_MPI_INT64_T
120 #define OMPI_DATATYPE_MPI_SIGNED_CHAR OMPI_DATATYPE_MPI_INT64_T
121 #define OMPI_DATATYPE_MPI_UNSIGNED_CHAR OMPI_DATATYPE_MPI_UINT64_T
122 #define OMPI_DATATYPE_MPI_BYTE OMPI_DATATYPE_MPI_UINT64_T
125 #if SIZEOF_SHORT == 1
126 #define OMPI_DATATYPE_MPI_SHORT OMPI_DATATYPE_MPI_INT8_T
127 #define OMPI_DATATYPE_MPI_UNSIGNED_SHORT OMPI_DATATYPE_MPI_UINT8_T
128 #elif SIZEOF_SHORT == 2
129 #define OMPI_DATATYPE_MPI_SHORT OMPI_DATATYPE_MPI_INT16_T
130 #define OMPI_DATATYPE_MPI_UNSIGNED_SHORT OMPI_DATATYPE_MPI_UINT16_T
131 #elif SIZEOF_SHORT == 4
132 #define OMPI_DATATYPE_MPI_SHORT OMPI_DATATYPE_MPI_INT32_T
133 #define OMPI_DATATYPE_MPI_UNSIGNED_SHORT OMPI_DATATYPE_MPI_UINT32_T
134 #elif SIZEOF_SHORT == 8
135 #define OMPI_DATATYPE_MPI_SHORT OMPI_DATATYPE_MPI_INT64_T
136 #define OMPI_DATATYPE_MPI_UNSIGNED_SHORT OMPI_DATATYPE_MPI_UINT64_T
140 #define OMPI_DATATYPE_MPI_INT OMPI_DATATYPE_MPI_INT8_T
141 #define OMPI_DATATYPE_MPI_UNSIGNED_INT OMPI_DATATYPE_MPI_UINT8_T
142 #elif SIZEOF_INT == 2
143 #define OMPI_DATATYPE_MPI_INT OMPI_DATATYPE_MPI_INT16_T
144 #define OMPI_DATATYPE_MPI_UNSIGNED_INT OMPI_DATATYPE_MPI_UINT16_T
145 #elif SIZEOF_INT == 4
146 #define OMPI_DATATYPE_MPI_INT OMPI_DATATYPE_MPI_INT32_T
147 #define OMPI_DATATYPE_MPI_UNSIGNED_INT OMPI_DATATYPE_MPI_UINT32_T
148 #elif SIZEOF_INT == 8
149 #define OMPI_DATATYPE_MPI_INT OMPI_DATATYPE_MPI_INT64_T
150 #define OMPI_DATATYPE_MPI_UNSIGNED_INT OMPI_DATATYPE_MPI_UINT64_T
154 #define OMPI_DATATYPE_MPI_LONG OMPI_DATATYPE_MPI_INT8_T
155 #define OMPI_DATATYPE_MPI_UNSIGNED_LONG OMPI_DATATYPE_MPI_UINT8_T
156 #elif SIZEOF_LONG == 2
157 #define OMPI_DATATYPE_MPI_LONG OMPI_DATATYPE_MPI_INT16_T
158 #define OMPI_DATATYPE_MPI_UNSIGNED_LONG OMPI_DATATYPE_MPI_UINT16_T
159 #elif SIZEOF_LONG == 4
160 #define OMPI_DATATYPE_MPI_LONG OMPI_DATATYPE_MPI_INT32_T
161 #define OMPI_DATATYPE_MPI_UNSIGNED_LONG OMPI_DATATYPE_MPI_UINT32_T
162 #elif SIZEOF_LONG == 8
163 #define OMPI_DATATYPE_MPI_LONG OMPI_DATATYPE_MPI_INT64_T
164 #define OMPI_DATATYPE_MPI_UNSIGNED_LONG OMPI_DATATYPE_MPI_UINT64_T
167 #if SIZEOF_LONG_LONG == 1
168 #define OMPI_DATATYPE_MPI_LONG_LONG OMPI_DATATYPE_MPI_INT8_T
169 #define OMPI_DATATYPE_MPI_UNSIGNED_LONG_LONG OMPI_DATATYPE_MPI_UINT8_T
170 #elif SIZEOF_LONG_LONG == 2
171 #define OMPI_DATATYPE_MPI_LONG_LONG OMPI_DATATYPE_MPI_INT16_T
172 #define OMPI_DATATYPE_MPI_UNSIGNED_LONG_LONG OMPI_DATATYPE_MPI_UINT16_T
173 #elif SIZEOF_LONG_LONG == 4
174 #define OMPI_DATATYPE_MPI_LONG_LONG OMPI_DATATYPE_MPI_INT32_T
175 #define OMPI_DATATYPE_MPI_UNSIGNED_LONG_LONG OMPI_DATATYPE_MPI_UINT32_T
176 #elif SIZEOF_LONG_LONG == 8
177 #define OMPI_DATATYPE_MPI_LONG_LONG OMPI_DATATYPE_MPI_INT64_T
178 #define OMPI_DATATYPE_MPI_UNSIGNED_LONG_LONG OMPI_DATATYPE_MPI_UINT64_T
188 #if OMPI_SIZEOF_FORTRAN_LOGICAL1 == OMPI_SIZEOF_FORTRAN_LOGICAL
189 # define OMPI_DATATYPE_MPI_LOGICAL1 OMPI_DATATYPE_MPI_LOGICAL
190 #elif OMPI_SIZEOF_FORTRAN_LOGICAL1 == 1
191 # define OMPI_DATATYPE_MPI_LOGICAL1 OMPI_DATATYPE_MPI_INT8_T
192 #elif OMPI_SIZEOF_FORTRAN_LOGICAL1 == 2
193 # define OMPI_DATATYPE_MPI_LOGICAL1 OMPI_DATATYPE_MPI_INT16_T
194 #elif OMPI_SIZEOF_FORTRAN_LOGICAL1 == 4
195 # define OMPI_DATATYPE_MPI_LOGICAL1 OMPI_DATATYPE_MPI_INT32_T
196 #elif OMPI_SIZEOF_FORTRAN_LOGICAL1 == 8
197 # define OMPI_DATATYPE_MPI_LOGICAL1 OMPI_DATATYPE_MPI_INT64_T
199 # define OMPI_DATATYPE_MPI_LOGICAL1 OMPI_DATATYPE_MPI_UNAVAILABLE
202 #if OMPI_SIZEOF_FORTRAN_LOGICAL2 == OMPI_SIZEOF_FORTRAN_LOGICAL
203 # define OMPI_DATATYPE_MPI_LOGICAL2 OMPI_DATATYPE_MPI_LOGICAL
204 #elif OMPI_SIZEOF_FORTRAN_LOGICAL2 == 1
205 # define OMPI_DATATYPE_MPI_LOGICAL2 OMPI_DATATYPE_MPI_INT8_T
206 #elif OMPI_SIZEOF_FORTRAN_LOGICAL2 == 2
207 # define OMPI_DATATYPE_MPI_LOGICAL2 OMPI_DATATYPE_MPI_INT16_T
208 #elif OMPI_SIZEOF_FORTRAN_LOGICAL2 == 4
209 # define OMPI_DATATYPE_MPI_LOGICAL2 OMPI_DATATYPE_MPI_INT32_T
210 #elif OMPI_SIZEOF_FORTRAN_LOGICAL2 == 8
211 # define OMPI_DATATYPE_MPI_LOGICAL2 OMPI_DATATYPE_MPI_INT64_T
213 # define OMPI_DATATYPE_MPI_LOGICAL2 OMPI_DATATYPE_MPI_UNAVAILABLE
216 #if OMPI_SIZEOF_FORTRAN_LOGICAL4 == OMPI_SIZEOF_FORTRAN_LOGICAL
217 # define OMPI_DATATYPE_MPI_LOGICAL4 OMPI_DATATYPE_MPI_LOGICAL
218 #elif OMPI_SIZEOF_FORTRAN_LOGICAL4 == 1
219 # define OMPI_DATATYPE_MPI_LOGICAL4 OMPI_DATATYPE_MPI_INT8_T
220 #elif OMPI_SIZEOF_FORTRAN_LOGICAL4 == 2
221 # define OMPI_DATATYPE_MPI_LOGICAL4 OMPI_DATATYPE_MPI_INT16_T
222 #elif OMPI_SIZEOF_FORTRAN_LOGICAL4 == 4
223 # define OMPI_DATATYPE_MPI_LOGICAL4 OMPI_DATATYPE_MPI_INT32_T
224 #elif OMPI_SIZEOF_FORTRAN_LOGICAL4 == 8
225 # define OMPI_DATATYPE_MPI_LOGICAL4 OMPI_DATATYPE_MPI_INT64_T
227 # define OMPI_DATATYPE_MPI_LOGICAL4 OMPI_DATATYPE_MPI_UNAVAILABLE
230 #if OMPI_SIZEOF_FORTRAN_LOGICAL8 == OMPI_SIZEOF_FORTRAN_LOGICAL
231 # define OMPI_DATATYPE_MPI_LOGICAL8 OMPI_DATATYPE_MPI_LOGICAL
232 #elif OMPI_SIZEOF_FORTRAN_LOGICAL8 == 1
233 # define OMPI_DATATYPE_MPI_LOGICAL8 OMPI_DATATYPE_MPI_INT8_T
234 #elif OMPI_SIZEOF_FORTRAN_LOGICAL8 == 2
235 # define OMPI_DATATYPE_MPI_LOGICAL8 OMPI_DATATYPE_MPI_INT16_T
236 #elif OMPI_SIZEOF_FORTRAN_LOGICAL8 == 4
237 # define OMPI_DATATYPE_MPI_LOGICAL8 OMPI_DATATYPE_MPI_INT32_T
238 #elif OMPI_SIZEOF_FORTRAN_LOGICAL8 == 8
239 # define OMPI_DATATYPE_MPI_LOGICAL8 OMPI_DATATYPE_MPI_INT64_T
241 # define OMPI_DATATYPE_MPI_LOGICAL8 OMPI_DATATYPE_MPI_UNAVAILABLE
245 #if OMPI_SIZEOF_FORTRAN_INTEGER1 == OMPI_SIZEOF_FORTRAN_INTEGER
246 # define OMPI_DATATYPE_MPI_INTEGER1 OMPI_DATATYPE_MPI_INTEGER
247 #elif OMPI_SIZEOF_FORTRAN_INTEGER1 == 1
248 # define OMPI_DATATYPE_MPI_INTEGER1 OMPI_DATATYPE_MPI_INT8_T
249 #elif OMPI_SIZEOF_FORTRAN_INTEGER1 == 2
250 # define OMPI_DATATYPE_MPI_INTEGER1 OMPI_DATATYPE_MPI_INT16_T
251 #elif OMPI_SIZEOF_FORTRAN_INTEGER1 == 4
252 # define OMPI_DATATYPE_MPI_INTEGER1 OMPI_DATATYPE_MPI_INT32_T
253 #elif OMPI_SIZEOF_FORTRAN_INTEGER1 == 8
254 # define OMPI_DATATYPE_MPI_INTEGER1 OMPI_DATATYPE_MPI_INT64_T
256 # define OMPI_DATATYPE_MPI_INTEGER1 OMPI_DATATYPE_MPI_UNAVAILABLE
259 #if OMPI_SIZEOF_FORTRAN_INTEGER2 == OMPI_SIZEOF_FORTRAN_INTEGER
260 # define OMPI_DATATYPE_MPI_INTEGER2 OMPI_DATATYPE_MPI_INTEGER
261 #elif OMPI_SIZEOF_FORTRAN_INTEGER2 == 1
262 # define OMPI_DATATYPE_MPI_INTEGER2 OMPI_DATATYPE_MPI_INT8_T
263 #elif OMPI_SIZEOF_FORTRAN_INTEGER2 == 2
264 # define OMPI_DATATYPE_MPI_INTEGER2 OMPI_DATATYPE_MPI_INT16_T
265 #elif OMPI_SIZEOF_FORTRAN_INTEGER2 == 4
266 # define OMPI_DATATYPE_MPI_INTEGER2 OMPI_DATATYPE_MPI_INT32_T
267 #elif OMPI_SIZEOF_FORTRAN_INTEGER2 == 8
268 # define OMPI_DATATYPE_MPI_INTEGER2 OMPI_DATATYPE_MPI_INT64_T
270 # define OMPI_DATATYPE_MPI_INTEGER2 OMPI_DATATYPE_MPI_UNAVAILABLE
273 #if OMPI_SIZEOF_FORTRAN_INTEGER4 == OMPI_SIZEOF_FORTRAN_INTEGER
274 # define OMPI_DATATYPE_MPI_INTEGER4 OMPI_DATATYPE_MPI_INTEGER
275 #elif OMPI_SIZEOF_FORTRAN_INTEGER4 == 1
276 # define OMPI_DATATYPE_MPI_INTEGER4 OMPI_DATATYPE_MPI_INT8_T
277 #elif OMPI_SIZEOF_FORTRAN_INTEGER4 == 2
278 # define OMPI_DATATYPE_MPI_INTEGER4 OMPI_DATATYPE_MPI_INT16_T
279 #elif OMPI_SIZEOF_FORTRAN_INTEGER4 == 4
280 # define OMPI_DATATYPE_MPI_INTEGER4 OMPI_DATATYPE_MPI_INT32_T
281 #elif OMPI_SIZEOF_FORTRAN_INTEGER4 == 8
282 # define OMPI_DATATYPE_MPI_INTEGER4 OMPI_DATATYPE_MPI_INT64_T
284 # define OMPI_DATATYPE_MPI_INTEGER4 OMPI_DATATYPE_MPI_UNAVAILABLE
287 #if OMPI_SIZEOF_FORTRAN_INTEGER8 == OMPI_SIZEOF_FORTRAN_INTEGER
288 # define OMPI_DATATYPE_MPI_INTEGER8 OMPI_DATATYPE_MPI_INTEGER
289 #elif OMPI_SIZEOF_FORTRAN_INTEGER8 == 1
290 # define OMPI_DATATYPE_MPI_INTEGER8 OMPI_DATATYPE_MPI_INT8_T
291 #elif OMPI_SIZEOF_FORTRAN_INTEGER8 == 2
292 # define OMPI_DATATYPE_MPI_INTEGER8 OMPI_DATATYPE_MPI_INT16_T
293 #elif OMPI_SIZEOF_FORTRAN_INTEGER8 == 4
294 # define OMPI_DATATYPE_MPI_INTEGER8 OMPI_DATATYPE_MPI_INT32_T
295 #elif OMPI_SIZEOF_FORTRAN_INTEGER8 == 8
296 # define OMPI_DATATYPE_MPI_INTEGER8 OMPI_DATATYPE_MPI_INT64_T
298 # define OMPI_DATATYPE_MPI_INTEGER8 OMPI_DATATYPE_MPI_UNAVAILABLE
301 #if OMPI_SIZEOF_FORTRAN_INTEGER16 == OMPI_SIZEOF_FORTRAN_INTEGER
302 # define OMPI_DATATYPE_MPI_INTEGER16 OMPI_DATATYPE_MPI_INTEGER
303 #elif OMPI_SIZEOF_FORTRAN_INTEGER16 == 1
304 # define OMPI_DATATYPE_MPI_INTEGER16 OMPI_DATATYPE_MPI_INT8_T
305 #elif OMPI_SIZEOF_FORTRAN_INTEGER16 == 2
306 # define OMPI_DATATYPE_MPI_INTEGER16 OMPI_DATATYPE_MPI_INT16_T
307 #elif OMPI_SIZEOF_FORTRAN_INTEGER16 == 4
308 # define OMPI_DATATYPE_MPI_INTEGER16 OMPI_DATATYPE_MPI_INT32_T
309 #elif OMPI_SIZEOF_FORTRAN_INTEGER16 == 8
310 # define OMPI_DATATYPE_MPI_INTEGER16 OMPI_DATATYPE_MPI_INT64_T
312 # define OMPI_DATATYPE_MPI_INTEGER16 OMPI_DATATYPE_MPI_UNAVAILABLE
316 #if OMPI_SIZEOF_FORTRAN_REAL2 == OMPI_SIZEOF_FORTRAN_REAL
317 # define OMPI_DATATYPE_MPI_REAL2 OMPI_DATATYPE_MPI_REAL
318 #elif OMPI_SIZEOF_FORTRAN_REAL2 == SIZEOF_FLOAT
319 # define OMPI_DATATYPE_MPI_REAL2 OMPI_DATATYPE_MPI_FLOAT
320 #elif OMPI_SIZEOF_FORTRAN_REAL2 == SIZEOF_DOUBLE
321 # define OMPI_DATATYPE_MPI_REAL2 OMPI_DATATYPE_MPI_DOUBLE
322 #elif OMPI_SIZEOF_FORTRAN_REAL2 == SIZEOF_LONG_DOUBLE
323 # define OMPI_DATATYPE_MPI_REAL2 OMPI_DATATYPE_MPI_LONG_DOUBLE
325 # define OMPI_DATATYPE_MPI_REAL2 OMPI_DATATYPE_MPI_UNAVAILABLE
328 #if OMPI_SIZEOF_FORTRAN_REAL4 == OMPI_SIZEOF_FORTRAN_REAL
329 # define OMPI_DATATYPE_MPI_REAL4 OMPI_DATATYPE_MPI_REAL
330 #elif OMPI_SIZEOF_FORTRAN_REAL4 == SIZEOF_FLOAT
331 # define OMPI_DATATYPE_MPI_REAL4 OMPI_DATATYPE_MPI_FLOAT
332 #elif OMPI_SIZEOF_FORTRAN_REAL4 == SIZEOF_DOUBLE
333 # define OMPI_DATATYPE_MPI_REAL4 OMPI_DATATYPE_MPI_DOUBLE
334 #elif OMPI_SIZEOF_FORTRAN_REAL4 == SIZEOF_LONG_DOUBLE
335 # define OMPI_DATATYPE_MPI_REAL4 OMPI_DATATYPE_MPI_LONG_DOUBLE
337 # define OMPI_DATATYPE_MPI_REAL4 OMPI_DATATYPE_MPI_UNAVAILABLE
340 #if OMPI_SIZEOF_FORTRAN_REAL8 == OMPI_SIZEOF_FORTRAN_REAL
341 # define OMPI_DATATYPE_MPI_REAL8 OMPI_DATATYPE_MPI_REAL
342 #elif OMPI_SIZEOF_FORTRAN_REAL8 == SIZEOF_FLOAT
343 # define OMPI_DATATYPE_MPI_REAL8 OMPI_DATATYPE_MPI_FLOAT
344 #elif OMPI_SIZEOF_FORTRAN_REAL8 == SIZEOF_DOUBLE
345 # define OMPI_DATATYPE_MPI_REAL8 OMPI_DATATYPE_MPI_DOUBLE
346 #elif OMPI_SIZEOF_FORTRAN_REAL8 == SIZEOF_LONG_DOUBLE
347 # define OMPI_DATATYPE_MPI_REAL8 OMPI_DATATYPE_MPI_LONG_DOUBLE
349 # define OMPI_DATATYPE_MPI_REAL8 OMPI_DATATYPE_MPI_UNAVAILABLE
352 #if OMPI_SIZEOF_FORTRAN_REAL16 == OMPI_SIZEOF_FORTRAN_REAL
353 # define OMPI_DATATYPE_MPI_REAL16 OMPI_DATATYPE_MPI_REAL
354 #elif OMPI_SIZEOF_FORTRAN_REAL16 == SIZEOF_FLOAT
355 # define OMPI_DATATYPE_MPI_REAL16 OMPI_DATATYPE_MPI_FLOAT
356 #elif OMPI_SIZEOF_FORTRAN_REAL16 == SIZEOF_DOUBLE
357 # define OMPI_DATATYPE_MPI_REAL16 OMPI_DATATYPE_MPI_DOUBLE
358 #elif OMPI_SIZEOF_FORTRAN_REAL16 == SIZEOF_LONG_DOUBLE
359 # define OMPI_DATATYPE_MPI_REAL16 OMPI_DATATYPE_MPI_LONG_DOUBLE
361 # define OMPI_DATATYPE_MPI_REAL16 OMPI_DATATYPE_MPI_UNAVAILABLE
365 OMPI_DECLSPEC
extern union dt_elem_desc ompi_datatype_predefined_elem_desc[2 * OMPI_DATATYPE_MPI_MAX_PREDEFINED];
366 extern const ompi_datatype_t* ompi_datatype_basicDatatypes[OMPI_DATATYPE_MPI_MAX_PREDEFINED];
381 #define OMPI_DATATYPE_EMPTY_DATA(NAME) \
382 OMPI_DATATYPE_MPI_ ## NAME , \
389 #define OMPI_DATATYPE_INITIALIZER_UNAVAILABLE(FLAGS) \
390 OPAL_DATATYPE_INITIALIZER_UNAVAILABLE(FLAGS)
392 #define OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE( TYPE, NAME, FLAGS ) \
395 OMPI_DATATYPE_INITIALIZER_ ## TYPE (OMPI_DATATYPE_FLAG_PREDEFINED | \
397 OMPI_DATATYPE_EMPTY_DATA(NAME) \
404 #define OMPI_DATATYPE_INIT_PREDEFINED( NAME, FLAGS ) \
405 OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE( NAME, NAME, FLAGS )
406 #define OMPI_DATATYPE_INIT_UNAVAILABLE( NAME, FLAGS ) \
407 OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE( UNAVAILABLE, NAME, FLAGS )
417 #define OMPI_DATATYPE_INIT_DEFER(NAME, FLAGS) \
418 OMPI_DATATYPE_INIT_UNAVAILABLE(NAME, FLAGS)
421 #if OMPI_WANT_F77_BINDINGS
430 #define OMPI_DATATYPE_INIT_DESC_PREDEFINED(TYPE, SIZE) \
433 &(ompi_datatype_predefined_elem_desc[2 * OPAL_DATATYPE_ ## TYPE ## SIZE]) \
440 #define OMPI_DATATYPE_INITIALIZER_FORTRAN( TYPE, NAME, SIZE, ALIGN, FLAGS ) \
442 OPAL_OBJ_STATIC_INIT(opal_datatype_t), \
443 OPAL_DATATYPE_FLAG_BASIC | \
444 OMPI_DATATYPE_FLAG_PREDEFINED | \
445 OMPI_DATATYPE_FLAG_DATA_FORTRAN | (FLAGS) , \
446 OPAL_DATATYPE_ ## TYPE ## SIZE , \
447 (((uint32_t)1)<<(OPAL_DATATYPE_ ## TYPE ## SIZE)) , \
449 0 , SIZE , 0 , SIZE , \
452 OPAL_DATATYPE_INIT_NAME(TYPE ## SIZE) , \
453 OMPI_DATATYPE_INIT_DESC_PREDEFINED(TYPE, SIZE) , \
454 OMPI_DATATYPE_INIT_DESC_PREDEFINED(TYPE, SIZE) , \
455 OPAL_DATATYPE_INIT_BTYPES_ARRAY_ ## TYPE ## SIZE \
458 #define OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN( TYPE, NAME, SIZE, ALIGN, FLAGS ) \
461 OMPI_DATATYPE_INITIALIZER_FORTRAN( TYPE, NAME, SIZE, ALIGN, FLAGS) , \
462 OMPI_DATATYPE_EMPTY_DATA(NAME) \
467 #define OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE_FORTRAN( TYPE, NAME, SIZE, ALIGN, FLAGS ) \
468 OMPI_DATATYPE_INIT_PREDEFINED_BASIC_TYPE( UNAVAILABLE, NAME, FLAGS )
476 #define OMPI_DATATYPE_INITIALIZER_LB OPAL_DATATYPE_INITIALIZER_LB
477 #define OMPI_DATATYPE_INITIALIZER_UB OPAL_DATATYPE_INITIALIZER_UB
479 #define OMPI_DATATYPE_INITIALIZER_INT8_T OPAL_DATATYPE_INITIALIZER_INT1
480 #define OMPI_DATATYPE_INITIALIZER_UINT8_T OPAL_DATATYPE_INITIALIZER_UINT1
481 #define OMPI_DATATYPE_INITIALIZER_INT16_T OPAL_DATATYPE_INITIALIZER_INT2
482 #define OMPI_DATATYPE_INITIALIZER_UINT16_T OPAL_DATATYPE_INITIALIZER_UINT2
483 #define OMPI_DATATYPE_INITIALIZER_INT32_T OPAL_DATATYPE_INITIALIZER_INT4
484 #define OMPI_DATATYPE_INITIALIZER_UINT32_T OPAL_DATATYPE_INITIALIZER_UINT4
485 #define OMPI_DATATYPE_INITIALIZER_INT64_T OPAL_DATATYPE_INITIALIZER_INT8
486 #define OMPI_DATATYPE_INITIALIZER_UINT64_T OPAL_DATATYPE_INITIALIZER_UINT8
489 #define OMPI_DATATYPE_INITIALIZER_CHAR OPAL_DATATYPE_INITIALIZER_INT1
490 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_CHAR OPAL_DATATYPE_INITIALIZER_UINT1
491 #define OMPI_DATATYPE_INITIALIZER_SIGNED_CHAR OPAL_DATATYPE_INITIALIZER_INT1
492 #define OMPI_DATATYPE_INITIALIZER_BYTE OPAL_DATATYPE_INITIALIZER_UINT1
493 #elif SIZEOF_CHAR == 2
494 #define OMPI_DATATYPE_INITIALIZER_CHAR OPAL_DATATYPE_INITIALIZER_INT2
495 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_CHAR OPAL_DATATYPE_INITIALIZER_UINT2
496 #define OMPI_DATATYPE_INITIALIZER_SIGNED_CHAR OPAL_DATATYPE_INITIALIZER_INT2
497 #define OMPI_DATATYPE_INITIALIZER_BYTE OPAL_DATATYPE_INITIALIZER_UINT2
498 #elif SIZEOF_CHAR == 4
499 #define OMPI_DATATYPE_INITIALIZER_CHAR OPAL_DATATYPE_INITIALIZER_INT4
500 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_CHAR OPAL_DATATYPE_INITIALIZER_UINT4
501 #define OMPI_DATATYPE_INITIALIZER_SIGNED_CHAR OPAL_DATATYPE_INITIALIZER_INT4
502 #define OMPI_DATATYPE_INITIALIZER_BYTE OPAL_DATATYPE_INITIALIZER_UINT4
503 #elif SIZEOF_CHAR == 8
504 #define OMPI_DATATYPE_INITIALIZER_CHAR OPAL_DATATYPE_INITIALIZER_INT8
505 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_CHAR OPAL_DATATYPE_INITIALIZER_UINT8
506 #define OMPI_DATATYPE_INITIALIZER_SIGNED_CHAR OPAL_DATATYPE_INITIALIZER_INT8
507 #define OMPI_DATATYPE_INITIALIZER_BYTE OPAL_DATATYPE_INITIALIZER_UINT8
510 #if SIZEOF_SHORT == 2
511 #define OMPI_DATATYPE_INITIALIZER_SHORT OPAL_DATATYPE_INITIALIZER_INT2
512 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_SHORT OPAL_DATATYPE_INITIALIZER_UINT2
513 #elif SIZEOF_SHORT == 4
514 #define OMPI_DATATYPE_INITIALIZER_SHORT OPAL_DATATYPE_INITIALIZER_INT4
515 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_SHORT OPAL_DATATYPE_INITIALIZER_UINT4
516 #elif SIZEOF_SHORT == 8
517 #define OMPI_DATATYPE_INITIALIZER_SHORT OPAL_DATATYPE_INITIALIZER_INT8
518 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_SHORT OPAL_DATATYPE_INITIALIZER_UINT8
522 #define OMPI_DATATYPE_INITIALIZER_INT OPAL_DATATYPE_INITIALIZER_INT2
523 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_INT OPAL_DATATYPE_INITIALIZER_UINT2
524 #elif SIZEOF_INT == 4
525 #define OMPI_DATATYPE_INITIALIZER_INT OPAL_DATATYPE_INITIALIZER_INT4
526 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_INT OPAL_DATATYPE_INITIALIZER_UINT4
527 #elif SIZEOF_INT == 8
528 #define OMPI_DATATYPE_INITIALIZER_INT OPAL_DATATYPE_INITIALIZER_INT8
529 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_INT OPAL_DATATYPE_INITIALIZER_UINT8
533 #define OMPI_DATATYPE_INITIALIZER_LONG OPAL_DATATYPE_INITIALIZER_INT4
534 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_LONG OPAL_DATATYPE_INITIALIZER_UINT4
535 #elif SIZEOF_LONG == 8
536 #define OMPI_DATATYPE_INITIALIZER_LONG OPAL_DATATYPE_INITIALIZER_INT8
537 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_LONG OPAL_DATATYPE_INITIALIZER_UINT8
538 #elif SIZEOF_LONG == 16
539 #define OMPI_DATATYPE_INITIALIZER_LONG OPAL_DATATYPE_INITIALIZER_INT16
540 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_LONG OPAL_DATATYPE_INITIALIZER_UINT16
544 #ifdef HAVE_LONG_LONG
545 #if SIZEOF_LONG_LONG == 4
546 #define OMPI_DATATYPE_INITIALIZER_LONG_LONG OPAL_DATATYPE_INITIALIZER_INT4
547 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_LONG_LONG OPAL_DATATYPE_INITIALIZER_UINT4
548 #elif SIZEOF_LONG_LONG == 8
549 #define OMPI_DATATYPE_INITIALIZER_LONG_LONG OPAL_DATATYPE_INITIALIZER_INT8
550 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_LONG_LONG OPAL_DATATYPE_INITIALIZER_UINT8
551 #elif SIZEOF_LONG_LONG == 16
552 #define OMPI_DATATYPE_INITIALIZER_LONG_LONG OPAL_DATATYPE_INITIALIZER_INT16
553 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_LONG_LONG OPAL_DATATYPE_INITIALIZER_UINT16
558 #define OMPI_DATATYPE_INITIALIZER_LONG_LONG OPAL_DATATYPE_INIT_UNAVAILABLE (LONG_LONG, OMPI_DATATYPE_FLAG_DATA_C)
559 #define OMPI_DATATYPE_INITIALIZER_UNSIGNED_LONG_LONG OPAL_DATATYPE_INIT_UNAVAILABLE (UNSIGNED_LONG_LONG, OMPI_DATATYPE_FLAG_DATA_C)
563 #if SIZEOF_FLOAT == 2
564 #define OMPI_DATATYPE_INITIALIZER_FLOAT OPAL_DATATYPE_INITIALIZER_FLOAT2
565 #elif SIZEOF_FLOAT == 4
566 #define OMPI_DATATYPE_INITIALIZER_FLOAT OPAL_DATATYPE_INITIALIZER_FLOAT4
567 #elif SIZEOF_FLOAT == 8
568 #define OMPI_DATATYPE_INITIALIZER_FLOAT OPAL_DATATYPE_INITIALIZER_FLOAT8
572 #if SIZEOF_DOUBLE == 4
573 #define OMPI_DATATYPE_INITIALIZER_DOUBLE OPAL_DATATYPE_INITIALIZER_FLOAT4
574 #elif SIZEOF_DOUBLE == 8
575 #define OMPI_DATATYPE_INITIALIZER_DOUBLE OPAL_DATATYPE_INITIALIZER_FLOAT8
576 #elif SIZEOF_DOUBLE == 12
577 #define OMPI_DATATYPE_INITIALIZER_DOUBLE OPAL_DATATYPE_INITIALIZER_FLOAT12
578 #elif SIZEOF_DOUBLE == 16
579 #define OMPI_DATATYPE_INITIALIZER_DOUBLE OPAL_DATATYPE_INITIALIZER_FLOAT16
583 #ifdef HAVE_LONG_DOUBLE
584 #if SIZEOF_LONG_DOUBLE == 4
585 #define OMPI_DATATYPE_INITIALIZER_LONG_DOUBLE OPAL_DATATYPE_INITIALIZER_FLOAT4
586 #elif SIZEOF_LONG_DOUBLE == 8
587 #define OMPI_DATATYPE_INITIALIZER_LONG_DOUBLE OPAL_DATATYPE_INITIALIZER_FLOAT8
588 #elif SIZEOF_LONG_DOUBLE == 12
589 #define OMPI_DATATYPE_INITIALIZER_LONG_DOUBLE OPAL_DATATYPE_INITIALIZER_FLOAT12
590 #elif SIZEOF_LONG_DOUBLE == 16
591 #define OMPI_DATATYPE_INITIALIZER_LONG_DOUBLE OPAL_DATATYPE_INITIALIZER_FLOAT16
596 #define OMPI_DATATYPE_INITIALIZER_LONG_DOUBLE OMPI_DATATYPE_INIT_UNAVAILABLE(LONG_DOUBLE, OMPI_DATATYPE_FLAG_DATA_C)
600 #define OMPI_DATATYPE_INITIALIZER_PACKED OPAL_DATATYPE_INITIALIZER_UINT1
602 #define OMPI_DATATYPE_INITIALIZER_BOOL OPAL_DATATYPE_INITIALIZER_BOOL
604 #define OMPI_DATATYPE_INITIALIZER_WCHAR OPAL_DATATYPE_INITIALIZER_WCHAR
610 #define OMPI_DATATYPE_FIRST_TYPE OPAL_DATATYPE_MAX_PREDEFINED
611 #define OMPI_DATATYPE_COMPLEX (OMPI_DATATYPE_FIRST_TYPE+0)
612 #define OMPI_DATATYPE_DOUBLE_COMPLEX (OMPI_DATATYPE_FIRST_TYPE+1)
613 #define OMPI_DATATYPE_LONG_DOUBLE_COMPLEX (OMPI_DATATYPE_FIRST_TYPE+2)
615 #define OMPI_DATATYPE_COMPLEX8 (OMPI_DATATYPE_FIRST_TYPE+3)
616 #define OMPI_DATATYPE_COMPLEX16 (OMPI_DATATYPE_FIRST_TYPE+4)
617 #define OMPI_DATATYPE_COMPLEX32 (OMPI_DATATYPE_FIRST_TYPE+5)
622 #define OMPI_DATATYPE_2INT (OMPI_DATATYPE_FIRST_TYPE+6)
623 #define OMPI_DATATYPE_2INTEGER (OMPI_DATATYPE_FIRST_TYPE+7)
624 #define OMPI_DATATYPE_2REAL (OMPI_DATATYPE_FIRST_TYPE+8)
625 #define OMPI_DATATYPE_2DBLPREC (OMPI_DATATYPE_FIRST_TYPE+9)
626 #define OMPI_DATATYPE_2COMPLEX (OMPI_DATATYPE_FIRST_TYPE+10)
627 #define OMPI_DATATYPE_2DOUBLE_COMPLEX (OMPI_DATATYPE_FIRST_TYPE+11)
631 #define OMPI_DATATYPE_FLOAT_INT (OMPI_DATATYPE_FIRST_TYPE+12)
632 #define OMPI_DATATYPE_DOUBLE_INT (OMPI_DATATYPE_FIRST_TYPE+13)
633 #define OMPI_DATATYPE_LONG_DOUBLE_INT (OMPI_DATATYPE_FIRST_TYPE+14)
634 #define OMPI_DATATYPE_SHORT_INT (OMPI_DATATYPE_FIRST_TYPE+15)
635 #define OMPI_DATATYPE_LONG_INT (OMPI_DATATYPE_FIRST_TYPE+16)
638 #define OMPI_DATATYPE_UNAVAILABLE (OMPI_DATATYPE_FIRST_TYPE+17)
641 #if OMPI_DATATYPE_MAX_PREDEFINED <= OMPI_DATATYPE_UNAVAILABLE
642 #error OMPI_DATATYPE_MAX_PREDEFINED should be updated to the next value after the OMPI_DATATYPE_UNAVAILABLE define
Definition: opal_datatype_internal.h:184
Definition: ompi_datatype.h:68