bswap.h: remove optimized x86 version of bswap32/64

On x86 the bswap32/64 macro is implemented based on the x86 opcode which performs the required shifting in just one opcode. The other CPUs fallback to the generic shifting as implemented by default_swab32() and default_bswap64() if needed. I've been looking at how good a compiler is at recognizing the default shift and emitting an optimized operation: - x86, arm64 msvc v19.20 default_swab32() optimized default_bswap64() shifts _byteswap_uint64() optimized - x86, arm64 msvc v19.37 default_swab32() optimized default_bswap64() optimized _byteswap_uint64() optimized - arm64, gcc-4.9.4: optimized - x86-64, gcc-4.4.7: shifts - x86-64, gcc-4.5.3: optimized - x86-64, clang-3.0: optimized Given that gcc-4.5 and clang-3.0 are fairly old, any recent compiler should recognize the shift. Remove the optimized x86 version and rely on the compiler. Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sebastian Andrzej Siewior committed Jul 15, 2025 at 21:12 UTC 0132f114efe90fb5f0baf61dbda8a1a33eace929
1 file changed +1 -40
compat/bswap.h
+1 -40
@@ -35,46 +35,7 @@ static inline uint64_t default_bswap64(uint64_t val)
35 #undef bswap32
36 #undef bswap64
37
38 -#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
39 -
40 -#define bswap32 git_bswap32
41 -static inline uint32_t git_bswap32(uint32_t x)
42 -{
43 - uint32_t result;
44 - if (__builtin_constant_p(x))
45 - result = default_swab32(x);
46 - else
47 - __asm__("bswap %0" : "=r" (result) : "0" (x));
48 - return result;
49 -}
50 -
51 -#define bswap64 git_bswap64
52 -#if defined(__x86_64__)
53 -static inline uint64_t git_bswap64(uint64_t x)
54 -{
55 - uint64_t result;
56 - if (__builtin_constant_p(x))
57 - result = default_bswap64(x);
58 - else
59 - __asm__("bswap %q0" : "=r" (result) : "0" (x));
60 - return result;
61 -}
62 -#else
63 -static inline uint64_t git_bswap64(uint64_t x)
64 -{
65 - union { uint64_t i64; uint32_t i32[2]; } tmp, result;
66 - if (__builtin_constant_p(x))
67 - result.i64 = default_bswap64(x);
68 - else {
69 - tmp.i64 = x;
70 - result.i32[0] = git_bswap32(tmp.i32[1]);
71 - result.i32[1] = git_bswap32(tmp.i32[0]);
72 - }
73 - return result.i64;
74 -}
75 -#endif
76 -
77 -#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM64))
38 +#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM64))
39
40 #include <stdlib.h>
41