是否存在ARM C编译器的内在函数来执行add-with-carry操作,或者是否需要使用汇编语言?
在x86上,_addcarry_u64
用于附加携带。 (出于特殊目的,还有较新的_addcarryx_u64
。)
答案 0 :(得分:6)
当前版本的gcc没有内在功能。一个问题是'进位标志'的通信。但是,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和GNU MP个库没有任何研究。由于内在不存在,一个更确定的答案(对于你的工作)取决于你想要实现的目标;素数因子,乘法,加法等。您总是可以使用汇编程序或更强大地使用为您的特定整数长度生成汇编程序的脚本。