Domanda

GCC supporta 128 bit INT su AMD64?

Come definirlo?

Come utilizzare Scanf / PrintF per leggere / scrivere?

È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top