Mercurial > projects > ldc
view tango/tango/core/BitManip.di @ 341:1bb99290e03a trunk
[svn r362] Started merging the old 'test' dir as well as the newer 'tangotests' dir into 'tests/mini' and 'tests/minicomplex'.
author | lindquist |
---|---|
date | Sun, 13 Jul 2008 02:51:19 +0200 |
parents | f5ca6bbbf1d7 |
children |
line wrap: on
line source
// D import file generated from 'core/BitManip.d' module tango.core.BitManip; version (DDoc) { int bsf(uint v); int bsr(uint v); int bt(uint* p, uint bitnum); int btc(uint* p, uint bitnum); int btr(uint* p, uint bitnum); int bts(uint* p, uint bitnum); uint bswap(uint v); ubyte inp(uint port_address); ushort inpw(uint port_address); uint inpl(uint port_address); ubyte outp(uint port_address, ubyte value); ushort outpw(uint port_address, ushort value); uint outpl(uint port_address, uint value); } 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); x = ((x & -858993460u) >> 2) + (x & 858993459); x += x >> 4; x &= 252645135; x += x >> 8; x &= 16711935; x += x >> 16; x &= 65535; return x; } debug (UnitTest) { } uint bitswap(uint x); debug (UnitTest) { }