是否存在ARM C编译器的内在函数来执行随身携带操作,或者是否需要使用汇编语言?
在x86上,有_addcarry_u64for-carry-carry.(_addcarryx_u64特殊目的还有更新的.)
当前版本的gcc没有内在的功能.一个问题是'进位标志'的通信.但是,ARM后端确实知道并定义了一组ADC基元,例如addsi3_carryin.
对于例如,
unsigned long long big_inc(unsigned long long x)
{
return ++x;
}
Run Code Online (Sandbox Code Playgroud)
被翻译成,
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
Run Code Online (Sandbox Code Playgroud)
当您遇到类似问题时,查看开源多精度库总是有益的.有没有任何研究的OpenSSL bignum和GNU MP库.由于内在不存在,一个更明确的答案(对于你的工作)取决于你想要实现的目标; 素数因子,乘法,加法等.您总是可以使用汇编程序或更强大地使用为您的特定整数长度生成汇编程序的脚本.