Commit 2faa141b for xz

commit 2faa141bdb47be94da2eae6df6f08858999a5911
Author: Lasse Collin <lasse.collin@tukaani.org>
Date:   Mon Mar 23 23:43:56 2026 +0200

    tuklib_integer: Fix inefficient aligned_writeXXne

    The __builtin_assume_aligned was applied to the wrong argument which
    made aligned writes worse on strict-align archs.

    Aligned writes aren't used in liblzma, so this bug didn't matter in
    this package; tuklib_integer.h is meant to be usable elsewhere too.

diff --git a/src/common/tuklib_integer.h b/src/common/tuklib_integer.h
index 4026249e..bbb695db 100644
--- a/src/common/tuklib_integer.h
+++ b/src/common/tuklib_integer.h
@@ -643,11 +643,10 @@ write64le(uint8_t *buf, uint64_t num)
 //
 // __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
@@ -662,7 +661,7 @@ aligned_read16ne(const uint8_t *buf)
 	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
 }
@@ -676,7 +675,7 @@ aligned_read32ne(const uint8_t *buf)
 	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
 }
@@ -690,7 +689,7 @@ aligned_read64ne(const uint8_t *buf)
 	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
 }
@@ -702,7 +701,7 @@ aligned_write16ne(uint8_t *buf, uint16_t num)
 #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;
 }
@@ -714,7 +713,7 @@ aligned_write32ne(uint8_t *buf, uint32_t num)
 #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;
 }
@@ -726,7 +725,7 @@ aligned_write64ne(uint8_t *buf, uint64_t num)
 #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;
 }