By the way, I just noticed that my fallback get_random_max64() algorithm (if there's no __int128 type) is completely broken and will need rewriting.
It would work if I rejected and regenerated the high half if the low half were out of range, but that's not what it does. The worst case is a range of 0x10000001, where it would return 0x10000000 half the time. Needs rethinking to find something as simple as possible. I'm sure I can come up with something, but I'm not averse to suggestions if anyone has any. (If I had a reliably fast clz/fls, that would open some possibilities, but sigh...)