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?
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?
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.
Typy nowszych wersji to '__int128' i' unsigned __int128'. –
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)
Czy w ogóle istnieje wsparcie sprzętowe? –
Jak wydrukować na: http://stackoverflow.com/questions/11656241/how-to-print-uint128-t-number-using-gcc –
Które wersje GCC obsługują to: http://stackoverflow.com/questions/3329541/does-gcc-support-128-bit-int-on-amd64 –