Pregunta

¿Gcc admite int de 128 bits en amd64?

¿Cómo definirlo?

¿Cómo utilizar scanf/printf para leerlo/escribirlo?

¿Fue útil?

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)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top