Index: src/assembler.cc |
=================================================================== |
--- src/assembler.cc (revision 13219) |
+++ src/assembler.cc (working copy) |
@@ -293,10 +293,14 @@ |
const int kStatementPositionTag = 2; |
const int kCommentTag = 3; |
+#if !defined(V8_TARGET_ARCH_X64) |
Sven Panne
2012/12/14 08:20:11
Again for this and the rest of the file: No archit
|
const int kConstPoolExtraTag = kPCJumpExtraTag - 2; |
const int kConstPoolTag = 3; |
+#else |
+const int kDeoptEntryExtraTag = kPCJumpExtraTag - 2; |
+const int kDeoptEntryTag = 3; |
+#endif |
- |
uint32_t RelocInfoWriter::WriteVariableLengthPCJump(uint32_t pc_delta) { |
// Return if the pc_delta can fit in kSmallPCDeltaBits bits. |
// Otherwise write a variable length PC jump for the bits that do |
@@ -353,6 +357,8 @@ |
} |
} |
+ |
+#if !defined(V8_TARGET_ARCH_X64) |
void RelocInfoWriter::WriteExtraTaggedConstPoolData(int data) { |
WriteExtraTag(kConstPoolExtraTag, kConstPoolTag); |
for (int i = 0; i < kIntSize; i++) { |
@@ -361,7 +367,18 @@ |
data = data >> kBitsPerByte; |
} |
} |
+#else |
+void RelocInfoWriter::WriteExtraTaggedDeoptEntryData(int data) { |
+ WriteExtraTag(kDeoptEntryExtraTag, kDeoptEntryTag); |
+ for (int i = 0; i < kIntSize; i++) { |
+ *--pos_ = static_cast<byte>(data); |
+ // Signed right shift is arithmetic shift. Tested in test-utils.cc. |
+ data = data >> kBitsPerByte; |
+ } |
+} |
+#endif |
+ |
void RelocInfoWriter::WriteExtraTaggedData(intptr_t data_delta, int top_tag) { |
WriteExtraTag(kDataJumpExtraTag, top_tag); |
for (int i = 0; i < kIntptrSize; i++) { |
@@ -425,9 +442,15 @@ |
WriteExtraTaggedPC(pc_delta, kPCJumpExtraTag); |
WriteExtraTaggedData(rinfo->data(), kCommentTag); |
ASSERT(begin_pos - pos_ >= RelocInfo::kMinRelocCommentSize); |
+#if !defined(V8_TARGET_ARCH_X64) |
} else if (RelocInfo::IsConstPool(rmode)) { |
WriteExtraTaggedPC(pc_delta, kPCJumpExtraTag); |
WriteExtraTaggedConstPoolData(static_cast<int>(rinfo->data())); |
+#else |
+ } else if (RelocInfo::IsDeoptEntry(rmode)) { |
+ WriteExtraTaggedPC(pc_delta, kPCJumpExtraTag); |
+ WriteExtraTaggedDeoptEntryData(static_cast<int>(rinfo->data())); |
+#endif |
} else { |
ASSERT(rmode > RelocInfo::LAST_COMPACT_ENUM); |
int saved_mode = rmode - RelocInfo::LAST_COMPACT_ENUM; |
@@ -620,6 +643,7 @@ |
} |
Advance(kIntptrSize); |
} |
+#if !defined(V8_TARGET_ARCH_X64) |
} else if ((extra_tag == kConstPoolExtraTag) && |
(GetTopTag() == kConstPoolTag)) { |
if (SetMode(RelocInfo::CONST_POOL)) { |
@@ -627,6 +651,15 @@ |
return; |
} |
Advance(kIntSize); |
+#else |
+ } else if ((extra_tag == kDeoptEntryExtraTag) && |
+ (GetTopTag() == kDeoptEntryTag)) { |
+ if (SetMode(RelocInfo::DEOPT_ENTRY)) { |
+ AdvanceReadConstPoolData(); |
+ return; |
+ } |
+ Advance(kIntSize); |
+#endif |
} else { |
AdvanceReadPC(); |
int rmode = extra_tag + RelocInfo::LAST_COMPACT_ENUM; |
@@ -725,8 +758,13 @@ |
return "external reference"; |
case RelocInfo::INTERNAL_REFERENCE: |
return "internal reference"; |
+#if !defined(V8_TARGET_ARCH_X64) |
case RelocInfo::CONST_POOL: |
return "constant pool"; |
+#else |
+ case RelocInfo::DEOPT_ENTRY: |
+ return "deopt entry"; |
+#endif |
case RelocInfo::DEBUG_BREAK_SLOT: |
#ifndef ENABLE_DEBUGGER_SUPPORT |
UNREACHABLE(); |
@@ -814,7 +852,11 @@ |
case STATEMENT_POSITION: |
case EXTERNAL_REFERENCE: |
case INTERNAL_REFERENCE: |
+#if !defined(V8_TARGET_ARCH_X64) |
case CONST_POOL: |
+#else |
+ case DEOPT_ENTRY: |
+#endif |
case DEBUG_BREAK_SLOT: |
case NONE: |
break; |