diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-03-19 07:52:35 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-03-19 15:09:13 +0200 |
commit | a66eebf57c212363f9f430a4c8c9a4f3ddf57cfb (patch) | |
tree | 0c7e48ae2bed8f3dbba1b43eee786f045f4ee2cd /libmysqld | |
parent | 6960e9ed24dbdab587730cdceab1f29bcdd6d52a (diff) | |
download | mariadb-git-a66eebf57c212363f9f430a4c8c9a4f3ddf57cfb.tar.gz |
MDEV-21981 Replace arithmetic + with bitwise OR when possible
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.
Diffstat (limited to 'libmysqld')
0 files changed, 0 insertions, 0 deletions