Поддерживает ли gcc 128-битный int на amd64?[дубликат]
-
29-09-2020 - |
Вопрос
Поддерживает ли 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)