HardenedBSD/sys
Alex Richardson 8fa6abb6f4 Expose clang's alignment builtins and use them for roundup2/rounddown2
This makes roundup2/rounddown2 type- and const-preserving and allows
using it on pointer types without casting to uintptr_t first. Not
performing pointer-to-integer conversions also helps the compiler's
optimization passes and can therefore result in better code generation.
When using it with integer values there should be no change other than
the compiler checking that the alignment value is a valid power-of-two.

I originally implemented these builtins for CHERI a few years ago and
they have been very useful for CheriBSD. However, they are also useful
for non-CHERI code so I was able to upstream them for Clang 10.0.

Rationale from the clang documentation:
Clang provides builtins to support checking and adjusting alignment
of pointers and integers. These builtins can be used to avoid relying
on implementation-defined behavior of arithmetic on integers derived
from pointers. Additionally, these builtins retain type information
and, unlike bitwise arithmetic, they can perform semantic checking on
the alignment value.

There is also a feature request for GCC, so GCC may also support it in
the future: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98641

Reviewed By:	brooks, jhb, imp
Differential Revision: https://reviews.freebsd.org/D28332
2021-02-03 16:02:54 +00:00
..
amd64
arm
arm64 arm64: Initialize VFP control register. 2021-02-03 16:27:30 +01:00
bsm
cam
cddl
compat
conf
contrib
crypto
ddb
dev Always clamp curve25519 keys prior to use. 2021-02-03 19:05:09 +10:00
dts
fs
gdb
geom
gnu
i386
isa
kern
kgssapi
libkern
mips
modules
net
net80211
netgraph
netinet
netinet6
netipsec
netpfil
netsmb
nfs
nfsclient
nfsserver
nlm
ofed
opencrypto
powerpc
riscv
rpc
security
sys Expose clang's alignment builtins and use them for roundup2/rounddown2 2021-02-03 16:02:54 +00:00
teken
tests
tools
ufs
vm
x86
xdr
xen
Makefile