| Index: src/globals.h | 
| =================================================================== | 
| --- src/globals.h	(revision 4110) | 
| +++ src/globals.h	(working copy) | 
| @@ -574,42 +574,6 @@ | 
| #define INLINE(header) inline header | 
| #endif | 
|  | 
| -// The type-based aliasing rule allows the compiler to assume that pointers of | 
| -// different types (for some definition of different) never alias each other. | 
| -// Thus the following code does not work: | 
| -// | 
| -// float f = foo(); | 
| -// int fbits = *(int*)(&f); | 
| -// | 
| -// The compiler 'knows' that the int pointer can't refer to f since the types | 
| -// don't match, so the compiler may cache f in a register, leaving random data | 
| -// in fbits.  Using C++ style casts makes no difference, however a pointer to | 
| -// char data is assumed to alias any other pointer.  This is the 'memcpy | 
| -// exception'. | 
| -// | 
| -// Bit_cast uses the memcpy exception to move the bits from a variable of one | 
| -// type of a variable of another type.  Of course the end result is likely to | 
| -// be implementation dependent.  Most compilers (gcc-4.2 and MSVC 2005) | 
| -// will completely optimize bit_cast away. | 
| -// | 
| -// There is an additional use for bit_cast. | 
| -// Recent gccs will warn when they see casts that may result in breakage due to | 
| -// the type-based aliasing rule.  If you have checked that there is no breakage | 
| -// you can use bit_cast to cast one pointer type to another.  This confuses gcc | 
| -// enough that it can no longer see that you have cast one pointer type to | 
| -// another thus avoiding the warning. | 
| -template <class Dest, class Source> | 
| -inline Dest bit_cast(const Source& source) { | 
| -  // Compile time assertion: sizeof(Dest) == sizeof(Source) | 
| -  // A compile error here means your Dest and Source have different sizes. | 
| -  typedef char VerifySizesAreEqual[sizeof(Dest) == sizeof(Source) ? 1 : -1]; | 
| - | 
| -  Dest dest; | 
| -  memcpy(&dest, &source, sizeof(dest)); | 
| -  return dest; | 
| -} | 
| - | 
| - | 
| // Feature flags bit positions. They are mostly based on the CPUID spec. | 
| // (We assign CPUID itself to one of the currently reserved bits -- | 
| // feel free to change this if needed.) | 
|  |