gcc在amd64上支持128位整数吗?

24

gcc是否支持在amd64上的128位整数?

如何定义它?

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


如何使用GCC打印uint128_t数字:https://dev59.com/6mgu5IYBdhLWcg3wAiYi - Ciro Santilli OurBigBook.com
哪些版本的GCC支持它:https://dev59.com/CXA75IYBdhLWcg3wYH7I - Ciro Santilli OurBigBook.com
2个回答

23

GCC支持内置的__int128unsigned __int128类型(仅限于64位平台),但是libc中对于128位整数的格式化支持似乎不太普遍。

注意:<stdint.h>在gcc4.6之前的版本中定义了__int128_t__uint128_t。有关gcc / clang / ICC版本表格,请参见Is there a 128 bit integer in gcc?

如何检测定义了__uint128_t以检测__int128


7
较新版本中的类型为 __int128unsigned __int128 - J.N.

15
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

正如您所看到的,__int128类型是通过将两个64位按顺序保持在一起,然后使用典型的大整数模式(例如ADD和ADC(带进位加))对它们进行操作来支持的。


1
硬件支持是否存在? - Ciro Santilli OurBigBook.com

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接