gcc 在 amd64 上支持 128 位 int 吗?[复制]
-
29-09-2020 - |
题
gcc 在 amd64 上支持 128 位 int 吗?
如何定义呢?
如何使用scanf/printf来读/写它?
解决方案
海湾合作委员会 支持内置 __int128
和 unsigned __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(添加携带)
不隶属于 StackOverflow