2010-07-25 5 views
18

Czy gcc obsługuje 128-bitowy int na amd64?Czy gcc obsługuje 128-bitowy int na amd64?

Jak to zdefiniować?

Jak używać scanf/printf do odczytu/zapisu?

+0

Jak wydrukować na: http://stackoverflow.com/questions/11656241/how-to-print-uint128-t-number-using-gcc –

+0

Które wersje GCC obsługują to: http://stackoverflow.com/questions/3329541/does-gcc-support-128-bit-int-on-amd64 –

Odpowiedz

17

GCC obsługuje typy wbudowane __int128_t i __uint128_t na platformach 64-bitowych, ale wygląda na to, że obsługa formatowania 128-bitowych liczb całkowitych jest mniej powszechna w bibliotece libc.

+2

Typy nowszych wersji to '__int128' i' unsigned __int128'. –

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

Zapisz test.c i skompilować z:

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

Otrzymasz:

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

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

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

Jak widać typ __int128 jest obsługiwany przez utrzymywanie dwóch 64-bitów w sekwencji a następnie działając na nich z typowym dużym wzorcem int używania dwóch instrukcji, na przykład ADD, a następnie ADC (dodaj z przenoszeniem)

+0

Czy w ogóle istnieje wsparcie sprzętowe? –