128 bit signed and unsigned integer types

Yigal Chripun yigal100 at gmail.com
Sun Dec 28 15:29:56 PST 2008


Andrei Alexandrescu wrote:
> dsimcha wrote:
>> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s
>> article
>>> Walter Bright wrote:
>>>> John Reimer wrote:
>>>>> Hello Walter,
>>>>>
>>>>>> You know, the unimplemented 128 bit integer types.
>>>>>>
>>>>>> Does anyone have a use for these?
>>>>>>
>>>>>
>>>>> Was that "cent" and "ucent"?
>>>> yes.
>>>>
>>>>> Would any of these map well to SSE Instructions on Intel CPU's?
>>>> Not a chance :-(
>>> Then it looks like we better leave large fixed-size integers to a
>>> library.
>>> Andrei
>>
>> Something that I still don't think has been made very clear in this
>> discussion
>> that I'm very curious about: How efficient would these large
>> fixed-size ints be
>> (on 32-bit hardware)? Would they be almost as fast as 64-bit, almost
>> as slow as
>> bigints, or somewhere roughly in the middle? Obviously on 64-bit
>> hardware they
>> can be made fast, but if that's the only place they can be made fast,
>> then I think
>> it's more important that DMD support 64-bit hardware first.
>
> Assume we define a FixedInt(uint bits) structure. That would contain the
> value in-situ so there is no dynamic allocation, no indirection, and
> full-blown copying. For built-in sizes, FixedInt will alias itself away,
> for example:
>
> template FixedInt(uint n) if (n == 8) { alias byte FixedInt; }
> template FixedInt(uint n) if (n == 16) { alias short FixedInt; }
> template FixedInt(uint n) if (n == 32) { alias int FixedInt; }
> template FixedInt(uint n) if (n == 64) { alias long FixedInt; }
>
> That's nice because it allows you to use FixedInt with a parameterized
> size throughout, yet still take advantage of builtin optimizations
> whenever applicable.
>
> For the larger sizes and operations my guess would be that FixedInt will
> be close to what can be achieved via built-ins.
>
>
> Andrei

is it possible to make int/long/short/etc internal to the compiler and 
use the above FixedInt in the language? there shouldn't be any 
performance differences between an old-style int and the above 
FixedInt!(32), for instance.
this way all the different types are reduced to one built-in type that 
looks like a template. similar to the way C++ uses the template syntax 
for casts like static_cast<type>(var) even though it's usually 
implemented inside the compiler.

also, this approch can be expanded to eliminate also size_t (which to me 
seems ugly).
libs could perhaps extend the same interface and add a BigInt as well.




More information about the Digitalmars-d mailing list