132
|
1 // D import file generated from 'core/BitManip.d'
|
|
2 module tango.core.BitManip;
|
|
3 version (DDoc)
|
|
4 {
|
|
5 int bsf(uint v);
|
|
6 int bsr(uint v);
|
|
7 int bt(uint* p, uint bitnum);
|
|
8 int btc(uint* p, uint bitnum);
|
|
9 int btr(uint* p, uint bitnum);
|
|
10 int bts(uint* p, uint bitnum);
|
|
11 uint bswap(uint v);
|
|
12 ubyte inp(uint port_address);
|
|
13 ushort inpw(uint port_address);
|
|
14 uint inpl(uint port_address);
|
|
15 ubyte outp(uint port_address, ubyte value);
|
|
16 ushort outpw(uint port_address, ushort value);
|
|
17 uint outpl(uint port_address, uint value);
|
|
18 }
|
|
19 else
|
|
20 {
|
184
|
21 version (LLVMDC)
|
|
22 {
|
|
23 int bsf(uint v);
|
|
24 int bsr(uint v);
|
|
25 int bt(uint* p, uint bitnum)
|
|
26 {
|
|
27 return p[bitnum / ((uint).sizeof * 8)] & 1 << (bitnum & (uint).sizeof * 8 - 1) ? -1 : 0;
|
|
28 }
|
|
29 int btc(uint* p, uint bitnum)
|
|
30 {
|
|
31 uint* q = p + bitnum / ((uint).sizeof * 8);
|
|
32 uint mask = 1 << (bitnum & (uint).sizeof * 8 - 1);
|
|
33 int result = *q & mask;
|
|
34 *q ^= mask;
|
|
35 return result ? -1 : 0;
|
|
36 }
|
|
37 int btr(uint* p, uint bitnum)
|
|
38 {
|
|
39 uint* q = p + bitnum / ((uint).sizeof * 8);
|
|
40 uint mask = 1 << (bitnum & (uint).sizeof * 8 - 1);
|
|
41 int result = *q & mask;
|
|
42 *q &= ~mask;
|
|
43 return result ? -1 : 0;
|
|
44 }
|
|
45 int bts(uint* p, uint bitnum)
|
|
46 {
|
|
47 uint* q = p + bitnum / ((uint).sizeof * 8);
|
|
48 uint mask = 1 << (bitnum & (uint).sizeof * 8 - 1);
|
|
49 int result = *q & mask;
|
|
50 *q |= mask;
|
|
51 return result ? -1 : 0;
|
|
52 }
|
|
53 pragma(LLVM_internal, "intrinsic", "llvm.bswap.i32")
|
|
54 {
|
|
55 uint bswap(uint val);
|
|
56 }
|
|
57 ubyte inp(uint p)
|
|
58 {
|
|
59 return 0;
|
|
60 }
|
|
61 ushort inpw(uint p)
|
|
62 {
|
|
63 return 0;
|
|
64 }
|
|
65 uint inpl(uint p)
|
|
66 {
|
|
67 return 0;
|
|
68 }
|
|
69 ubyte outp(uint p, ubyte v)
|
|
70 {
|
|
71 return v;
|
|
72 }
|
|
73 ushort outpw(uint p, ushort v)
|
|
74 {
|
|
75 return v;
|
|
76 }
|
|
77 uint outpl(uint p, uint v)
|
|
78 {
|
|
79 return v;
|
|
80 }
|
|
81 }
|
|
82 else
|
|
83 {
|
132
|
84 public
|
|
85 {
|
|
86 import std.intrinsic;
|
|
87 }
|
|
88 }
|
184
|
89 }
|
132
|
90 int popcnt(uint x)
|
|
91 {
|
|
92 x = x - (x >> 1 & 1431655765);
|
|
93 x = ((x & -858993460u) >> 2) + (x & 858993459);
|
|
94 x += x >> 4;
|
|
95 x &= 252645135;
|
|
96 x += x >> 8;
|
|
97 x &= 16711935;
|
|
98 x += x >> 16;
|
|
99 x &= 65535;
|
|
100 return x;
|
|
101 }
|
|
102 debug (UnitTest)
|
|
103 {
|
|
104 }
|
|
105 uint bitswap(uint x);
|
|
106 debug (UnitTest)
|
|
107 {
|
|
108 }
|