Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1799)

Unified Diff: src/x64/debug-x64.cc

Issue 21014003: Optionally use 31-bits SMI value for 64-bit system (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Use (kSmiValueSize == 31) or (kSmiValueSize == 32) for SMI functions in macro assembler" Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/x64/debug-x64.cc
diff --git a/src/x64/debug-x64.cc b/src/x64/debug-x64.cc
index a337b0d052f7252ea1baa0e3b1d0bfe608fd87a7..226553c977e41c88dbbb6831e312bc716e2d6249 100644
--- a/src/x64/debug-x64.cc
+++ b/src/x64/debug-x64.cc
@@ -127,11 +127,20 @@ static void Generate_DebugBreakCallHelper(MacroAssembler* masm,
// Store the 64-bit value as two smis.
if ((non_object_regs & (1 << r)) != 0) {
__ movq(kScratchRegister, reg);
danno 2013/08/01 16:45:41 Watch out. You have change the semantic here sligh
haitao.feng 2013/08/02 09:35:51 Done. I used the name PushInt64AsTwoSmis and PopIn
- __ Integer32ToSmi(reg, reg);
- __ push(reg);
- __ sar(kScratchRegister, Immediate(32));
- __ Integer32ToSmi(kScratchRegister, kScratchRegister);
- __ push(kScratchRegister);
+ if (kSmiValueSize == 32) {
+ __ Integer32ToSmi(reg, reg);
+ __ push(reg);
+ __ sar(kScratchRegister, Immediate(32));
+ __ Integer32ToSmi(kScratchRegister, kScratchRegister);
+ __ push(kScratchRegister);
+ } else {
+ ASSERT(kSmiValueSize == 31);
+ __ shr(reg, Immediate(63));
+ __ shll(reg, Immediate(1));
+ __ push(reg);
+ __ shl(kScratchRegister, Immediate(1));
+ __ push(kScratchRegister);
+ }
}
}
@@ -157,11 +166,19 @@ static void Generate_DebugBreakCallHelper(MacroAssembler* masm,
// Reconstruct the 64-bit value from two smis.
if ((non_object_regs & (1 << r)) != 0) {
__ pop(kScratchRegister);
- __ SmiToInteger32(kScratchRegister, kScratchRegister);
- __ shl(kScratchRegister, Immediate(32));
- __ pop(reg);
- __ SmiToInteger32(reg, reg);
- __ or_(reg, kScratchRegister);
+ if (kSmiValueSize == 32) {
+ __ SmiToInteger32(kScratchRegister, kScratchRegister);
+ __ shl(kScratchRegister, Immediate(32));
+ __ pop(reg);
+ __ SmiToInteger32(reg, reg);
+ __ or_(reg, kScratchRegister);
+ } else {
+ ASSERT(kSmiValueSize == 31);
+ __ shr(kScratchRegister, Immediate(1));
+ __ pop(reg);
+ __ shl(reg, Immediate(62));
+ __ or_(reg, kScratchRegister);
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698