Mercurial > projects > ldc
diff tango/tango/core/BitManip.di @ 184:f5ca6bbbf1d7 trunk
[svn r200] Fixed: removed use of std.intrinsic.
Fixed: module info could potentially be masked by a previous reference, resulting in linking failure.
author | lindquist |
---|---|
date | Wed, 07 May 2008 22:01:59 +0200 |
parents | 1700239cab2e |
children |
line wrap: on
line diff
--- a/tango/tango/core/BitManip.di Wed May 07 20:22:42 2008 +0200 +++ b/tango/tango/core/BitManip.di Wed May 07 22:01:59 2008 +0200 @@ -18,11 +18,75 @@ } else { + version (LLVMDC) +{ + int bsf(uint v); + int bsr(uint v); + int bt(uint* p, uint bitnum) +{ +return p[bitnum / ((uint).sizeof * 8)] & 1 << (bitnum & (uint).sizeof * 8 - 1) ? -1 : 0; +} + int btc(uint* p, uint bitnum) +{ +uint* q = p + bitnum / ((uint).sizeof * 8); +uint mask = 1 << (bitnum & (uint).sizeof * 8 - 1); +int result = *q & mask; +*q ^= mask; +return result ? -1 : 0; +} + int btr(uint* p, uint bitnum) +{ +uint* q = p + bitnum / ((uint).sizeof * 8); +uint mask = 1 << (bitnum & (uint).sizeof * 8 - 1); +int result = *q & mask; +*q &= ~mask; +return result ? -1 : 0; +} + int bts(uint* p, uint bitnum) +{ +uint* q = p + bitnum / ((uint).sizeof * 8); +uint mask = 1 << (bitnum & (uint).sizeof * 8 - 1); +int result = *q & mask; +*q |= mask; +return result ? -1 : 0; +} + pragma(LLVM_internal, "intrinsic", "llvm.bswap.i32") +{ + uint bswap(uint val); +} + ubyte inp(uint p) +{ +return 0; +} + ushort inpw(uint p) +{ +return 0; +} + uint inpl(uint p) +{ +return 0; +} + ubyte outp(uint p, ubyte v) +{ +return v; +} + ushort outpw(uint p, ushort v) +{ +return v; +} + uint outpl(uint p, uint v) +{ +return v; +} +} +else +{ public { import std.intrinsic; } } +} int popcnt(uint x) { x = x - (x >> 1 & 1431655765);