Generating checked integral operations [WAS: Trip notes from Israel]

Stefan Koch via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Tue May 23 08:54:42 PDT 2017


On Tuesday, 23 May 2017 at 15:43:24 UTC, Andrei Alexandrescu 
wrote:
> On 05/23/2017 11:37 AM, Stefan Koch wrote:
>> 
>> The compiler does indeed seem to optimize the code somewhat.
>> Although the generated asm still looks wired.
>> http://asm.dlang.org/#compilers:!((compiler:dmd_nightly,options:'-dip25+-O+-release+-inline+-m32',source:'import+core.checkedint%3B%0A%0Aalias+T+%3D+ulong%3B%0Aextern+(C)+T+foo(uint+x,+uint+y,+ref+bool+overflow)%0A%7B%0A+++return+mulu(x,+y,+overflow)%3B%0A%7D%0A')),filterAsm:(binary:!t,intel:!t),version:3
>
> That call enters a different overload:
>
> pragma(inline, true)
> uint mulu(uint x, uint y, ref bool overflow)
> {
>     ulong r = ulong(x) * ulong(y);
>     if (r > uint.max)
>         overflow = true;
>     return cast(uint)r;
> }
>
> which is of efficiency comparable with code using seto. I'm not 
> too worried about that. https://goo.gl/eRXUpr is of interest.
>
>
> Andrei

Well ....
Since core.checkedint is in druntime, we _could_ detected the 
checking operations and generate better code for them.
But right now, I am convinced it is worth the effort.


More information about the Digitalmars-d-announce mailing list