diff --git a/thirdparty/ffs/ffs/CMakeLists.txt b/thirdparty/ffs/ffs/CMakeLists.txt index 435def03ce..d4a96a674f 100644 --- a/thirdparty/ffs/ffs/CMakeLists.txt +++ b/thirdparty/ffs/ffs/CMakeLists.txt @@ -178,7 +178,7 @@ option(FFS_USE_DILL "Enable Dill code generation" ON) if(FFS_USE_DILL) find_package(dill 2.3.1 REQUIRED) set(HAVE_DILL_H ON) - set(FFS_CONVERSION_GENERATION_DEFAULT 0) + set(FFS_CONVERSION_GENERATION_DEFAULT ${DILL_HAS_NATIVE_DCG}) set(DO_DCG TRUE) target_link_libraries(ffs PRIVATE dill::dill) list(APPEND _pkg_config_private_reqs "dill >= ${dill_VERSION}") diff --git a/thirdparty/ffs/ffs/ffs/ffs_conv.c b/thirdparty/ffs/ffs/ffs/ffs_conv.c index 8b20c38e6f..d1ea2e0d0b 100755 --- a/thirdparty/ffs/ffs/ffs/ffs_conv.c +++ b/thirdparty/ffs/ffs/ffs/ffs_conv.c @@ -1531,6 +1531,18 @@ new_convert_field(char *src_field_addr, char *dest_field_addr, if (conv->iovar->type_desc.type == FMType_pointer) { array_of_pointers = (conv->iovar->type_desc.next->next->type == FMType_pointer); } + /* changes here */ + if (data_already_copied && + !conv->src_field.byte_swap && + (conv->src_field.src_float_format == conv->src_field.target_float_format) && + (conv->src_field.size == conv->dest_size) && + (conv->subconversion == NULL) && + (next->type != FMType_pointer) && + (next->type != FMType_string) && + ((conv->src_field.data_type != string_type))) { + /* Nothing but data movement required */ + break; + } for (i=0; i< elements ; i++) { new_convert_field(new_src, new_dest, conv_status, conv, next, data_already_copied);