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

Unified Diff: src/ppc/assembler-ppc-inl.h

Issue 1155703006: Revert of Embedded constant pools. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 7 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
« no previous file with comments | « src/ppc/assembler-ppc.cc ('k') | src/ppc/builtins-ppc.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ppc/assembler-ppc-inl.h
diff --git a/src/ppc/assembler-ppc-inl.h b/src/ppc/assembler-ppc-inl.h
index 89a3d7ef7e0ec1e7cd032016028947ee4b10633f..d95c7ec5968a5e8fec471bdabed8f6dcf84d01d4 100644
--- a/src/ppc/assembler-ppc-inl.h
+++ b/src/ppc/assembler-ppc-inl.h
@@ -94,13 +94,6 @@
DCHECK(IsCodeTarget(rmode_) || IsRuntimeEntry(rmode_) ||
rmode_ == EMBEDDED_OBJECT || rmode_ == EXTERNAL_REFERENCE);
- if (FLAG_enable_embedded_constant_pool &&
- Assembler::IsConstantPoolLoadStart(pc_)) {
- // We return the PC for ool constant pool since this function is used by the
- // serializer and expects the address to reside within the code object.
- return reinterpret_cast<Address>(pc_);
- }
-
// Read the address of the word containing the target_address in an
// instruction stream.
// The only architecture-independent user of this function is the serializer.
@@ -115,14 +108,6 @@
Address RelocInfo::constant_pool_entry_address() {
- if (FLAG_enable_embedded_constant_pool) {
- Address constant_pool = host_->constant_pool();
- DCHECK(constant_pool);
- ConstantPoolEntry::Access access;
- if (Assembler::IsConstantPoolLoadStart(pc_, &access))
- return Assembler::target_constant_pool_address_at(
- pc_, constant_pool, access, ConstantPoolEntry::INTPTR);
- }
UNREACHABLE();
return NULL;
}
@@ -158,28 +143,12 @@
// mtlr ip
// blrl
// @ return address
- int len;
- ConstantPoolEntry::Access access;
- if (FLAG_enable_embedded_constant_pool &&
- IsConstantPoolLoadEnd(pc - 3 * kInstrSize, &access)) {
- len = (access == ConstantPoolEntry::OVERFLOWED) ? 2 : 1;
- } else {
- len = kMovInstructionsNoConstantPool;
- }
- return pc - (len + 2) * kInstrSize;
+ return pc - (kMovInstructions + 2) * kInstrSize;
}
Address Assembler::return_address_from_call_start(Address pc) {
- int len;
- ConstantPoolEntry::Access access;
- if (FLAG_enable_embedded_constant_pool &&
- IsConstantPoolLoadStart(pc, &access)) {
- len = (access == ConstantPoolEntry::OVERFLOWED) ? 2 : 1;
- } else {
- len = kMovInstructionsNoConstantPool;
- }
- return pc + (len + 2) * kInstrSize;
+ return pc + (kMovInstructions + 2) * kInstrSize;
}
@@ -257,10 +226,8 @@
}
-static const int kNoCodeAgeInstructions =
- FLAG_enable_embedded_constant_pool ? 7 : 6;
-static const int kCodeAgingInstructions =
- Assembler::kMovInstructionsNoConstantPool + 3;
+static const int kNoCodeAgeInstructions = 6;
+static const int kCodeAgingInstructions = Assembler::kMovInstructions + 3;
static const int kNoCodeAgeSequenceInstructions =
((kNoCodeAgeInstructions >= kCodeAgingInstructions)
? kNoCodeAgeInstructions
@@ -481,14 +448,8 @@
// Fetch the 32bit value from the FIXED_SEQUENCE lis/ori
-Address Assembler::target_address_at(Address pc, Address constant_pool) {
- if (FLAG_enable_embedded_constant_pool && constant_pool) {
- ConstantPoolEntry::Access access;
- if (IsConstantPoolLoadStart(pc, &access))
- return Memory::Address_at(target_constant_pool_address_at(
- pc, constant_pool, access, ConstantPoolEntry::INTPTR));
- }
-
+Address Assembler::target_address_at(Address pc,
+ ConstantPoolArray* constant_pool) {
Instr instr1 = instr_at(pc);
Instr instr2 = instr_at(pc + kInstrSize);
// Interpret 2 instructions generated by lis/ori
@@ -514,124 +475,6 @@
}
-#if V8_TARGET_ARCH_PPC64
-const int kLoadIntptrOpcode = LD;
-#else
-const int kLoadIntptrOpcode = LWZ;
-#endif
-
-// Constant pool load sequence detection:
-// 1) REGULAR access:
-// load <dst>, kConstantPoolRegister + <offset>
-//
-// 2) OVERFLOWED access:
-// addis <scratch>, kConstantPoolRegister, <offset_high>
-// load <dst>, <scratch> + <offset_low>
-bool Assembler::IsConstantPoolLoadStart(Address pc,
- ConstantPoolEntry::Access* access) {
- Instr instr = instr_at(pc);
- int opcode = instr & kOpcodeMask;
- if (!GetRA(instr).is(kConstantPoolRegister)) return false;
- bool overflowed = (opcode == ADDIS);
-#ifdef DEBUG
- if (overflowed) {
- opcode = instr_at(pc + kInstrSize) & kOpcodeMask;
- }
- DCHECK(opcode == kLoadIntptrOpcode || opcode == LFD);
-#endif
- if (access) {
- *access = (overflowed ? ConstantPoolEntry::OVERFLOWED
- : ConstantPoolEntry::REGULAR);
- }
- return true;
-}
-
-
-bool Assembler::IsConstantPoolLoadEnd(Address pc,
- ConstantPoolEntry::Access* access) {
- Instr instr = instr_at(pc);
- int opcode = instr & kOpcodeMask;
- if (!(opcode == kLoadIntptrOpcode || opcode == LFD)) return false;
- bool overflowed = !GetRA(instr).is(kConstantPoolRegister);
-#ifdef DEBUG
- if (overflowed) {
- instr = instr_at(pc - kInstrSize);
- opcode = instr & kOpcodeMask;
- DCHECK((opcode == ADDIS) && GetRA(instr).is(kConstantPoolRegister));
- }
-#endif
- if (access) {
- *access = (overflowed ? ConstantPoolEntry::OVERFLOWED
- : ConstantPoolEntry::REGULAR);
- }
- return true;
-}
-
-
-int Assembler::GetConstantPoolOffset(Address pc,
- ConstantPoolEntry::Access access,
- ConstantPoolEntry::Type type) {
- bool overflowed = (access == ConstantPoolEntry::OVERFLOWED);
-#ifdef DEBUG
- ConstantPoolEntry::Access access_check;
- DCHECK(IsConstantPoolLoadStart(pc, &access_check));
- DCHECK(access_check == access);
-#endif
- int offset;
- if (overflowed) {
- offset = (instr_at(pc) & kImm16Mask) << 16;
- offset += SIGN_EXT_IMM16(instr_at(pc + kInstrSize) & kImm16Mask);
- DCHECK(!is_int16(offset));
- } else {
- offset = SIGN_EXT_IMM16((instr_at(pc) & kImm16Mask));
- }
- return offset;
-}
-
-
-void Assembler::PatchConstantPoolAccessInstruction(
- int pc_offset, int offset, ConstantPoolEntry::Access access,
- ConstantPoolEntry::Type type) {
- Address pc = buffer_ + pc_offset;
- bool overflowed = (access == ConstantPoolEntry::OVERFLOWED);
-#ifdef DEBUG
- ConstantPoolEntry::Access access_check;
- DCHECK(IsConstantPoolLoadStart(pc, &access_check));
- DCHECK(access_check == access);
- DCHECK(overflowed != is_int16(offset));
-#endif
- if (overflowed) {
- int hi_word = static_cast<int>(offset >> 16);
- int lo_word = static_cast<int>(offset & 0xffff);
- if (lo_word & 0x8000) hi_word++;
-
- Instr instr1 = instr_at(pc);
- Instr instr2 = instr_at(pc + kInstrSize);
- instr1 &= ~kImm16Mask;
- instr1 |= (hi_word & kImm16Mask);
- instr2 &= ~kImm16Mask;
- instr2 |= (lo_word & kImm16Mask);
- instr_at_put(pc, instr1);
- instr_at_put(pc + kInstrSize, instr2);
- } else {
- Instr instr = instr_at(pc);
- instr &= ~kImm16Mask;
- instr |= (offset & kImm16Mask);
- instr_at_put(pc, instr);
- }
-}
-
-
-Address Assembler::target_constant_pool_address_at(
- Address pc, Address constant_pool, ConstantPoolEntry::Access access,
- ConstantPoolEntry::Type type) {
- Address addr = constant_pool;
- DCHECK(addr);
- addr += GetConstantPoolOffset(pc, access, type);
- return addr;
-}
-
-
// This sets the branch destination (which gets loaded at the call address).
// This is for calls and branches within generated code. The serializer
// has already deserialized the mov instructions etc.
@@ -654,18 +497,10 @@
// This code assumes the FIXED_SEQUENCE of lis/ori
-void Assembler::set_target_address_at(Address pc, Address constant_pool,
+void Assembler::set_target_address_at(Address pc,
+ ConstantPoolArray* constant_pool,
Address target,
ICacheFlushMode icache_flush_mode) {
- if (FLAG_enable_embedded_constant_pool && constant_pool) {
- ConstantPoolEntry::Access access;
- if (IsConstantPoolLoadStart(pc, &access)) {
- Memory::Address_at(target_constant_pool_address_at(
- pc, constant_pool, access, ConstantPoolEntry::INTPTR)) = target;
- return;
- }
- }
-
Instr instr1 = instr_at(pc);
Instr instr2 = instr_at(pc + kInstrSize);
// Interpret 2 instructions generated by lis/ori
« no previous file with comments | « src/ppc/assembler-ppc.cc ('k') | src/ppc/builtins-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698