Mercurial > projects > ldc
view runtime/internal/ldc/bitmanip.d @ 984:4c0df37d0421
Removing ldc.conf. (IMPORTANT: run 'cmake .' after pull)
Added it to .hgignore.
This gets rid of spurious differences caused by CMake regenerating it differently.
Just run 'cmake .' to get it back in your local checkout.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Thu, 19 Feb 2009 13:50:05 +0100 |
parents | 5dbc63f83380 |
children |
line wrap: on
line source
/* * D phobos intrinsics for LDC * * From GDC ... public domain! */ module ldc.bitmanip; // Check for the right compiler version(LDC) { // OK } else { static assert(false, "This module is only valid for LDC"); } int bsf(uint v) { uint m = 1; uint i; for (i = 0; i < 32; i++,m<<=1) { if (v&m) return i; } return i; // supposed to be undefined } int bsr(uint v) { uint m = 0x80000000; uint i; for (i = 32; i ; i--,m>>>=1) { if (v&m) return i-1; } return i; // supposed to be undefined } 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(intrinsic, "llvm.bswap.i32") uint bswap(uint val); ubyte inp(uint p) { throw new Exception("inp intrinsic not yet implemented"); } ushort inpw(uint p) { throw new Exception("inpw intrinsic not yet implemented"); } uint inpl(uint p) { throw new Exception("inpl intrinsic not yet implemented"); } ubyte outp(uint p, ubyte v) { throw new Exception("outp intrinsic not yet implemented"); } ushort outpw(uint p, ushort v) { throw new Exception("outpw intrinsic not yet implemented"); } uint outpl(uint p, uint v) { throw new Exception("outpl intrinsic not yet implemented"); }