Soluzione
GCC supporta i tipi generacodicitagcode integrati e __int128
(su 64-Solo piattaforme bit), ma sembra che il supporto di formattazione per numeri interi a 128 bit sia meno comune in libc.
Nota: unsigned __int128
Definisce <stdint.h>
e __int128_t
su versioni prima di GCC4.6.Vedi anche C'è un numero intero a 128 bit in GCC? per una tabella di versioni GCC / Clang / ICC.
Come sapere se __uint128_t è definito per il rilevamento__uint128_t
Altri suggerimenti
void f(__int128* res, __int128* op1, __int128* op2)
{
*res = *op1 + *op2;
}
.
Salva su Test.C e compilare con:
$ gcc -c -O3 test.c
$ objdump -d -M intel test.o
.
ottieni:
mov rcx, rdx
mov rax, [rsi]
mov rdx, [rsi+0x8]
add rax, [rcx]
adc rdx, [rcx+0x8]
mov [rdi], rax
mov [rdi+0x8], rdx
.
Come puoi vedere il tipo __int128
è supportato mantenendo due 64 bit in sequenza e quindi operando su di essi con il tipico modello Int Int dell'uso di due istruzioni, ad esempio aggiungere e quindi ADC (aggiungi con il trasporto)