【发布时间】:2016-09-04 17:56:52
【问题描述】:
是否存在用于 ARM C 编译器进行加法运算的内在函数,或者是否有必要使用汇编语言?
在 x86 上,有 _addcarry_u64 用于 add-with-carry。 (还有用于特殊用途的较新的_addcarryx_u64。)
【问题讨论】:
-
编译器通常在带有
adc的32 位机器上实现int64_t,所以你可以转换成那个。 64 位平台上的 GNU C (gcc / clang) 通常支持__int128_t。 -
Aarch64 有一个 gcc 5.2 使用的 adc 指令。 (
adds/adc添加两个__int128_t参数),但 Aarch64 gcc 4.8 使用 cmov-and-incrementcsincinstruction。见the output on godbolt。 IDK 为什么 aarch64 gcc 4.8 不能只使用adc。 -
我没有看到用于 add-with-carry 的 gcc
__builtin函数 :( -
请注意,无论您尝试做什么都需要这样做,您同样需要另一个内在函数来首先设置进位标志。我很确定两者都不存在。
-
对于 GCC 和 Clang stackoverflow.com/questions/33690791/…,x86 的情况并没有好转
标签: arm intrinsics