¿Gcc admite int de 128 bits en amd64?[duplicar]
-
29-09-2020 - |
Pregunta
¿Gcc admite int de 128 bits en amd64?
¿Cómo definirlo?
¿Cómo utilizar scanf/printf para leerlo/escribirlo?
Solución
CCG soporta incorporado __int128
y unsigned __int128
tipos (solo en plataformas de 64 bits), pero parece que el soporte de formato para enteros de 128 bits es menos común en libc.
Nota: <stdint.h>
define __int128_t
y __uint128_t
en versiones anteriores a gcc4.6.Ver también ¿Existe un número entero de 128 bits en gcc? para obtener una tabla de versiones de gcc/clang/ICC.
Cómo saber si __uint128_t está definido para detectar __int128
Otros consejos
void f(__int128* res, __int128* op1, __int128* op2)
{
*res = *op1 + *op2;
}
Guárdelo en test.c y compílelo 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 puedes ver el __int128
El tipo se admite manteniendo dos 64 bits en secuencia y luego operando en ellos con el típico patrón big int de usar dos instrucciones, por ejemplo ADD y luego ADC (agregar con acarreo)