Revision: 2743
Author: [email protected]
Date: Mon Aug 24 04:56:29 2009
Log: Change some integer types to make the x64 Win32 platform happier.
Review URL: http://codereview.chromium.org/173115
http://code.google.com/p/v8/source/detail?r=2743
Modified:
/branches/bleeding_edge/src/objects-inl.h
/branches/bleeding_edge/src/objects.h
/branches/bleeding_edge/src/platform-win32.cc
/branches/bleeding_edge/src/utils.h
/branches/bleeding_edge/src/x64/codegen-x64.cc
=======================================
--- /branches/bleeding_edge/src/objects-inl.h Wed Aug 19 08:14:11 2009
+++ /branches/bleeding_edge/src/objects-inl.h Mon Aug 24 04:56:29 2009
@@ -814,15 +814,13 @@
Failure* Failure::Construct(Type type, int value) {
int info = (value << kFailureTypeTagSize) | type;
- // TODO(X64): Stop using Smi validation for non-smi checks, even if they
- // happen to be identical at the moment.
- ASSERT(Smi::IsValid(info)); // Same validation check as in Smi
+ ASSERT(((info << kFailureTagSize) >> kFailureTagSize) == info);
return reinterpret_cast<Failure*>(
(static_cast<intptr_t>(info) << kFailureTagSize) | kFailureTag);
}
-bool Smi::IsValid(int value) {
+bool Smi::IsValid(intptr_t value) {
#ifdef DEBUG
bool in_range = (value >= kMinValue) && (value <= kMaxValue);
#endif
@@ -937,12 +935,13 @@
Address MapWord::DecodeMapAddress(MapSpace* map_space) {
- int map_page_index = (value_ & kMapPageIndexMask) >> kMapPageIndexShift;
+ int map_page_index =
+ static_cast<int>((value_ & kMapPageIndexMask) >> kMapPageIndexShift);
ASSERT_MAP_PAGE_INDEX(map_page_index);
- int map_page_offset =
+ int map_page_offset = static_cast<int>(
((value_ & kMapPageOffsetMask) >> kMapPageOffsetShift)
- << kObjectAlignmentBits;
+ << kObjectAlignmentBits);
return (map_space->PageAddress(map_page_index) + map_page_offset);
}
=======================================
--- /branches/bleeding_edge/src/objects.h Wed Aug 19 00:30:20 2009
+++ /branches/bleeding_edge/src/objects.h Mon Aug 24 04:56:29 2009
@@ -905,7 +905,7 @@
static inline Smi* FromIntptr(intptr_t value);
// Returns whether value can be represented in a Smi.
- static inline bool IsValid(int value);
+ static inline bool IsValid(intptr_t value);
static inline bool IsIntptrValid(intptr_t);
=======================================
--- /branches/bleeding_edge/src/platform-win32.cc Wed Aug 19 00:32:48 2009
+++ /branches/bleeding_edge/src/platform-win32.cc Mon Aug 24 04:56:29 2009
@@ -54,10 +54,6 @@
#define _WIN32_WINNT 0x500
#endif
-#ifdef _WIN64
-#error Windows 64-bit blatforms not supported
-#endif
-
#include <windows.h>
#include <time.h> // For LocalOffset() implementation.
@@ -1190,6 +1186,9 @@
memset(&context, 0, sizeof(context));
context.ContextFlags = CONTEXT_CONTROL;
context.ContextFlags = CONTEXT_CONTROL;
+#ifdef _WIN64
+ // TODO(X64): Implement context capture.
+#else
__asm call x
__asm x: pop eax
__asm mov context.Eip, eax
@@ -1199,15 +1198,22 @@
// capture the context instead of inline assembler. However it is
// only available on XP, Vista, Server 2003 and Server 2008 which
// might not be sufficient.
+#endif
// Initialize the stack walking
STACKFRAME64 stack_frame;
memset(&stack_frame, 0, sizeof(stack_frame));
+#ifdef _WIN64
+ stack_frame.AddrPC.Offset = context.Rip;
+ stack_frame.AddrFrame.Offset = context.Rbp;
+ stack_frame.AddrStack.Offset = context.Rsp;
+#else
stack_frame.AddrPC.Offset = context.Eip;
- stack_frame.AddrPC.Mode = AddrModeFlat;
stack_frame.AddrFrame.Offset = context.Ebp;
- stack_frame.AddrFrame.Mode = AddrModeFlat;
stack_frame.AddrStack.Offset = context.Esp;
+#endif
+ stack_frame.AddrPC.Mode = AddrModeFlat;
+ stack_frame.AddrFrame.Mode = AddrModeFlat;
stack_frame.AddrStack.Mode = AddrModeFlat;
int frames_count = 0;
=======================================
--- /branches/bleeding_edge/src/utils.h Thu Jul 16 21:57:17 2009
+++ /branches/bleeding_edge/src/utils.h Mon Aug 24 04:56:29 2009
@@ -114,8 +114,10 @@
// Returns true if (addr + offset) is aligned.
-static inline bool IsAddressAligned(Address addr, int alignment, int
offset) {
- int offs = OffsetFrom(addr + offset);
+static inline bool IsAddressAligned(Address addr,
+ intptr_t alignment,
+ int offset) {
+ intptr_t offs = OffsetFrom(addr + offset);
return IsAligned(offs, alignment);
}
@@ -446,15 +448,15 @@
inline Vector<const char> CStrVector(const char* data) {
- return Vector<const char>(data, strlen(data));
+ return Vector<const char>(data, static_cast<int>(strlen(data)));
}
inline Vector<char> MutableCStrVector(char* data) {
- return Vector<char>(data, strlen(data));
+ return Vector<char>(data, static_cast<int>(strlen(data)));
}
inline Vector<char> MutableCStrVector(char* data, int max) {
- int length = strlen(data);
+ int length = static_cast<int>(strlen(data));
return Vector<char>(data, (length < max) ? length : max);
}
=======================================
--- /branches/bleeding_edge/src/x64/codegen-x64.cc Wed Aug 19 08:14:11 2009
+++ /branches/bleeding_edge/src/x64/codegen-x64.cc Mon Aug 24 04:56:29 2009
@@ -6264,8 +6264,8 @@
} else {
unsigned_left >>= shift_amount;
}
- ASSERT(Smi::IsValid(unsigned_left)); // Converted to signed.
- answer_object = Smi::FromInt(unsigned_left); // Converted to
signed.
+ ASSERT(Smi::IsValid(static_cast<int32_t>(unsigned_left)));
+ answer_object = Smi::FromInt(static_cast<int32_t>(unsigned_left));
break;
}
default:
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---