-
Type:
Bug
-
Status: Closed (View Workflow)
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 5.5, 10.1, 10.2, 10.3, 10.4, 10.5, 10.0
-
Component/s: Server, Storage Engine - Aria, Storage Engine - MyISAM
-
Labels:
Several macros such as sint2korr() and uint4korr() are using the arithmetic + operator while a bitwise or operator would suffice.
GCC 5 and later, as well as 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 fuse it 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 be unaligned reads, which are bad for reasons stated in MDEV-20277, and besides, outside InnoDB, most data is already being stored in the native little-endian format of that compiler.
- relates to
-
MDEV-20277 Disable -fno-strict-aliasing
-
- Open
-