2010-07-25 71 views
18

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

如何定義它?

如何使用scanf/printf來讀寫它?

+0

如何打印:http://stackoverflow.com/questions/11656241/how-to-print-uint128-t-number-using-gcc – 2015-05-19 15:25:42

+0

哪些版本的GCC支持它:http://stackoverflow.com/questions/3329541/does-gcc-support-128-bit-int-on-amd64 – 2015-10-27 04:53:09

回答

17

GCC支持在64位平臺上內置__int128_t__uint128_t類型,但它看起來像128位整數的格式支持在libc中較少見。

+2

更新版本的類型是'__int128'和'unsigned __int128'。 – 2013-11-26 04:33:51

11
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位支持然後使用典型的大int模式使用兩條指令進行操作,例如ADD和ADC(加上進位)

+0

硬件支持是否存在? – 2015-10-27 04:53:44