From: palfia@homejinni.com Date: Wed, 17 Jul 2013 23:57:32 +0000 (+0000) Subject: MIPS: Improve code aging sequence. X-Git-Tag: upstream/4.7.83~13324 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4e0e41871a3996834a601486c3d1d8d6bb6528c1;p=platform%2Fupstream%2Fv8.git MIPS: Improve code aging sequence. Port r15697 (61d56196) Original commit message: The code aging sequence contains a load which is unecessary for optimised function. This has been replaced by a nop. BUG= Review URL: https://codereview.chromium.org/19683005 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15733 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/mips/assembler-mips.h b/src/mips/assembler-mips.h index d12c0da..8d533b3 100644 --- a/src/mips/assembler-mips.h +++ b/src/mips/assembler-mips.h @@ -583,7 +583,8 @@ class Assembler : public AssemblerBase { LAST_CODE_MARKER, FIRST_IC_MARKER = PROPERTY_ACCESS_INLINED, // Code aging - CODE_AGE_MARKER_NOP = 6 + CODE_AGE_MARKER_NOP = 6, + CODE_AGE_SEQUENCE_NOP }; // Type == 0 is the default non-marking nop. For mips this is a diff --git a/src/mips/codegen-mips.cc b/src/mips/codegen-mips.cc index 523e87c..c7acbcf 100644 --- a/src/mips/codegen-mips.cc +++ b/src/mips/codegen-mips.cc @@ -603,7 +603,7 @@ static byte* GetNoCodeAgeSequence(uint32_t* length) { if (!initialized) { CodePatcher patcher(byte_sequence, kNoCodeAgeSequenceLength); patcher.masm()->Push(ra, fp, cp, a1); - patcher.masm()->LoadRoot(at, Heap::kUndefinedValueRootIndex); + patcher.masm()->nop(Assembler::CODE_AGE_SEQUENCE_NOP); patcher.masm()->Addu(fp, sp, Operand(2 * kPointerSize)); initialized = true; } diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc index 43325df..6a59b1b 100644 --- a/src/mips/full-codegen-mips.cc +++ b/src/mips/full-codegen-mips.cc @@ -174,9 +174,7 @@ void FullCodeGenerator::Generate() { // The following three instructions must remain together and unmodified for // code aging to work properly. __ Push(ra, fp, cp, a1); - // Load undefined value here, so the value is ready for the loop - // below. - __ LoadRoot(at, Heap::kUndefinedValueRootIndex); + __ nop(Assembler::CODE_AGE_SEQUENCE_NOP); // Adjust fp to point to caller's fp. __ Addu(fp, sp, Operand(2 * kPointerSize)); info->AddNoFrameRange(0, masm_->pc_offset()); @@ -185,8 +183,11 @@ void FullCodeGenerator::Generate() { int locals_count = info->scope()->num_stack_slots(); // Generators allocate locals, if any, in context slots. ASSERT(!info->function()->is_generator() || locals_count == 0); - for (int i = 0; i < locals_count; i++) { - __ push(at); + if (locals_count > 0) { + __ LoadRoot(at, Heap::kUndefinedValueRootIndex); + for (int i = 0; i < locals_count; i++) { + __ push(at); + } } } diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc index 58a8a61..2ee70ff 100644 --- a/src/mips/lithium-codegen-mips.cc +++ b/src/mips/lithium-codegen-mips.cc @@ -159,9 +159,9 @@ bool LCodeGen::GeneratePrologue() { // The following three instructions must remain together and unmodified // for code aging to work properly. __ Push(ra, fp, cp, a1); - // Add unused load of ip to ensure prologue sequence is identical for + // Add unused nop to ensure prologue sequence is identical for // full-codegen and lithium-codegen. - __ LoadRoot(at, Heap::kUndefinedValueRootIndex); + __ nop(Assembler::CODE_AGE_SEQUENCE_NOP); // Adj. FP to point to saved FP. __ Addu(fp, sp, Operand(2 * kPointerSize)); }