Index: src/deoptimizer.h |
diff --git a/src/deoptimizer.h b/src/deoptimizer.h |
index 33580a1b9cb58973e0e4552058f8aa05acdc9a40..284676c36eeef1152ef3731d716240b5058aeb25 100644 |
--- a/src/deoptimizer.h |
+++ b/src/deoptimizer.h |
@@ -369,7 +369,20 @@ class FrameDescription { |
} |
double GetDoubleFrameSlot(unsigned offset) { |
- return *reinterpret_cast<double*>(GetFrameSlotPointer(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 |
} |
void SetFrameSlot(unsigned offset, intptr_t value) { |