• Marko Mäkelä's avatar
    MDEV-21981 Replace arithmetic + with bitwise OR when possible · a66eebf5
    Marko Mäkelä authored
    Several macros such as sint2korr() and uint4korr() are using the
    arithmetic + operator while a bitwise or operator would suffice.
    
    GCC 5 and clang 5 and later can detect patterns consisting of
    bitwise or and shifts by multiples of 8 bits, such as those used
    in the InnoDB function mach_read_from_4(). They actually translate
    that verbose low-level code into high-level machine language
    (i486 bswap instruction or fused into the Haswell movbe instruction).
    
    We should do the same for MariaDB Server code that is outside InnoDB.
    
    Note: The Microsoft C compiler is lacking this optimization.
    There, we might consider using _byteswap_ushort(), _byteswap_ulong(),
    _byteswap_uint64(). But, those would lead to unaligned reads, which are
    bad for reasons stated in MDEV-20277. Besides, outside InnoDB,
    most data is already being stored in the native little-endian format
    of that compiler.
    a66eebf5
byte_order_generic.h 5.12 KB