I tried a couple experiments with __int128 and found some gdb issues.
My test code:
__int128 x = 72;
I compiled with -g -c then ran gdb on the .o.
Printing kind of works, but chooses hex by default and zero-pads:
(gdb) p x
$1 = 0x00000000000000000000000000000048
Specifying decimal still zero-pads, which looks very weird:
(gdb) p/d x
$2 = 00000000000000000000000000000072
Addition doesn't work:
(gdb) p x + 5
That operation is not available on integers of more than 8 bytes.
One super intrusive option would be to use GMP everywhere.
Another possibility would be to redefine LONGEST as __int128
Handling the printing in bug 16225, so maybe this bug could be
for the operations. See some discussion in bug 21185 for how to do that.
Another issue is that c-exp.y has productions for things like
"unsigned long" and "long unsigned" -- but there isn't one for
__int128. This came up during the alignment patch.