medicina flag compilador gcc

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)