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);