Mercurial > projects > ldc
comparison tango/lib/common/tango/core/BitManip.d @ 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 |
---|---|
169 /** | 169 /** |
170 * ditto | 170 * ditto |
171 */ | 171 */ |
172 uint outpl( uint port_address, uint value ); | 172 uint outpl( uint port_address, uint value ); |
173 } | 173 } |
174 else version( LLVMDC ) | |
175 { | |
176 // From GDC ... public domain! | |
177 | |
178 int bsf(uint v) | |
179 { | |
180 uint m = 1; | |
181 uint i; | |
182 for (i = 0; i < 32; i++,m<<=1) { | |
183 if (v&m) | |
184 return i; | |
185 } | |
186 return i; // supposed to be undefined | |
187 } | |
188 | |
189 int bsr(uint v) | |
190 { | |
191 uint m = 0x80000000; | |
192 uint i; | |
193 for (i = 32; i ; i--,m>>>=1) { | |
194 if (v&m) | |
195 return i-1; | |
196 } | |
197 return i; // supposed to be undefined | |
198 } | |
199 | |
200 int bt(uint *p, uint bitnum) | |
201 { | |
202 return (p[bitnum / (uint.sizeof*8)] & (1<<(bitnum & ((uint.sizeof*8)-1)))) ? -1 : 0 ; | |
203 } | |
204 | |
205 int btc(uint *p, uint bitnum) | |
206 { | |
207 uint * q = p + (bitnum / (uint.sizeof*8)); | |
208 uint mask = 1 << (bitnum & ((uint.sizeof*8) - 1)); | |
209 int result = *q & mask; | |
210 *q ^= mask; | |
211 return result ? -1 : 0; | |
212 } | |
213 | |
214 int btr(uint *p, uint bitnum) | |
215 { | |
216 uint * q = p + (bitnum / (uint.sizeof*8)); | |
217 uint mask = 1 << (bitnum & ((uint.sizeof*8) - 1)); | |
218 int result = *q & mask; | |
219 *q &= ~mask; | |
220 return result ? -1 : 0; | |
221 } | |
222 | |
223 int bts(uint *p, uint bitnum) | |
224 { | |
225 uint * q = p + (bitnum / (uint.sizeof*8)); | |
226 uint mask = 1 << (bitnum & ((uint.sizeof*8) - 1)); | |
227 int result = *q & mask; | |
228 *q |= mask; | |
229 return result ? -1 : 0; | |
230 } | |
231 | |
232 pragma(LLVM_internal, "intrinsic", "llvm.bswap.i32") | |
233 uint bswap(uint val); | |
234 | |
235 ubyte inp(uint p) { return 0; } | |
236 ushort inpw(uint p) { return 0; } | |
237 uint inpl(uint p) { return 0; } | |
238 | |
239 ubyte outp(uint p, ubyte v) { return v; } | |
240 ushort outpw(uint p, ushort v) { return v; } | |
241 uint outpl(uint p, uint v) { return v; } | |
242 } | |
174 else | 243 else |
175 { | 244 { |
176 public import std.intrinsic; | 245 public import std.intrinsic; |
177 } | 246 } |
178 | 247 |