128-bit integer - nonsensical documentation?

David Brown david@westcontrol.com
Wed Aug 26 12:47:00 GMT 2015


On 26/08/15 14:32, Kostas Savvidis wrote:
> I sense there is a consensus that
> 1) the 128bit integer is emulated emulated on 64-bit platforms, not
> available on 32-bit platforms, and is not native anywhere

As far as I know, 128-bit integers are supported natively on the RISC-V
architecture, which has a gcc port.  I've never used such a device, so I
don't know the details - but perhaps it has 128-bit long long's.  The
point is, there is nothing to stop an architecture having native 128-bit
integers.

And there is also nothing to stop 32-bit (or smaller) targets supporting
__int128.  I use gcc on an 8-bit device, and it has full support for
64-bit long long's (emulated by software and library routines, of
course).  If people find 128-bit integers useful and convenient, then it
seems likely that support will be added to more targets - perhaps using
SIMD or floating point registers where these are more efficient than
general purpose registers.  But I'd imagine that they are only useful in
a few specialised algorithms (such as in cryptography), and then only if
they are noticeably faster than using 64-bit integers.

> 2) the long long int is 64-bits everywhere so you can *NEVER* do what
> the document seems to suggest one *MIGHT* be able to do —  input a
> 128-bit constant

Again, there is nothing in the C standards saying that a "long long" is
limited to 64-bit - only that it is /at least/ 64-bit.  Some targets may
have longer long long's.

> 
> To me, this would justify rewriting the documentation.

The fact that you are asking these questions suggests that the
documentation is not as clear as it could be.

> 
> My personal lament is that i still cannot find out anywhere if it is
> available on all 64-bit platforms or on intel only.

There are a fair number of places where the documentation mentions
features that are available or unavailable on some targets, without
being explicit.  I am sure the gcc developers would be happy with
volunteers who can fill in the details :-)

David

> 
> KS
> 
>> On Aug 26, 2015, at 3:22 PM, Jonathan Wakely
>> <jwakely.gcc@gmail.com> wrote:
>> 
>> On 26 August 2015 at 12:04, Kostas Savvidis wrote:
>>> The online documentation contains the attached passage as part of
>>> the "C-Extensions” chapter. There are no actual machines which
>>> have an " integer mode wide enough to hold 128 bits” as the
>>> document puts it.
>> 
>> It's not talking about machine integers, it's talking about GCC 
>> integer modes. Several targets support that.
>> 
>>> This would be a harmless confusion if it didn’t go on to say “…
>>> long long integer less than 128 bits wide” (???!!!) Whereas in
>>> reality "long long int” is 64 bits everywhere i have seen.
>> 
>> 
>> Read it more carefully, it says you can't express an integer
>> constant of type __int128 on such platforms.
>> 
>> So you can't write __int128 i = 
>> 999999999999999999999999999999999999999999999999999999999999;
> 
> 



More information about the Gcc-help mailing list