Вопрос

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

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

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

Это было полезно?

Решение

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

Примечание: <stdint.h> определяет __int128_t и __uint128_t в версиях до gcc4.6.Смотрите также Есть ли 128-битное целое число в gcc? для таблицы версий gcc/clang/ICC.

Как узнать, определен ли __uint128_t для обнаружения __int128

Другие советы

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 битами в последовательности, а затем работая на них с типичным рисунком Big INT с использованием двух инструкций, например Add Add Add ADC (Add с Carse)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top