¿Es compatible gcc de 128 bits int en amd64?¿Es compatible gcc con int de 128 bits en amd64?
¿Cómo definirlo?
¿Cómo usar scanf/printf para leerlo/escribirlo?
¿Es compatible gcc de 128 bits int en amd64?¿Es compatible gcc con int de 128 bits en amd64?
¿Cómo definirlo?
¿Cómo usar scanf/printf para leerlo/escribirlo?
GCC admite tipos incorporados __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.
Los tipos en las versiones más recientes son '__int128' y' unsigned __int128'. –
void f(__int128* res, __int128* op1, __int128* op2)
{
*res = *op1 + *op2;
}
Guardar para TEST.C y compilar con:
$ gcc -c -O3 test.c
$ objdump -d -M intel test.o
Se 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 se puede ver el tipo __int128
es apoyado por mantener dos 64-bits en la secuencia y luego operar en ellos con el típico patrón int grande de usar dos instrucciones, por ejemplo ADD y luego ADC (agregar con llevar)
¿Existe soporte de hardware en absoluto? –
Cómo imprimir en: http://stackoverflow.com/questions/11656241/how-to-print-uint128-t-number-using-gcc –
Qué versiones de GCC lo admiten: http://stackoverflow.com/questions/3329541/does-gcc-support-128-bit-int-on-amd64 –