179
179
} \
180
180
}
181
181
182
- #define OPAL_DATATYPE_PACK_PREDEFINED_ELEMENT (src_base , dest_base , count , stride , blocklen , type ) \
182
+ #define OPAL_DATATYPE_PACK_PREDEFINED_ELEMENT (src_base , dest_base , count , blocklen , type , align ) \
183
183
{ \
184
+ register unsigned long i = count; \
185
+ if (((uintptr_t) src_base) % (align) || \
186
+ ((uintptr_t) dest_base) % (align) || \
187
+ (elem->extent % (align) && cando_count > blocklen)) { \
188
+ return OPAL_ERROR; \
189
+ } \
184
190
type *_src = (type *) src_base; \
185
191
type *_dest = (type *) dest_base; \
186
- register unsigned long i = count; \
192
+ size_t stride = elem->extent / sizeof(type); \
187
193
if (blocklen == 1) { \
188
194
OPAL_DATATYPE_PACK_PREDEFINED_BLOCKLEN_ONE(stride, blocklen); \
189
195
} else if (blocklen == 2) { \
206
212
dest_base = (unsigned char *) _dest; \
207
213
}
208
214
209
- #define OPAL_DATATYPE_UNPACK_PREDEFINED_ELEMENT (src_base , dest_base , count , stride , blocklen , \
210
- type ) \
215
+ #define OPAL_DATATYPE_UNPACK_PREDEFINED_ELEMENT (src_base , dest_base , count , blocklen , \
216
+ type , align ) \
211
217
{ \
218
+ if (((uintptr_t) src_base) % (align) || \
219
+ ((uintptr_t) dest_base) % (align) || \
220
+ (elem->extent % (align) && cando_count > blocklen)) { \
221
+ return OPAL_ERROR; \
222
+ } \
212
223
type *_src = (type *) src_base; \
213
224
type *_dest = (type *) dest_base; \
225
+ /* elem's extent but in terms of count rather than bytes */ \
226
+ size_t stride = elem -> extent / sizeof (type ); \
214
227
register unsigned long i = count ; \
215
228
/* (reversing the meanings of blocklen and stride and using the "PACK" macro) */ \
216
229
if (blocklen == 1 ) { \
@@ -240,24 +253,15 @@ static inline int opal_datatype_unpack_predefined_element(unsigned char **rtn_sr
240
253
size_t cando_count ,
241
254
const ddt_elem_desc_t * elem )
242
255
{
243
- size_t stride ; // elem's extent but in terms of count rather than bytes
244
256
size_t blocklen ;
245
257
int id ;
246
- int align ;
247
258
248
259
id = elem -> common .type ;
249
260
blocklen = elem -> blocklen ;
250
- stride = elem -> extent / opal_datatype_basicDatatypes [id ]-> size ;
251
- align = opal_datatype_basicDatatypes [id ]-> align ;
252
261
253
262
unsigned char * src = * rtn_src ;
254
263
unsigned char * dest = * rtn_dest ;
255
264
256
- if ((uintptr_t ) src % align || (uintptr_t ) dest % align
257
- || (elem -> extent % align && cando_count > blocklen )) {
258
- return OPAL_ERROR ;
259
- }
260
-
261
265
/*
262
266
* Here as an example of how we want to call our macro, if the incoming id
263
267
* were OPAL_DATATYPE_INT4, we want
@@ -279,9 +283,9 @@ static inline int opal_datatype_unpack_predefined_element(unsigned char **rtn_sr
279
283
OPAL_DATATYPE_MYUNPACK_NOTAVAIL, 0); \
280
284
} while (0)
281
285
282
- #define OPAL_DATATYPE_MYUNPACK_AVAILABLE (TYPE , unused_ALIGN , NAME , unused ) \
286
+ #define OPAL_DATATYPE_MYUNPACK_AVAILABLE (TYPE , ALIGN , NAME , unused ) \
283
287
do { \
284
- OPAL_DATATYPE_UNPACK_PREDEFINED_ELEMENT(src, dest, cando_count, stride, blocklen, TYPE); \
288
+ OPAL_DATATYPE_UNPACK_PREDEFINED_ELEMENT(src, dest, cando_count, blocklen, TYPE, ALIGN); \
285
289
success = true; \
286
290
} while (0)
287
291
@@ -375,34 +379,25 @@ static inline int opal_datatype_pack_predefined_element(unsigned char **rtn_src,
375
379
size_t cando_count ,
376
380
const ddt_elem_desc_t * elem )
377
381
{
378
- size_t stride ; // elem's extent but in terms of count rather than bytes
379
382
size_t blocklen ;
380
383
int id ;
381
- int align ;
382
384
383
385
id = elem -> common .type ;
384
386
blocklen = elem -> blocklen ;
385
- stride = elem -> extent / opal_datatype_basicDatatypes [id ]-> size ;
386
- align = opal_datatype_basicDatatypes [id ]-> align ;
387
387
388
388
unsigned char * src = * rtn_src ;
389
389
unsigned char * dest = * rtn_dest ;
390
390
391
- if ((uintptr_t ) src % align || (uintptr_t ) dest % align
392
- || (elem -> extent % align && cando_count > blocklen )) {
393
- return OPAL_ERROR ;
394
- }
395
-
396
391
#define OPAL_DATATYPE_MYPACK (NAME ) \
397
392
do { \
398
393
OPAL_DATATYPE_HANDLE_##NAME(OPAL_DATATYPE_MYPACK_AVAILABLE, OPAL_DATATYPE_MYPACK_NOTAVAIL, \
399
394
0); \
400
395
} while (0)
401
396
402
- #define OPAL_DATATYPE_MYPACK_AVAILABLE (TYPE , unused_ALIGN , NAME , unused ) \
403
- do { \
404
- OPAL_DATATYPE_PACK_PREDEFINED_ELEMENT(src, dest, cando_count, stride, blocklen, TYPE); \
405
- success = true; \
397
+ #define OPAL_DATATYPE_MYPACK_AVAILABLE (TYPE , ALIGN , NAME , unused ) \
398
+ do { \
399
+ OPAL_DATATYPE_PACK_PREDEFINED_ELEMENT(src, dest, cando_count, blocklen, TYPE, ALIGN ); \
400
+ success = true; \
406
401
} while (0)
407
402
408
403
#define OPAL_DATATYPE_MYPACK_NOTAVAIL (NAME , unused ) \
0 commit comments