On 10/12/2016 04:02 PM, safety0ff wrote:
On Wednesday, 12 October 2016 at 16:24:19 UTC, Andrei Alexandrescu wrote:
Remember the ASCII part is the bothersome one. There's only two
comparisons, all with 100% predictability. We should be able to
arrange matters so the loss is negligible. -- Andrei
My measurements:
ldc -O3 -boundscheck=off -release -mcpu=native -enable-inlining
ldc version 1.0.0
overhead 0.350s
bytes 0.385s
Wait, so going through the bytes made almost no difference? Or did you
subtract the overhead already?
current autodecoding 0.915s (with new LUT popFront)
copy-pasting std.utf decoding functions into current file 0.840s
adding ASCII branch hints (llvm_expect) 0.770s
With the branch hints LDC moves the non-Ascii code outside of the loop
and creates a really tight loop body.
I think we should define two aliases "likely" and "unlikely" with
default implementations:
bool likely(bool b) { return b; }
bool unlikely(bool b) { return b; }
They'd go in druntime. Then implementers can hook them into their
intrinsics.
Works?
Andrei