gcc是否支持amd64上的128位int?

Yic*_*hou 23 c gcc 128-bit extended-precision

gcc是否支持amd64上的128位int?

如何定义?

如何使用scanf/printf进行读/写?

rkh*_*rov 22

GCC支持内置__int128unsigned __int128类型(仅在64位平台上),但看起来对于128位整数的格式化支持在libc中不太常见.

注意:在gcc4.6之前<stdint.h>定义__int128_t__uint128_t版本.另请参阅gcc中是否有128位整数?获取gcc/clang/ICC版本的表格.

如何知道__uint128_t是否被定义用于检测__int128

  • 更新版本的类型是`__int128`和`unsigned __int128`. (7认同)

And*_*zos 14

void f(__int128* res, __int128* op1, __int128* op2)
{
    *res = *op1 + *op2;
}
Run Code Online (Sandbox Code Playgroud)

保存到test.c并编译:

$ gcc -c -O3 test.c
$ objdump -d -M intel test.o
Run Code Online (Sandbox Code Playgroud)

你得到:

mov    rcx, rdx
mov    rax, [rsi]
mov    rdx, [rsi+0x8]

add    rax, [rcx]
adc    rdx, [rcx+0x8]

mov    [rdi], rax
mov    [rdi+0x8], rdx
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样,__int128通过依次保持两个64位然后使用两个指令的典型大整数模式对它们进行操作来支持该类型,例如ADD然后ADC(带进位加)

  • @CiroSantilli六四事件法轮功纳米比亚威视:add和adc就像是2个刻度.像DIV这样的单个指令就像是50个刻度.耸肩. (2认同)