gcc 在 amd64 上支持 128 位 int 吗?

如何定义呢?

如何使用scanf/printf来读/写它?

有帮助吗?

解决方案

海湾合作委员会 支持内置 __int128unsigned __int128 类型(仅在 64 位平台上),但看起来对 128 位整数的格式化支持在 libc 中不太常见。

笔记: <stdint.h> 定义 __int128_t__uint128_t 在 gcc4.6 之前的版本上。也可以看看 gcc中有128位整数吗? 查看 gcc/clang/ICC 版本表。

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

其他提示

void f(__int128* res, __int128* op1, __int128* op2)
{
    *res = *op1 + *op2;
}
.

保存到test.c和编译:

$ gcc -c -O3 test.c
$ objdump -d -M intel test.o
.

你得到:

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

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

mov    [rdi], rax
mov    [rdi+0x8], rdx
.

如您所见,通过按顺序保持两个64位,然后使用两个指令的典型BIG INT模式对其进行支持来支持__int128类型,例如添加,然后添加到ADC(添加携带)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top