//
// __builtin_assume_aligned is support by GCC >= 4.7 and clang >= 3.6.
#ifdef HAVE___BUILTIN_ASSUME_ALIGNED
-# define tuklib_memcpy_aligned(dest, src, size) \
- memcpy(dest, __builtin_assume_aligned(src, size), size)
+# define tuklib_assume_aligned(ptr, align) \
+ __builtin_assume_aligned(ptr, align)
#else
-# define tuklib_memcpy_aligned(dest, src, size) \
- memcpy(dest, src, size)
+# define tuklib_assume_aligned(ptr, align) (ptr)
# ifndef TUKLIB_FAST_UNALIGNED_ACCESS
# define TUKLIB_USE_UNSAFE_ALIGNED_READS 1
# endif
return *(const uint16_t *)buf;
#else
uint16_t num;
- tuklib_memcpy_aligned(&num, buf, sizeof(num));
+ memcpy(&num, tuklib_assume_aligned(buf, sizeof(num)), sizeof(num));
return num;
#endif
}
return *(const uint32_t *)buf;
#else
uint32_t num;
- tuklib_memcpy_aligned(&num, buf, sizeof(num));
+ memcpy(&num, tuklib_assume_aligned(buf, sizeof(num)), sizeof(num));
return num;
#endif
}
return *(const uint64_t *)buf;
#else
uint64_t num;
- tuklib_memcpy_aligned(&num, buf, sizeof(num));
+ memcpy(&num, tuklib_assume_aligned(buf, sizeof(num)), sizeof(num));
return num;
#endif
}
#ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
*(uint16_t *)buf = num;
#else
- tuklib_memcpy_aligned(buf, &num, sizeof(num));
+ memcpy(tuklib_assume_aligned(buf, sizeof(num)), &num, sizeof(num));
#endif
return;
}
#ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
*(uint32_t *)buf = num;
#else
- tuklib_memcpy_aligned(buf, &num, sizeof(num));
+ memcpy(tuklib_assume_aligned(buf, sizeof(num)), &num, sizeof(num));
#endif
return;
}
#ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
*(uint64_t *)buf = num;
#else
- tuklib_memcpy_aligned(buf, &num, sizeof(num));
+ memcpy(tuklib_assume_aligned(buf, sizeof(num)), &num, sizeof(num));
#endif
return;
}