O gcc suporta int de 128 bits no amd64?[duplicado]
-
29-09-2020 - |
Pergunta
O gcc suporta int de 128 bits no amd64?
Como defini-lo?
Como usar scanf/printf para ler/escrever?
Solução
CCG suporta embutido __int128
e unsigned __int128
tipos (somente em plataformas de 64 bits), mas parece que o suporte à formatação para números inteiros de 128 bits é menos comum na libc.
Observação: <stdint.h>
define __int128_t
e __uint128_t
em versões anteriores ao gcc4.6.Veja também Existe um número inteiro de 128 bits no gcc? para uma tabela de versões do gcc/clang/ICC.
Como saber se __uint128_t está definido para detectar __int128
Outras dicas
void f(__int128* res, __int128* op1, __int128* op2)
{
*res = *op1 + *op2;
}
Salve em test.c e compile com:
$ gcc -c -O3 test.c
$ objdump -d -M intel test.o
Você obtém:
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 você pode ver o __int128
O tipo é suportado mantendo dois 64 bits em sequência e depois operando neles com o típico padrão big int de usar duas instruções, por exemplo ADD e depois ADC (adicionar com transporte)