value range propagation for _bitwise_ OR
Adam D. Ruppe
destructionator at gmail.com
Sat Apr 10 16:38:07 PDT 2010
On Sat, Apr 10, 2010 at 04:02:05PM -0400, Adam D. Ruppe wrote:
> That breaks it. Back to the drawing board.
I *might* have it, but I'm not 100% confident in my test program. Here's my
implementation:
====
import std.intrinsic;
uint max(uint a, uint b) { return (a >= b) ? a : b; }
uint min(uint a, uint b) { return (a >= b) ? b : a; }
uint numbits(uint a) { return a == 0 ? a : (bsr(a) + 1); }
uint max_c(uint a, uint b) {
uint mn = min(a, b);
uint mx = max(a, b);
if(mn == 0)
return mx;
// if there is a bit we can reuse, it grants us everything before it too
uint reusable = mn & mx;
if(reusable)
return (mx | ((1 << numbits(reusable)) - 1)) | mn;
else
return mx | mn;
}
uint min_c(uint min_a, uint min_b) {
return max(min_a, min_b);
}
=====
I can't believe I spent all day on this...
--
Adam D. Ruppe
http://arsdnet.net
More information about the Digitalmars-d
mailing list