Benchmark of D against other languages

bearophile via Digitalmars-d digitalmars-d at puremagic.com
Wed Apr 1 16:39:25 PDT 2015


Martin Nowak:

> GCC5 comes with a big announcement about devirtualization.
> https://www.gnu.org/software/gcc/gcc-5/changes.html#general

I have a small question. That page says:

"
A new set of built-in functions for arithmetics with overflow 
checking has been added: __builtin_add_overflow, 
__builtin_sub_overflow and __builtin_mul_overflow and for 
compatibility with clang also other variants. These builtins have 
two integral arguments (which don't need to have the same type), 
the arguments are extended to infinite precision signed type, +, 
- or * is performed on those, and the result is stored in an 
integer variable pointed to by the last argument. If the stored 
value is equal to the infinite precision result, the built-in 
functions return false, otherwise true. The type of the integer 
variable that will hold the result can be different from the 
types of the first two arguments. The following snippet 
demonstrates how this can be used in computing the size for the 
calloc function:

     void *
     calloc (size_t x, size_t y)
     {
       size_t sz;
       if (__builtin_mul_overflow (x, y, &sz))
         return NULL;
       void *ret = malloc (sz);
       if (ret) memset (res, 0, sz);
       return ret;
     }

On e.g. i?86 or x86-64 the above will result in a mul instruction 
followed by a jump on overflow.
"

Now both GCC and Clang have intrinsics to perform safe integral 
operations.

In recent versions of druntime/dmd there are functions to perform 
some safe integer operations. So is the API very well compatible 
with those intrinsics?

Bye,
bearophile


More information about the Digitalmars-d mailing list