Rev | Line | |
---|
[216] | 1 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
---|
| 2 | /** |
---|
| 3 | * Contains misc. useful macros & defines. |
---|
| 4 | * \file IceUtils.cpp |
---|
| 5 | * \author Pierre Terdiman (collected from various sources) |
---|
| 6 | * \date April, 4, 2000 |
---|
| 7 | */ |
---|
| 8 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
---|
| 9 | |
---|
| 10 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
---|
| 11 | // Precompiled Header |
---|
| 12 | #include "Stdafx.h" |
---|
| 13 | |
---|
| 14 | using namespace IceCore; |
---|
| 15 | |
---|
| 16 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
---|
| 17 | /** |
---|
| 18 | * Returns the alignment of the input address. |
---|
| 19 | * \fn Alignment() |
---|
| 20 | * \param address [in] address to check |
---|
| 21 | * \return the best alignment (e.g. 1 for odd addresses, etc) |
---|
| 22 | */ |
---|
| 23 | /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
---|
| 24 | udword IceCore::Alignment(udword address) |
---|
| 25 | { |
---|
| 26 | // Returns 0 for null addresses |
---|
| 27 | if(!address) return 0; |
---|
| 28 | |
---|
| 29 | // Test all bits |
---|
| 30 | udword Align = 1; |
---|
| 31 | for(udword i=1;i<32;i++) |
---|
| 32 | { |
---|
| 33 | // Returns as soon as the alignment is broken |
---|
| 34 | if(address&Align) return Align; |
---|
| 35 | Align<<=1; |
---|
| 36 | } |
---|
| 37 | // Here all bits are null, except the highest one (else the address would be null) |
---|
| 38 | return Align; |
---|
| 39 | } |
---|
Note: See
TracBrowser
for help on using the repository browser.