时间:2010-07-25 14:26:57

标签: c gcc 128-bit extended-precision

2 个答案:

答案 0 :(得分:21)

答案 1 :(得分:13)

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

保存到test.c并使用以下命令编译:

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

你得到:

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

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

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

正如您所看到的那样,通过保持两个64位顺序然后使用两个指令的典型大整数模式对它们进行操作来支持__int128类型,例如ADD然后ADC(随附加载) )