lindquist@1: module assign; lindquist@1: lindquist@1: // this is taken from std.intrinsic from gdc lindquist@1: lindquist@1: int mybtc(uint *p, uint bitnum) lindquist@1: { lindquist@1: uint * q = p + (bitnum / (uint.sizeof*8)); lindquist@1: uint mask = 1 << (bitnum & ((uint.sizeof*8) - 1)); lindquist@1: int result = *q & mask; lindquist@1: *q ^= mask; lindquist@1: return result ? -1 : 0; lindquist@1: } lindquist@1: lindquist@1: void main() lindquist@1: { lindquist@1: uint i = 0xFFFF_FFFF; lindquist@1: int r = mybtc(&i, 31); lindquist@1: assert(r); lindquist@1: assert(i == 0x7FFF_FFFF); lindquist@1: r = mybtc(&i, 31); lindquist@1: assert(!r); lindquist@1: assert(i == 0xFFFF_FFFF); lindquist@1: }