From 7024980851be042d0185dba54f9558ef2ba8108d Mon Sep 17 00:00:00 2001 From: "jkummerow@chromium.org" Date: Tue, 22 Jul 2014 11:35:49 +0000 Subject: [PATCH] SlotRef::GetValue INT32 case needs to be 64bit big endian aware On 64bit big endian systems fetch the correct 32bits from the slot BUG=v8:3449 LOG=N R=jkummerow@chromium.org Review URL: https://codereview.chromium.org/403003002 Patch from Andrew Low . git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22522 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/deoptimizer.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc index 294e09c6a3..e6432c94d1 100644 --- a/src/deoptimizer.cc +++ b/src/deoptimizer.cc @@ -3268,7 +3268,11 @@ Handle SlotRef::GetValue(Isolate* isolate) { return Handle(Memory::Object_at(addr_), isolate); case INT32: { +#if V8_TARGET_BIG_ENDIAN && V8_HOST_ARCH_64_BIT + int value = Memory::int32_at(addr_ + kIntSize); +#else int value = Memory::int32_at(addr_); +#endif if (Smi::IsValid(value)) { return Handle(Smi::FromInt(value), isolate); } else { @@ -3277,7 +3281,11 @@ Handle SlotRef::GetValue(Isolate* isolate) { } case UINT32: { +#if V8_TARGET_BIG_ENDIAN && V8_HOST_ARCH_64_BIT + uint32_t value = Memory::uint32_at(addr_ + kIntSize); +#else uint32_t value = Memory::uint32_at(addr_); +#endif if (value <= static_cast(Smi::kMaxValue)) { return Handle(Smi::FromInt(static_cast(value)), isolate); } else {