Подтвердить что ты не робот

Поддерживает ли gcc 128-битный int на amd64?

Поддерживает ли gcc 128-битный int на amd64?

Как определить его?

Как использовать scanf/printf для чтения/записи?

4b9b3361

Ответ 1

GCC поддерживает встроенные типы __int128 и __uint128 на 64-разрядных платформах, но похоже, что поддержка форматирования для 128-битных целых чисел менее распространено в libc.

Примечание: перед версией 4.6.0 они были названы __int128_t и __uint128_t.

Ответ 2

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 (add with carry)