Chromium Code Reviews| 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; |