Mercurial > projects > ldc
comparison 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 |
comparison
equal
deleted
inserted
replaced
183:3cdf4b0c75a1 | 184:f5ca6bbbf1d7 |
---|---|
16 ushort outpw(uint port_address, ushort value); | 16 ushort outpw(uint port_address, ushort value); |
17 uint outpl(uint port_address, uint value); | 17 uint outpl(uint port_address, uint value); |
18 } | 18 } |
19 else | 19 else |
20 { | 20 { |
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 { | |
21 public | 84 public |
22 { | 85 { |
23 import std.intrinsic; | 86 import std.intrinsic; |
87 } | |
24 } | 88 } |
25 } | 89 } |
26 int popcnt(uint x) | 90 int popcnt(uint x) |
27 { | 91 { |
28 x = x - (x >> 1 & 1431655765); | 92 x = x - (x >> 1 & 1431655765); |