Commit 6d8a21ee authored by kasperl@chromium.org's avatar kasperl@chromium.org

Revert 428. Breaks 64-bit compilation.

Review URL: http://codereview.chromium.org/6446

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@430 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 2b3b31cf
...@@ -43,7 +43,8 @@ LIBRARY_FLAGS = { ...@@ -43,7 +43,8 @@ LIBRARY_FLAGS = {
'gcc': { 'gcc': {
'all': { 'all': {
'DIALECTFLAGS': ['-ansi'], 'DIALECTFLAGS': ['-ansi'],
'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS'], 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS',
'-fno-strict-aliasing'],
'CXXFLAGS': ['$CCFLAGS', '-fno-rtti', '-fno-exceptions'], 'CXXFLAGS': ['$CCFLAGS', '-fno-rtti', '-fno-exceptions'],
'LIBS': ['pthread'] 'LIBS': ['pthread']
}, },
...@@ -52,7 +53,7 @@ LIBRARY_FLAGS = { ...@@ -52,7 +53,7 @@ LIBRARY_FLAGS = {
'CPPDEFINES': ['ENABLE_DISASSEMBLER', 'DEBUG'] 'CPPDEFINES': ['ENABLE_DISASSEMBLER', 'DEBUG']
}, },
'mode:release': { 'mode:release': {
'CCFLAGS': ['-O3'] 'CCFLAGS': ['-O9']
}, },
'wordsize:64': { 'wordsize:64': {
'CCFLAGS': ['-m32'], 'CCFLAGS': ['-m32'],
......
...@@ -112,7 +112,7 @@ void NeanderObject::set(int offset, v8::internal::Object* value) { ...@@ -112,7 +112,7 @@ void NeanderObject::set(int offset, v8::internal::Object* value) {
template <typename T> static inline T ToCData(v8::internal::Object* obj) { template <typename T> static inline T ToCData(v8::internal::Object* obj) {
STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address)); STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address));
return reinterpret_cast<T>( return reinterpret_cast<T>(
reinterpret_cast<intptr_t>(v8::internal::Proxy::cast(obj)->proxy())); reinterpret_cast<int>(v8::internal::Proxy::cast(obj)->proxy()));
} }
...@@ -120,7 +120,7 @@ template <typename T> ...@@ -120,7 +120,7 @@ template <typename T>
static inline v8::internal::Handle<v8::internal::Object> FromCData(T obj) { static inline v8::internal::Handle<v8::internal::Object> FromCData(T obj) {
STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address)); STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address));
return v8::internal::Factory::NewProxy( return v8::internal::Factory::NewProxy(
reinterpret_cast<v8::internal::Address>(reinterpret_cast<intptr_t>(obj))); reinterpret_cast<v8::internal::Address>(reinterpret_cast<int>(obj)));
} }
......
...@@ -57,7 +57,7 @@ class SourceCodeCache BASE_EMBEDDED { ...@@ -57,7 +57,7 @@ class SourceCodeCache BASE_EMBEDDED {
} }
void Iterate(ObjectVisitor* v) { void Iterate(ObjectVisitor* v) {
v->VisitPointer(bit_cast<Object**, FixedArray**>(&cache_)); v->VisitPointer(reinterpret_cast<Object**>(&cache_));
} }
......
...@@ -610,7 +610,7 @@ void Debug::Unload() { ...@@ -610,7 +610,7 @@ void Debug::Unload() {
void Debug::Iterate(ObjectVisitor* v) { void Debug::Iterate(ObjectVisitor* v) {
#define VISIT(field) v->VisitPointer(bit_cast<Object**, Code**>(&(field))); #define VISIT(field) v->VisitPointer(reinterpret_cast<Object**>(&(field)));
VISIT(debug_break_return_entry_); VISIT(debug_break_return_entry_);
VISIT(debug_break_return_); VISIT(debug_break_return_);
#undef VISIT #undef VISIT
......
...@@ -233,16 +233,16 @@ class Debug { ...@@ -233,16 +233,16 @@ class Debug {
} }
// Support for saving/restoring registers when handling debug break calls. // Support for saving/restoring registers when handling debug break calls.
static Object** register_address(int r) { static Address* register_address(int r) {
return &registers_[r]; return reinterpret_cast<Address *>(&registers_[r]);
} }
// Address of the debug break return entry code. // Address of the debug break return entry code.
static Code* debug_break_return_entry() { return debug_break_return_entry_; } static Code* debug_break_return_entry() { return debug_break_return_entry_; }
// Support for getting the address of the debug break on return code. // Support for getting the address of the debug break on return code.
static Code** debug_break_return_address() { static Address* debug_break_return_address() {
return &debug_break_return_; return reinterpret_cast<Address*>(&debug_break_return_);
} }
static const int kEstimatedNofDebugInfoEntries = 16; static const int kEstimatedNofDebugInfoEntries = 16;
......
...@@ -463,42 +463,6 @@ F FUNCTION_CAST(Address addr) { ...@@ -463,42 +463,6 @@ F FUNCTION_CAST(Address addr) {
#define INLINE(header) inline header #define INLINE(header) inline header
#endif #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 o 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;
}
} } // namespace v8::internal } } // namespace v8::internal
#endif // V8_GLOBALS_H_ #endif // V8_GLOBALS_H_
...@@ -2350,7 +2350,7 @@ void Heap::IterateStrongRoots(ObjectVisitor* v) { ...@@ -2350,7 +2350,7 @@ void Heap::IterateStrongRoots(ObjectVisitor* v) {
SYNCHRONIZE_TAG("struct_map"); SYNCHRONIZE_TAG("struct_map");
#define SYMBOL_ITERATE(name, string) \ #define SYMBOL_ITERATE(name, string) \
v->VisitPointer(bit_cast<Object**, String**>(&name##_)); v->VisitPointer(reinterpret_cast<Object**>(&name##_));
SYMBOL_LIST(SYMBOL_ITERATE) SYMBOL_LIST(SYMBOL_ITERATE)
#undef SYMBOL_ITERATE #undef SYMBOL_ITERATE
SYNCHRONIZE_TAG("symbol"); SYNCHRONIZE_TAG("symbol");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment