Index: src/x64/debug-x64.cc |
diff --git a/src/x64/debug-x64.cc b/src/x64/debug-x64.cc |
index a337b0d052f7252ea1baa0e3b1d0bfe608fd87a7..8de11f256a3fdd04d3da56ceb40625c5dcbf1e39 100644 |
--- a/src/x64/debug-x64.cc |
+++ b/src/x64/debug-x64.cc |
@@ -127,11 +127,19 @@ static void Generate_DebugBreakCallHelper(MacroAssembler* masm, |
// Store the 64-bit value as two smis. |
if ((non_object_regs & (1 << r)) != 0) { |
__ movq(kScratchRegister, reg); |
+#if !V8_USE_31_BITS_SMI_VALUE |
__ Integer32ToSmi(reg, reg); |
__ push(reg); |
__ sar(kScratchRegister, Immediate(32)); |
__ Integer32ToSmi(kScratchRegister, kScratchRegister); |
__ push(kScratchRegister); |
+#else |
+ __ shr(reg, Immediate(63)); |
+ __ shll(reg, Immediate(1)); |
+ __ push(reg); |
+ __ shl(kScratchRegister, Immediate(1)); |
+ __ push(kScratchRegister); |
+#endif |
} |
} |
@@ -157,11 +165,18 @@ static void Generate_DebugBreakCallHelper(MacroAssembler* masm, |
// Reconstruct the 64-bit value from two smis. |
if ((non_object_regs & (1 << r)) != 0) { |
__ pop(kScratchRegister); |
+#if !V8_USE_31_BITS_SMI_VALUE |
__ SmiToInteger32(kScratchRegister, kScratchRegister); |
__ shl(kScratchRegister, Immediate(32)); |
__ pop(reg); |
__ SmiToInteger32(reg, reg); |
__ or_(reg, kScratchRegister); |
+#else |
+ __ shr(kScratchRegister, Immediate(1)); |
+ __ pop(reg); |
+ __ shl(reg, Immediate(62)); |
+ __ or_(reg, kScratchRegister); |
+#endif |
} |
} |