Chromium Code Reviews| Index: src/deoptimizer.h |
| diff --git a/src/deoptimizer.h b/src/deoptimizer.h |
| index edf6c504f1c1340ae9345dd510a7dbc8c34d5f11..2ce4fd2c2d1777a547e15e939b48629fe9d23d9b 100644 |
| --- a/src/deoptimizer.h |
| +++ b/src/deoptimizer.h |
| @@ -38,6 +38,22 @@ |
| namespace v8 { |
| namespace internal { |
|
Jakob Kummerow
2013/05/10 10:06:28
nit: two empty newlines between top-level things,
palfia
2013/05/17 17:24:32
Done.
|
| +// Prevent gcc from using load-double (mips ldc1) on (possibly) |
| +// non-64-bit aligned address. |
| +static inline double read_double_value(Address p) { |
| +#ifndef V8_TARGET_ARCH_MIPS |
|
danno
2013/05/10 10:15:55
I think it's better to use the platform independen
palfia
2013/05/17 17:24:32
Done.
|
| + return Memory::double_at(p) |
| +#else // V8_TARGET_ARCH_MIPS |
| + union conversion { |
| + double d; |
| + uint32_t u[2]; |
| + } c; |
|
danno
2013/05/10 10:15:55
And if you do that, you will need to make sure tha
|
| + c.u[0] = (*reinterpret_cast<uint32_t*>(p)); |
|
Jakob Kummerow
2013/05/10 10:06:28
nit: don't need the outer parentheses.
palfia
2013/05/17 17:24:32
Done.
|
| + c.u[1] = (*reinterpret_cast<uint32_t*>(p + 4)); |
| + return c.d; |
| +#endif // V8_TARGET_ARCH_MIPS |
| +} |
| + |
| class FrameDescription; |
| class TranslationIterator; |
| class DeoptimizingCodeListNode; |
| @@ -492,19 +508,7 @@ class FrameDescription { |
| double GetDoubleFrameSlot(unsigned offset) { |
| intptr_t* ptr = GetFrameSlotPointer(offset); |
| -#if V8_TARGET_ARCH_MIPS |
| - // Prevent gcc from using load-double (mips ldc1) on (possibly) |
| - // non-64-bit aligned double. Uses two lwc1 instructions. |
| - union conversion { |
| - double d; |
| - uint32_t u[2]; |
| - } c; |
| - c.u[0] = *reinterpret_cast<uint32_t*>(ptr); |
| - c.u[1] = *(reinterpret_cast<uint32_t*>(ptr) + 1); |
| - return c.d; |
| -#else |
| - return *reinterpret_cast<double*>(ptr); |
| -#endif |
| + return read_double_value(reinterpret_cast<Address>(ptr)); |
| } |
| void SetFrameSlot(unsigned offset, intptr_t value) { |
| @@ -800,7 +804,7 @@ class SlotRef BASE_EMBEDDED { |
| } |
| case DOUBLE: { |
| - double value = Memory::double_at(addr_); |
| + double value = read_double_value(addr_); |
| return isolate->factory()->NewNumber(value); |
| } |