view tango/tango/core/BitManip.di @ 264:a9dae3da4e87 trunk

[svn r285] Fixed D -> bool LLVM helper for floating point values. Changed the way D-style varargs are passed, now each param should be aligned to size_t.sizeof.
author lindquist
date Sat, 14 Jun 2008 17:28:13 +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)
{
    }