Question

Gcc prend-il en charge les entiers 128 bits sur AMD64 ?

Comment le définir ?

Comment utiliser scanf/printf pour le lire/écrire ?

Était-ce utile?

La solution

CCG prend en charge intégré __int128 et unsigned __int128 types (sur les plates-formes 64 bits uniquement), mais il semble que la prise en charge du formatage des entiers 128 bits soit moins courante dans la libc.

Note: <stdint.h> définit __int128_t et __uint128_t sur les versions antérieures à gcc4.6.Voir également Existe-t-il un entier de 128 bits dans gcc ? pour un tableau des versions gcc/clang/ICC.

Comment savoir si __uint128_t est défini pour détecter __int128

Autres conseils

void f(__int128* res, __int128* op1, __int128* op2)
{
    *res = *op1 + *op2;
}

Enregistrer dans Test.c et compiler avec:

$ gcc -c -O3 test.c
$ objdump -d -M intel test.o

vous obtenez:

mov    rcx, rdx
mov    rax, [rsi]
mov    rdx, [rsi+0x8]

add    rax, [rcx]
adc    rdx, [rcx+0x8]

mov    [rdi], rax
mov    [rdi+0x8], rdx

Comme vous pouvez le constater que le type __int128 est pris en charge en maintenant deux 64 bits de séquence, puis en leur fonctionnant avec le grand motif Int typique de l'utilisation de deux instructions, par exemple Ajouter, puis ADC (Ajouter avec le transport)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top