aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-02-06 13:31:36 +0000
committerJonathan Wakely <jwakely@redhat.com>2020-02-07 14:09:03 +0000
commit0d57370c9cc3c1fb68be96b8cc15b92496c4dd21 (patch)
treeb30d5474e4cbbf0241e2178fee75a909338e8777 /gcc
parent82aee6dd61e2a5b4e4b124f896c8403169688f41 (diff)
downloadgcc-0d57370c9cc3c1fb68be96b8cc15b92496c4dd21.zip
gcc-0d57370c9cc3c1fb68be96b8cc15b92496c4dd21.tar.gz
gcc-0d57370c9cc3c1fb68be96b8cc15b92496c4dd21.tar.bz2
libstdc++: Optimize C++20 comparison category types
This reduces the size and alignment of all three comparison category types to a single byte. The partial_ordering::_M_is_ordered flag is replaced by the value 0x02 in the _M_value member. This also optimizes conversion and comparison operators to avoid conditional branches where possible, by comparing _M_value to constants or using bitwise operations to correctly handle the unordered state. * libsupc++/compare (__cmp_cat::type): Define typedef for underlying type of enumerations and comparison category types. (__cmp_cat::_Ord, __cmp_cat::_Ncmp): Add underlying type. (__cmp_cat::_Ncmp::unordered): Change value to 2. (partial_ordering::_M_value, weak_ordering::_M_value) (strong_ordering::_M_value): Change type to __cmp_cat::type. (partial_ordering::_M_is_ordered): Remove data member. (partial_ordering): Use second bit of _M_value for unordered. Adjust comparison operators. (weak_ordering::operator partial_ordering): Simplify to remove branches. (operator<=>(unspecified, weak_ordering)): Likewise. (strong_ordering::operator partial_ordering): Likewise. (strong_ordering::operator weak_ordering): Likewise. (operator<=>(unspecified, strong_ordering)): Likewise. * testsuite/18_support/comparisons/categories/partialord.cc: New test. * testsuite/18_support/comparisons/categories/strongord.cc: New test. * testsuite/18_support/comparisons/categories/weakord.cc: New test.
Diffstat (limited to 'gcc')
0 files changed, 0 insertions, 0 deletions