Re: [RFC] man7/system_data_types.7: Document [unsigned] __int128

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 2020-10-01 14:54, Szabolcs Nagy wrote:
The 10/01/2020 12:14, Alejandro Colomar via Gcc wrote:
Here is the rendered intmax_t:

intmax_t
       Include: <stdint.h>.  Alternatively, <inttypes.h>.

       A  signed  integer type capable of representing any value of any
       signed integer type supported by the implementation.   According
       to  the C language standard, it shall be capable of storing val-
       ues in the range [INTMAX_MIN, INTMAX_MAX].

       The macro INTMAX_C() expands its argument to an integer constant
       of type intmax_t.

       The  length  modifier  for  intmax_t  for  the printf(3) and the
       scanf(3) families of functions is j; resulting commonly  in  %jd
       or %ji for printing intmax_t values.

       Bugs:  intmax_t  is not large enough to represent values of type
       __int128 in implementations where __int128 is defined  and  long
       long is less than 128 bits wide.

or __int128 is not an integer type.

integer types are either standard or extended.
and __int128 is neither because it can be
larger than intmax_t and stdint.h does not
provide the necessary macros for it.


Hi Szabolcs,

I know GCC decided to not call it an integer type, and call it instead a scalar type, just to conform with the standards, at the same time provide a 128 int, and at the same time, not have to change the ABI of intmax_t.

But it looks like an integer type,
and in almost any possible way, it acts like an integer type.

I could call '__int128' a signed _scalar_ type in the description, but that might confuse those who don't know these details. Do you think it would be better to call it that way, or just keep the integer word? (Jonathan, I'd also like to know your thoughts on this, BTW).

However, I would still have that bug documented, because in the end, the information programmers need is exactly that, and they don't really care if GCC calls it one way or the other just to avoid technical issues with the standards, IMO.

Thanks,

Alex


BTW, the updated rendered version is like this right now:

[[
__int128
      [signed] __int128

      A signed integer type of a fixed width of exactly 128 bits.
// This could change to "signed scalar type", but...

      When  using GCC, it is supported only for targets where the com-
      piler is able to generate  efficient  code  for  128-bit  arith-
      metic".

      Versions: GCC 4.6.0 and later.

      Conforming to: This is a non-standard extension, present in GCC.
      It is not standardized by the C language standard nor POSIX.

      Notes: This type is available without including any header.

      Bugs: It is not possible to express an integer constant of  type
      __int128  in  implementations  where  long long is less than 128
      bits wide.

      See also the intmax_t, intN_t and  unsigned  __int128  types  in
      this page.

[...]

unsigned __int128
      An unsigned integer type of a fixed width of exactly 128 bits.
// This could change to "signed scalar type", but...

      According  to  GNU,  it  is supported only for targets where the
      compiler is able to generate efficient code for  128-bit  arith-
      metic".

      Versions: GCC 4.6.0 and later.

      Conforming to: This is a non-standard extension, present in GCC.
      It is not standardized by the C language standard nor POSIX.

      Notes: This type is available without including any header.

      Bugs: It is not possible to express an integer constant of  type
      unsigned __int128 in implementations where unsigned long long is
      less than 128 bits wide.

      See also the __int128, uintmax_t and uintN_t types in this page.
]]



[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux