flag - ¿GCC es compatible con int de 128 bits en amd64?
gcc wikipedia (2)
¿GCC es compatible con int de 128 bits en amd64?
Cómo definirlo?
¿Cómo usar scanf / printf para leerlo / escribirlo?
GCC admite los tipos __uint128_t
__int128_t
y __uint128_t
en plataformas de 64 bits, pero parece que el soporte de formato para enteros de 128 bits es menos común en libc.
void f(__int128* res, __int128* op1, __int128* op2)
{
*res = *op1 + *op2;
}
Guárdelo en test.c y compile con:
$ gcc -c -O3 test.c
$ objdump -d -M intel test.o
Usted obtiene:
mov rcx, rdx
mov rax, [rsi]
mov rdx, [rsi+0x8]
add rax, [rcx]
adc rdx, [rcx+0x8]
mov [rdi], rax
mov [rdi+0x8], rdx
Como puede ver, el tipo __int128
es compatible manteniendo dos secuencias de 64 bits y luego operando en ellas con el típico patrón int grande de usar dos instrucciones, por ejemplo, ADD y luego ADC (agregar con acarreo)