23

gccはamd64で128ビットintをサポートしていますか?

それを定義する方法は?

scanf / printfを使用して読み取り/書き込みを行う方法は?

4

2 に答える 2

23

GCCは組み込み__int128unsigned __int128型(64ビットプラットフォームのみ)をサポートしていますが、128ビット整数のフォーマットサポートはlibcではあまり一般的ではないようです。

注:gcc4.6より前のバージョンで<stdint.h>定義__int128_tします。gccに128ビット整数はありますか?__uint128_tも参照してください。gcc / clang/ICCバージョンのテーブル。

__uint128_tが検出用に定義されているかどうかを知る方法__int128

于 2010-07-25T14:49:46.917 に答える
15
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

ご覧のとおり、この__int128タイプは、2つの64ビットを順番に保持し、ADD、次にADC(キャリー付きで追加)などの2つの命令を使用する典型的なbigintパターンで操作することでサポートされます。

于 2013-12-01T07:04:17.780 に答える