On Wednesday, 18 May 2016 at 11:46:37 UTC, Era Scarecrow wrote:
On Wednesday, 18 May 2016 at 10:25:10 UTC, tsbockman wrote:
https://code.dlang.org/packages/checkedint
https://dlang.org/phobos/core_checkedint.html

Glancing at the checkedInt I really don't see it as being the same as what I'm talking about. Overflow/carry for add perhaps, but unless it breaks down to a single instruction for the compiler to determine if it needs to do something, I see it as a failure (at best, a workaround).

That's just my thoughts. CheckedInt simply _doesn't_ cover what I was talking about.

The functions in druntime's `core.checkedint` are intrinsics that map directly to the hardware overflow/carry instructions.

The DUB package I linked provides various wrapper functions and data structures to make it easier to use the `core.checkedint` intrinsics (among other things). The performance cost of the wrappers is low with proper inlining, which GDC and LDC are able to provide. (DMD is another story...)

Obtaining the modulus for 0 cost/instructions after doing a division which is in the hardware's opcode side effects (unless the compiler recognizes the pattern and offers it as an optimization), or having the full result of a multiply on hand (that exceeds it's built-in size, long.max*long.max = 128bit result, which the hardware hands to you if you check the register it stores the other half of the result in).

I agree that intrinsics for this would be nice. I doubt that any current D platform is actually computing the full 128 bit result for every 64 bit multiply though - that would waste both power and performance, for most programs.

Reply via email to