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

Unified Diff: src/ppc/lithium-codegen-ppc.cc

Issue 985933003: PPC: simplify delta calculation in DoDeferredInstanceOfKnownGlobal. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ppc/lithium-codegen-ppc.cc
diff --git a/src/ppc/lithium-codegen-ppc.cc b/src/ppc/lithium-codegen-ppc.cc
index 706ab20520a06355ef307f8b6a0996137d52b3fb..4646ce644373330f6fb41092eec2a47affcb6ccf 100644
--- a/src/ppc/lithium-codegen-ppc.cc
+++ b/src/ppc/lithium-codegen-ppc.cc
@@ -2941,22 +2941,25 @@ void LCodeGen::DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
LoadContextFromDeferred(instr->context());
__ Move(InstanceofStub::right(), instr->function());
- // Include instructions below in delta: mov + call = mov + (mov + 2)
- static const int kAdditionalDelta = 2 * Assembler::kMovInstructions + 2;
- int delta = masm_->InstructionsGeneratedSince(map_check) + kAdditionalDelta;
{
Assembler::BlockTrampolinePoolScope block_trampoline_pool(masm_);
- if (Assembler::kMovInstructions != 1 &&
- is_int16(delta * Instruction::kInstrSize)) {
- // The following mov will be an li rather than a multi-instruction form
- delta -= Assembler::kMovInstructions - 1;
- }
+ Handle<Code> code = stub.GetCode();
+ // Include instructions below in delta: bitwise_mov32 + call
+ int delta = (masm_->InstructionsGeneratedSince(map_check) + 2) *
+ Instruction::kInstrSize +
+ masm_->CallSize(code);
// r8 is used to communicate the offset to the location of the map check.
- __ mov(r8, Operand(delta * Instruction::kInstrSize));
+ if (is_int16(delta)) {
+ delta -= Instruction::kInstrSize;
+ __ li(r8, Operand(delta));
+ } else {
+ __ bitwise_mov32(r8, delta);
+ }
+ CallCodeGeneric(code, RelocInfo::CODE_TARGET, instr,
+ RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS);
+ DCHECK(delta / Instruction::kInstrSize ==
+ masm_->InstructionsGeneratedSince(map_check));
}
- CallCodeGeneric(stub.GetCode(), RelocInfo::CODE_TARGET, instr,
- RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS);
- DCHECK(delta == masm_->InstructionsGeneratedSince(map_check));
LEnvironment* env = instr->GetDeferredLazyDeoptimizationEnvironment();
safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index());
// Put the result value (r3) into the result register slot and
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698