21 #ifndef OPAL_DATATYPE_INTERNAL_H_HAS_BEEN_INCLUDED
22 #define OPAL_DATATYPE_INTERNAL_H_HAS_BEEN_INCLUDED
24 #include "opal_config.h"
39 extern int opal_datatype_dfd;
41 # define DDT_DUMP_STACK( PSTACK, STACK_POS, PDESC, NAME ) \
42 opal_datatype_dump_stack( (PSTACK), (STACK_POS), (PDESC), (NAME) )
43 # if defined(ACCEPT_C99)
44 # define DUMP( ARGS... ) opal_output(opal_datatype_dfd, __VA_ARGS__)
46 # if defined(__GNUC__) && !defined(__STDC__)
47 # define DUMP(ARGS...) opal_output( opal_datatype_dfd, ARGS)
49 static inline void DUMP(
char* fmt, ... )
53 va_start( list, fmt );
61 # define DDT_DUMP_STACK( PSTACK, STACK_POS, PDESC, NAME )
62 # if defined(ACCEPT_C99)
63 # define DUMP(ARGS...)
65 # if defined(__GNUC__) && !defined(__STDC__)
66 # define DUMP(ARGS...)
70 # define __opal_attribute_unused_tmp__ __opal_attribute_unused__
72 # define __opal_attribute_unused_tmp__
74 static inline void DUMP(
char* fmt __opal_attribute_unused_tmp__, ... )
80 va_start(arglist, fmt);
84 # undef __opal_attribute_unused_tmp__
105 #define OPAL_DATATYPE_LOOP 0
106 #define OPAL_DATATYPE_END_LOOP 1
107 #define OPAL_DATATYPE_LB 2
108 #define OPAL_DATATYPE_UB 3
109 #define OPAL_DATATYPE_FIRST_TYPE 4
110 #define OPAL_DATATYPE_INT1 4
111 #define OPAL_DATATYPE_INT2 5
112 #define OPAL_DATATYPE_INT4 6
113 #define OPAL_DATATYPE_INT8 7
114 #define OPAL_DATATYPE_INT16 8
115 #define OPAL_DATATYPE_UINT1 9
116 #define OPAL_DATATYPE_UINT2 10
117 #define OPAL_DATATYPE_UINT4 11
118 #define OPAL_DATATYPE_UINT8 12
119 #define OPAL_DATATYPE_UINT16 13
120 #define OPAL_DATATYPE_FLOAT2 14
121 #define OPAL_DATATYPE_FLOAT4 15
122 #define OPAL_DATATYPE_FLOAT8 16
123 #define OPAL_DATATYPE_FLOAT12 17
124 #define OPAL_DATATYPE_FLOAT16 18
125 #define OPAL_DATATYPE_COMPLEX8 19
126 #define OPAL_DATATYPE_COMPLEX16 20
127 #define OPAL_DATATYPE_COMPLEX32 21
128 #define OPAL_DATATYPE_BOOL 22
129 #define OPAL_DATATYPE_WCHAR 23
130 #define OPAL_DATATYPE_UNAVAILABLE 24
132 #ifndef OPAL_DATATYPE_MAX_PREDEFINED
133 #define OPAL_DATATYPE_MAX_PREDEFINED 25
140 #if OPAL_DATATYPE_MAX_PREDEFINED <= OPAL_DATATYPE_UNAVAILABLE
141 #error OPAL_DATATYPE_MAX_PREDEFINED should be updated to the next value after the OPAL_DATATYPE_UNAVAILABLE define
144 #define DT_INCREASE_STACK 8
190 #define CREATE_LOOP_START( _place, _count, _items, _extent, _flags ) \
192 (_place)->loop.common.type = OPAL_DATATYPE_LOOP; \
193 (_place)->loop.common.flags = (_flags) & ~OPAL_DATATYPE_FLAG_DATA; \
194 (_place)->loop.loops = (_count); \
195 (_place)->loop.items = (_items); \
196 (_place)->loop.extent = (_extent); \
197 (_place)->loop.unused = -1; \
200 #define CREATE_LOOP_END( _place, _items, _first_item_disp, _size, _flags ) \
202 (_place)->end_loop.common.type = OPAL_DATATYPE_END_LOOP; \
203 (_place)->end_loop.common.flags = (_flags) & ~OPAL_DATATYPE_FLAG_DATA; \
204 (_place)->end_loop.items = (_items); \
205 (_place)->end_loop.first_elem_disp = (_first_item_disp); \
206 (_place)->end_loop.size = (_size); \
207 (_place)->end_loop.unused = -1; \
210 #define CREATE_ELEM( _place, _type, _flags, _count, _disp, _extent ) \
212 (_place)->elem.common.flags = (_flags) | OPAL_DATATYPE_FLAG_DATA; \
213 (_place)->elem.common.type = (_type); \
214 (_place)->elem.count = (_count); \
215 (_place)->elem.disp = (_disp); \
216 (_place)->elem.extent = (_extent); \
217 (_place)->elem.blocklen = 1; \
222 OPAL_DECLSPEC
extern union dt_elem_desc opal_datatype_predefined_elem_desc[2 * OPAL_DATATYPE_MAX_PREDEFINED];
233 #define Z5 0, 0, 0, 0, 0
237 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_UNAVAILABLE { 0, }
238 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_LOOP { 1, }
239 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_END_LOOP { 0, 1, }
240 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_LB { 0, 0, 1, }
241 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_UB { 0, 0, 0, 1, }
242 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_INT1 { 0, 0, 0, 0, 1, }
243 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_INT2 { Z5, 1, }
244 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_INT4 { Z5, 0, 1, }
245 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_INT8 { Z5, 0, 0, 1, }
246 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_INT16 { Z5, 0, 0, 0, 1, }
247 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_UINT1 { Z5, 0, 0, 0, 0, 1, }
248 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_UINT2 { Z10, 1, }
249 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_UINT4 { Z10, 0, 1, }
250 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_UINT8 { Z10, 0, 0, 1, }
251 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_UINT16 { Z10, 0, 0, 0, 1, }
252 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_FLOAT2 { Z10, 0, 0, 0, 0, 1, }
253 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_FLOAT4 { Z15, 1, }
254 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_FLOAT8 { Z15, 0, 1, }
255 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_FLOAT12 { Z15, 0, 0, 1, }
256 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_FLOAT16 { Z15, 0, 0, 0, 1, }
257 #if HAVE_FLOAT__COMPLEX
258 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_COMPLEX8 { Z15, 0, 0, 0, 0, 1 }
260 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_COMPLEX8 { Z15, 2 }
262 #if HAVE_DOUBLE__COMPLEX
263 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_COMPLEX16 { Z15, 0, 0, 0, 0, 0, 1 }
265 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_COMPLEX16 { Z15, 0, 2, }
267 #if HAVE_LONG_DOUBLE__COMPLEX
268 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_COMPLEX32 { Z15, 0, 0, 0, 0, 0, 0, 1 }
270 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_COMPLEX32 { Z15, 0, 0, 0, 2, }
272 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_BOOL { Z20, 0, 1, }
273 #define OPAL_DATATYPE_INIT_BTYPES_ARRAY_WCHAR { Z20, 0, 0, 1, }
275 #define OPAL_DATATYPE_INIT_NAME(NAME) "OPAL_" _OPAL_DATATYPE_INIT_NAME(NAME)
276 #define _OPAL_DATATYPE_INIT_NAME(NAME) #NAME
283 #define OPAL_DATATYPE_INIT_DESC_PREDEFINED(NAME) \
286 &(opal_datatype_predefined_elem_desc[2 * OPAL_DATATYPE_ ## NAME]) \
288 #define OPAL_DATATYPE_INIT_DESC_NULL {0 , 0, NULL }
290 #define OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( NAME, FLAGS ) \
292 OPAL_OBJ_STATIC_INIT(opal_datatype_t), \
293 OPAL_DATATYPE_FLAG_UNAVAILABLE | OPAL_DATATYPE_FLAG_PREDEFINED | (FLAGS) , \
294 OPAL_DATATYPE_ ## NAME , \
300 OPAL_DATATYPE_INIT_NAME(NAME), \
301 OPAL_DATATYPE_INIT_DESC_PREDEFINED(UNAVAILABLE), \
302 OPAL_DATATYPE_INIT_DESC_PREDEFINED(UNAVAILABLE), \
303 OPAL_DATATYPE_INIT_BTYPES_ARRAY_UNAVAILABLE \
306 #define OPAL_DATATYPE_INITIALIZER_UNAVAILABLE( FLAGS ) \
307 OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( UNAVAILABLE, (FLAGS) )
309 #define OPAL_DATATYPE_INITIALIZER_EMPTY( FLAGS ) \
311 OPAL_OBJ_STATIC_INIT(opal_datatype_t), \
312 OPAL_DATATYPE_FLAG_PREDEFINED | (FLAGS) , \
319 OPAL_DATATYPE_INIT_NAME(EMPTY), \
320 OPAL_DATATYPE_INIT_DESC_NULL, \
321 OPAL_DATATYPE_INIT_DESC_NULL, \
322 OPAL_DATATYPE_INIT_BTYPES_ARRAY_UNAVAILABLE \
325 #define OPAL_DATATYPE_INIT_BASIC_TYPE( TYPE, NAME, FLAGS ) \
327 OPAL_OBJ_STATIC_INIT(opal_datatype_t), \
328 OPAL_DATATYPE_FLAG_PREDEFINED | (FLAGS) , \
330 (((uint32_t)1)<<(TYPE)) , \
335 OPAL_DATATYPE_INIT_NAME(NAME), \
336 OPAL_DATATYPE_INIT_DESC_NULL, \
337 OPAL_DATATYPE_INIT_DESC_NULL, \
338 OPAL_DATATYPE_INIT_BTYPES_ARRAY_ ## NAME \
341 #define OPAL_DATATYPE_INIT_BASIC_DATATYPE( TYPE, ALIGN, NAME, FLAGS ) \
343 OPAL_OBJ_STATIC_INIT(opal_datatype_t), \
344 OPAL_DATATYPE_FLAG_BASIC | (FLAGS) , \
345 OPAL_DATATYPE_ ## NAME , \
346 (((uint32_t)1)<<(OPAL_DATATYPE_ ## NAME)) , \
348 0 , sizeof(TYPE) , 0 , sizeof(TYPE) , \
351 OPAL_DATATYPE_INIT_NAME(NAME) , \
352 OPAL_DATATYPE_INIT_DESC_PREDEFINED(NAME) , \
353 OPAL_DATATYPE_INIT_DESC_PREDEFINED(NAME) , \
354 OPAL_DATATYPE_INIT_BTYPES_ARRAY_ ## NAME \
357 #define OPAL_DATATYPE_INITIALIZER_LOOP(FLAGS) OPAL_DATATYPE_INIT_BASIC_TYPE( OPAL_DATATYPE_LOOP, LOOP, FLAGS )
358 #define OPAL_DATATYPE_INITIALIZER_END_LOOP(FLAGS) OPAL_DATATYPE_INIT_BASIC_TYPE( OPAL_DATATYPE_END_LOOP, END_LOOP, FLAGS )
359 #define OPAL_DATATYPE_INITIALIZER_LB(FLAGS) OPAL_DATATYPE_INIT_BASIC_TYPE( OPAL_DATATYPE_LB, LB, FLAGS )
360 #define OPAL_DATATYPE_INITIALIZER_UB(FLAGS) OPAL_DATATYPE_INIT_BASIC_TYPE( OPAL_DATATYPE_UB, UB, FLAGS )
361 #define OPAL_DATATYPE_INITIALIZER_INT1(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( int8_t, OPAL_ALIGNMENT_INT8, INT1, FLAGS )
362 #define OPAL_DATATYPE_INITIALIZER_INT2(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( int16_t, OPAL_ALIGNMENT_INT16, INT2, FLAGS )
363 #define OPAL_DATATYPE_INITIALIZER_INT4(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( int32_t, OPAL_ALIGNMENT_INT32, INT4, FLAGS )
364 #define OPAL_DATATYPE_INITIALIZER_INT8(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( int64_t, OPAL_ALIGNMENT_INT64, INT8, FLAGS )
366 #define OPAL_DATATYPE_INITIALIZER_INT16(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( int128_t, OPAL_ALIGNMENT_INT128, INT16, FLAGS )
368 #define OPAL_DATATYPE_INITIALIZER_INT16(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( INT16, FLAGS )
370 #define OPAL_DATATYPE_INITIALIZER_UINT1(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( uint8_t, OPAL_ALIGNMENT_INT8, UINT1, FLAGS )
371 #define OPAL_DATATYPE_INITIALIZER_UINT2(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( uint16_t, OPAL_ALIGNMENT_INT16, UINT2, FLAGS )
372 #define OPAL_DATATYPE_INITIALIZER_UINT4(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( uint32_t, OPAL_ALIGNMENT_INT32, UINT4, FLAGS )
373 #define OPAL_DATATYPE_INITIALIZER_UINT8(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( uint64_t, OPAL_ALIGNMENT_INT64, UINT8, FLAGS )
374 #ifdef HAVE_UINT128_T
375 #define OPAL_DATATYPE_INITIALIZER_UINT16(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( uint128_t, OPAL_ALIGNMENT_INT128, UINT16, FLAGS )
377 #define OPAL_DATATYPE_INITIALIZER_UINT16(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( INT16, FLAGS )
380 #if SIZEOF_FLOAT == 2
381 #define OPAL_DATATYPE_INITIALIZER_FLOAT2(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( float, OPAL_ALIGNMENT_FLOAT, FLOAT2, FLAGS )
382 #elif SIZEOF_DOUBLE == 2
383 #define OPAL_DATATYPE_INITIALIZER_FLOAT2(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( double, OPAL_ALIGNMENT_DOUBLE, FLOAT2, FLAGS )
384 #elif SIZEOF_LONG_DOUBLE == 2
385 #define OPAL_DATATYPE_INITIALIZER_FLOAT2(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( long double, OPAL_ALIGNMENT_LONG_DOUBLE, FLOAT2, FLAGS )
387 #define OPAL_DATATYPE_INITIALIZER_FLOAT2(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( FLOAT2, FLAGS )
390 #if SIZEOF_FLOAT == 4
391 #define OPAL_DATATYPE_INITIALIZER_FLOAT4(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( float, OPAL_ALIGNMENT_FLOAT, FLOAT4, FLAGS )
392 #elif SIZEOF_DOUBLE == 4
393 #define OPAL_DATATYPE_INITIALIZER_FLOAT4(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( double, OPAL_ALIGNMENT_DOUBLE, FLOAT4, FLAGS )
394 #elif SIZEOF_LONG_DOUBLE == 4
395 #define OPAL_DATATYPE_INITIALIZER_FLOAT4(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( long double, OPAL_ALIGNMENT_LONG_DOUBLE, FLOAT4, FLAGS )
397 #define OPAL_DATATYPE_INITIALIZER_FLOAT4(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( FLOAT4, FLAGS )
400 #if SIZEOF_FLOAT == 8
401 #define OPAL_DATATYPE_INITIALIZER_FLOAT8(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( float, OPAL_ALIGNMENT_FLOAT, FLOAT8, FLAGS )
402 #elif SIZEOF_DOUBLE == 8
403 #define OPAL_DATATYPE_INITIALIZER_FLOAT8(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( double, OPAL_ALIGNMENT_DOUBLE, FLOAT8, FLAGS )
404 #elif SIZEOF_LONG_DOUBLE == 8
405 #define OPAL_DATATYPE_INITIALIZER_FLOAT8(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( long double, OPAL_ALIGNMENT_LONG_DOUBLE, FLOAT8, FLAGS )
407 #define OPAL_DATATYPE_INITIALIZER_FLOAT8(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( FLOAT8, FLAGS )
410 #if SIZEOF_FLOAT == 12
411 #define OPAL_DATATYPE_INITIALIZER_FLOAT12(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( float, OPAL_ALIGNMENT_FLOAT, FLOAT12, FLAGS )
412 #elif SIZEOF_DOUBLE == 12
413 #define OPAL_DATATYPE_INITIALIZER_FLOAT12(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( double, OPAL_ALIGNMENT_DOUBLE, FLOAT12, FLAGS )
414 #elif SIZEOF_LONG_DOUBLE == 12
415 #define OPAL_DATATYPE_INITIALIZER_FLOAT12(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( long double, OPAL_ALIGNMENT_LONG_DOUBLE, FLOAT12, FLAGS )
417 #define OPAL_DATATYPE_INITIALIZER_FLOAT12(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( FLOAT12, FLAGS )
420 #if SIZEOF_FLOAT == 16
421 #define OPAL_DATATYPE_INITIALIZER_FLOAT16(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( float, OPAL_ALIGNMENT_FLOAT, FLOAT16, FLAGS )
422 #elif SIZEOF_DOUBLE == 16
423 #define OPAL_DATATYPE_INITIALIZER_FLOAT16(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( double, OPAL_ALIGNMENT_DOUBLE, FLOAT16, FLAGS )
424 #elif SIZEOF_LONG_DOUBLE == 16
425 #define OPAL_DATATYPE_INITIALIZER_FLOAT16(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( long double, OPAL_ALIGNMENT_LONG_DOUBLE, FLOAT16, FLAGS )
427 #define OPAL_DATATYPE_INITIALIZER_FLOAT16(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( FLOAT16, FLAGS )
437 #define OPAL_USE_FLOAT__COMPLEX (0 && HAVE_FLOAT__COMPLEX)
438 #define OPAL_USE_DOUBLE__COMPLEX (0 && HAVE_DOUBLE__COMPLEX)
439 #define OPAL_USE_LONG_DOUBLE__COMPLEX (0 && HAVE_LONG_DOUBLE__COMPLEX)
441 #if OPAL_USE_FLOAT__COMPLEX && (SIZEOF_FLOAT__COMPLEX == 8)
442 #define OPAL_DATATYPE_INITIALIZER_COMPLEX8(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( float _Complex, OPAL_ALIGNMENT_FLOAT_COMPLEX, COMPLEX8, (FLAGS) )
445 #if SIZEOF_FLOAT == 4
449 } opal_complex_float_t;
451 #define OPAL_DATATYPE_INITIALIZER_COMPLEX8( FLAGS ) \
453 OPAL_OBJ_STATIC_INIT(opal_datatype_t), \
454 OPAL_DATATYPE_FLAG_BASIC | (FLAGS) , \
455 OPAL_DATATYPE_COMPLEX8 , \
456 (((uint32_t)1)<<(OPAL_DATATYPE_ ## FLOAT4)) , \
457 sizeof(opal_complex_float_t) , \
458 0 , sizeof(opal_complex_float_t) , 0 , sizeof(opal_complex_float_t) , \
459 OPAL_ALIGNMENT_FLOAT , \
461 OPAL_DATATYPE_INIT_NAME(COMPLEX8) , \
462 OPAL_DATATYPE_INIT_DESC_PREDEFINED(COMPLEX8) , \
463 OPAL_DATATYPE_INIT_DESC_PREDEFINED(COMPLEX8) , \
467 #define OPAL_DATATYPE_INITIALIZER_COMPLEX8(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( COMPLEX8, FLAGS )
472 #if OPAL_USE_DOUBLE__COMPLEX && (SIZEOF_DOUBLE__COMPLEX == 16)
473 #define OPAL_DATATYPE_INITIALIZER_COMPLEX16(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( double _Complex, OPAL_ALIGNMENT_DOUBLE_COMPLEX, COMPLEX16, (FLAGS) )
476 #if SIZEOF_DOUBLE == 8
480 } opal_complex_double_t;
482 #define OPAL_DATATYPE_INITIALIZER_COMPLEX16( FLAGS ) \
484 OPAL_OBJ_STATIC_INIT(opal_datatype_t), \
485 OPAL_DATATYPE_FLAG_BASIC | (FLAGS) , \
486 OPAL_DATATYPE_COMPLEX16 , \
487 (((uint32_t)1)<<(OPAL_DATATYPE_ ## FLOAT8)) , \
488 sizeof(opal_complex_double_t) , \
489 0 , sizeof(opal_complex_double_t) , 0 , sizeof(opal_complex_double_t) , \
490 OPAL_ALIGNMENT_DOUBLE , \
492 OPAL_DATATYPE_INIT_NAME(COMPLEX16) , \
493 OPAL_DATATYPE_INIT_DESC_PREDEFINED(COMPLEX16) , \
494 OPAL_DATATYPE_INIT_DESC_PREDEFINED(COMPLEX16) , \
498 #define OPAL_DATATYPE_INITIALIZER_COMPLEX16(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( COMPLEX16, FLAGS )
503 #if OPAL_USE_LONG_DOUBLE__COMPLEX && (SIZEOF_LONG_DOUBLE__COMPLEX == 32)
504 #define OPAL_DATATYPE_INITIALIZER_COMPLEX32(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( long double _Complex, OPAL_ALIGNMENT_LONG_DOUBLE_COMPLEX, COMPLEX32, (FLAGS) )
507 #if HAVE_LONG_DOUBLE && (SIZEOF_LONG_DOUBLE == 16)
511 } opal_complex_long_double_t;
513 #define OPAL_DATATYPE_INITIALIZER_COMPLEX32( FLAGS ) \
515 OPAL_OBJ_STATIC_INIT(opal_datatype_t), \
516 OPAL_DATATYPE_FLAG_BASIC | (FLAGS) , \
517 OPAL_DATATYPE_COMPLEX32 , \
518 (((uint32_t)1)<<(OPAL_DATATYPE_ ## FLOAT16)) , \
519 sizeof(opal_complex_long_double_t) , \
520 0 , sizeof(opal_complex_long_double_t) , 0 , sizeof(opal_complex_long_double_t) , \
521 OPAL_ALIGNMENT_LONG_DOUBLE , \
523 OPAL_DATATYPE_INIT_NAME(COMPLEX32) , \
524 OPAL_DATATYPE_INIT_DESC_PREDEFINED(COMPLEX32) , \
525 OPAL_DATATYPE_INIT_DESC_PREDEFINED(COMPLEX32) , \
529 #define OPAL_DATATYPE_INITIALIZER_COMPLEX32(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( COMPLEX32, FLAGS )
534 #define OPAL_DATATYPE_INITIALIZER_BOOL(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( _Bool, OPAL_ALIGNMENT_BOOL, BOOL, FLAGS )
536 #if OPAL_ALIGNMENT_WCHAR != 0
537 #define OPAL_DATATYPE_INITIALIZER_WCHAR(FLAGS) OPAL_DATATYPE_INIT_BASIC_DATATYPE( wchar_t, OPAL_ALIGNMENT_WCHAR, WCHAR, FLAGS )
539 #define OPAL_DATATYPE_INITIALIZER_WCHAR(FLAGS) OPAL_DATATYPE_INITIALIZER_UNAVAILABLE_NAMED( WCHAR, FLAGS )
543 #define BASIC_DDT_FROM_ELEM( ELEM ) (opal_datatype_basicDatatypes[(ELEM).elem.common.type])
545 #define SAVE_STACK( PSTACK, INDEX, TYPE, COUNT, DISP) \
547 (PSTACK)->index = (INDEX); \
548 (PSTACK)->type = (TYPE); \
549 (PSTACK)->count = (COUNT); \
550 (PSTACK)->disp = (DISP); \
553 #define PUSH_STACK( PSTACK, STACK_POS, INDEX, TYPE, COUNT, DISP) \
555 dt_stack_t* pTempStack = (PSTACK) + 1; \
556 SAVE_STACK( pTempStack, (INDEX), (TYPE), (COUNT), (DISP) ); \
558 (PSTACK) = pTempStack; \
561 #if OPAL_ENABLE_DEBUG
562 #define OPAL_DATATYPE_SAFEGUARD_POINTER( ACTPTR, LENGTH, INITPTR, PDATA, COUNT ) \
564 unsigned char *__lower_bound = (INITPTR), *__upper_bound; \
565 assert( ((LENGTH) != 0) && ((COUNT) != 0) ); \
566 __lower_bound += (PDATA)->true_lb; \
567 __upper_bound = (INITPTR) + (PDATA)->true_ub + \
568 ((PDATA)->ub - (PDATA)->lb) * ((COUNT) - 1); \
569 if( ((ACTPTR) < __lower_bound) || ((ACTPTR) >= __upper_bound) ) { \
570 opal_datatype_safeguard_pointer_debug_breakpoint( (ACTPTR), (LENGTH), (INITPTR), (PDATA), (COUNT) ); \
571 opal_output( 0, "%s:%d\n\tPointer %p size %lu is outside [%p,%p] for\n\tbase ptr %p count %lu and data \n", \
572 __FILE__, __LINE__, (ACTPTR), (unsigned long)(LENGTH), __lower_bound, __upper_bound, \
573 (INITPTR), (unsigned long)(COUNT) ); \
574 opal_datatype_dump( (PDATA) ); \
579 #define OPAL_DATATYPE_SAFEGUARD_POINTER( ACTPTR, LENGTH, INITPTR, PDATA, COUNT )
582 static inline int GET_FIRST_NON_LOOP(
const union dt_elem_desc* _pElem )
584 int element_index = 0;
589 while( _pElem->elem.
common.
type == OPAL_DATATYPE_LOOP ) {
590 ++_pElem; element_index++;
592 return element_index;
595 #define UPDATE_INTERNAL_COUNTERS( DESCRIPTION, POSITION, ELEMENT, COUNTER ) \
597 (ELEMENT) = &((DESCRIPTION)[(POSITION)]); \
598 (COUNTER) = (ELEMENT)->elem.count; \
601 OPAL_DECLSPEC
int opal_datatype_contain_basic_datatypes(
const struct opal_datatype_t* pData,
char* ptr,
size_t length );
602 OPAL_DECLSPEC
int opal_datatype_dump_data_flags(
unsigned short usflags,
char* ptr,
size_t length );
603 OPAL_DECLSPEC
int opal_datatype_dump_data_desc(
union dt_elem_desc* pDesc,
int nbElems,
char* ptr,
size_t length );
OPAL_PTRDIFF_TYPE extent
extent of each block (in bytes)
Definition: opal_datatype_internal.h:161
OPAL output stream facility.
Definition: opal_datatype_internal.h:175
OPAL_PTRDIFF_TYPE first_elem_disp
the displacement of the first block in the loop
Definition: opal_datatype_internal.h:180
uint32_t loops
number of elements
Definition: opal_datatype_internal.h:168
Definition: opal_datatype_internal.h:184
Definition: opal_datatype_internal.h:166
size_t unused
not used right now
Definition: opal_datatype_internal.h:170
uint32_t items
number of items in the loop
Definition: opal_datatype_internal.h:169
Definition: opal_datatype_internal.h:148
ddt_elem_id_description common
basic data description and flags
Definition: opal_datatype_internal.h:158
uint16_t type
the basic data type id
Definition: opal_datatype_internal.h:150
uint32_t count
number of blocks
Definition: opal_datatype_internal.h:159
OPAL_DECLSPEC void opal_output(int output_id, const char *format,...) __opal_attribute_format__(__printf__
Main function to send output to a stream.
size_t size
real size of the data in the loop
Definition: opal_datatype_internal.h:179
uint32_t blocklen
number of elements on each block
Definition: opal_datatype_internal.h:160
OPAL_PTRDIFF_TYPE extent
extent of the whole loop
Definition: opal_datatype_internal.h:171
Definition: opal_datatype.h:103
uint32_t items
number of elements
Definition: opal_datatype_internal.h:177
ddt_elem_id_description common
basic data description and flags
Definition: opal_datatype_internal.h:167
uint16_t flags
flags for the record
Definition: opal_datatype_internal.h:149
ddt_elem_id_description common
basic data description and flags
Definition: opal_datatype_internal.h:176
Definition: opal_datatype_internal.h:157
uint32_t unused
not used right now
Definition: opal_datatype_internal.h:178
OPAL_PTRDIFF_TYPE disp
displacement of the first block
Definition: opal_datatype_internal.h:162