在 C 中是否有用于 add-with-carry 的 ARM 内在函数?

Are there ARM intrinsics for add-with-carry in C?

ARM C 编译器是否存在内部函数来进行加进位操作,还是必须使用汇编语言?

在 x86 上,_addcarry_u64 用于 add-with-carry。 (还有用于特殊用途的较新的 _addcarryx_u64。)

当前版本的 gcc 没有内在函数。一个问题是 'carry flag' 的通信。但是,ARM 后端确实知道并定义了一组 ADC 原语,例如 addsi3_carryin

对于example,

unsigned long long big_inc(unsigned long long x)
{
  return ++x;
}

翻译成,

big_inc(unsigned long long):
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        @ link register save eliminated.
        adds    r0, r0, #1
        adc     r1, r1, #0
        bx      lr

当你有这样的问题时,看看开源的多精度库总是有启发性的。有 OpenSSL bignum and GNU MP 个图书馆没有任何研究。由于内在不存在更明确的答案(对于您的工作)取决于您想要实现的目标;质因数、乘法、加法等。您始终可以使用汇编程序,或者更强大地使用为您的特定整数长度生成汇编程序的脚本。