[libc-commits] [libc] [libc] Make add_with_carry and sub_with_borrow constexpr. (PR #81898)

via libc-commits libc-commits at lists.llvm.org
Thu Feb 15 10:51:12 PST 2024


================
@@ -69,48 +67,68 @@ add_with_carry(T a, T b, T carry_in) {
 // https://clang.llvm.org/docs/LanguageExtensions.html#multiprecision-arithmetic-builtins
 
 template <>
-LIBC_INLINE SumCarry<unsigned char>
+LIBC_INLINE constexpr SumCarry<unsigned char>
 add_with_carry<unsigned char>(unsigned char a, unsigned char b,
                               unsigned char carry_in) {
-  SumCarry<unsigned char> result{0, 0};
-  result.sum = __builtin_addcb(a, b, carry_in, &result.carry);
-  return result;
+  if (__builtin_is_constant_evaluated()) {
----------------
lntue wrote:

I've checked on godbolt, and seems like it works fine on clang 9.0+ and gcc 11+ in all x86-64, arm32, and riscv-32 

https://github.com/llvm/llvm-project/pull/81898


More information about the libc-commits mailing list