--- old/src/share/vm/utilities/copy.hpp 2017-04-11 14:40:08.418096587 -0700 +++ new/src/share/vm/utilities/copy.hpp 2017-04-11 14:40:08.254093617 -0700 @@ -229,6 +229,16 @@ } /** + * Copy elements + * + * @param src address of source + * @param dst address of destination + * @param byte_count number of bytes to copy + * @param elem_size size of the elements to copy-swap + */ + static void conjoint_copy(const void* src, void* dst, size_t byte_count, size_t elem_size); + + /** * Copy and *unconditionally* byte swap elements * * @param src address of source @@ -236,7 +246,24 @@ * @param byte_count number of bytes to copy * @param elem_size size of the elements to copy-swap */ - static void conjoint_swap(address src, address dst, size_t byte_count, size_t elem_size); + static void conjoint_swap(const void* src, void* dst, size_t byte_count, size_t elem_size); + + /** + * Copy and byte swap elements from the specified endian to the native (cpu) endian if needed (if they differ) + * + * @param src address of source + * @param dst address of destination + * @param byte_count number of bytes to copy + * @param elem_size size of the elements to copy-swap + */ + template + static void conjoint_swap_maybe(const void* src, void* dst, size_t byte_count, size_t elem_size) { + if (Endian::NATIVE != endian) { + conjoint_swap(src, dst, byte_count, elem_size); + } else { + conjoint_copy(src, dst, byte_count, elem_size); + } + } // Fill methods