2010-07-25 18 views
18

¿Es compatible gcc de 128 bits int en amd64?¿Es compatible gcc con int de 128 bits en amd64?

¿Cómo definirlo?

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

+0

Cómo imprimir en: http://stackoverflow.com/questions/11656241/how-to-print-uint128-t-number-using-gcc –

+0

Qué versiones de GCC lo admiten: http://stackoverflow.com/questions/3329541/does-gcc-support-128-bit-int-on-amd64 –

Respuesta

17

GCC admite tipos incorporados __int128_t y __uint128_t en plataformas de 64 bits, pero parece que el soporte de formato para enteros de 128 bits es menos común en libc.

+2

Los tipos en las versiones más recientes son '__int128' y' unsigned __int128'. –

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

Guardar para TEST.C y compilar con:

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

Se 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 se puede ver el tipo __int128 es apoyado por mantener dos 64-bits en la secuencia y luego operar en ellos con el típico patrón int grande de usar dos instrucciones, por ejemplo ADD y luego ADC (agregar con llevar)

+0

¿Existe soporte de hardware en absoluto? –

Cuestiones relacionadas