aboutsummaryrefslogtreecommitdiff
path: root/sys/sys/ata.h
diff options
context:
space:
mode:
authorAlex Richardson <arichardson@FreeBSD.org>2021-02-03 15:27:17 +0000
committerAlex Richardson <arichardson@FreeBSD.org>2021-02-03 16:02:54 +0000
commit8fa6abb6f4f64f4f23e2920e2aea7996566851a4 (patch)
tree5b452808841a951012e806113d513b60b2773b5c /sys/sys/ata.h
parent7791ecf04b48a0c365b003447f479ec890115dfc (diff)
downloadsrc-8fa6abb6f4f64f4f23e2920e2aea7996566851a4.tar.gz
src-8fa6abb6f4f64f4f23e2920e2aea7996566851a4.zip
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
Diffstat (limited to 'sys/sys/ata.h')
0 files changed, 0 insertions, 0 deletions