ARM: Improve code aging sequence.

The code aging sequence contains a load which is unecessary for optimised
function. This has been replaced by a nop.

BUG=none
TEST=none

Review URL: https://chromiumcodereview.appspot.com/19379003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15697 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 0e99e771
...@@ -838,7 +838,7 @@ static byte* GetNoCodeAgeSequence(uint32_t* length) { ...@@ -838,7 +838,7 @@ static byte* GetNoCodeAgeSequence(uint32_t* length) {
CodePatcher patcher(byte_sequence, kNoCodeAgeSequenceLength); CodePatcher patcher(byte_sequence, kNoCodeAgeSequenceLength);
PredictableCodeSizeScope scope(patcher.masm(), *length); PredictableCodeSizeScope scope(patcher.masm(), *length);
patcher.masm()->stm(db_w, sp, r1.bit() | cp.bit() | fp.bit() | lr.bit()); patcher.masm()->stm(db_w, sp, r1.bit() | cp.bit() | fp.bit() | lr.bit());
patcher.masm()->LoadRoot(ip, Heap::kUndefinedValueRootIndex); patcher.masm()->nop(ip.code());
patcher.masm()->add(fp, sp, Operand(2 * kPointerSize)); patcher.masm()->add(fp, sp, Operand(2 * kPointerSize));
initialized = true; initialized = true;
} }
......
...@@ -169,9 +169,7 @@ void FullCodeGenerator::Generate() { ...@@ -169,9 +169,7 @@ void FullCodeGenerator::Generate() {
// The following three instructions must remain together and unmodified // The following three instructions must remain together and unmodified
// for code aging to work properly. // for code aging to work properly.
__ stm(db_w, sp, r1.bit() | cp.bit() | fp.bit() | lr.bit()); __ stm(db_w, sp, r1.bit() | cp.bit() | fp.bit() | lr.bit());
// Load undefined value here, so the value is ready for the loop __ nop(ip.code());
// below.
__ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
// Adjust FP to point to saved FP. // Adjust FP to point to saved FP.
__ add(fp, sp, Operand(2 * kPointerSize)); __ add(fp, sp, Operand(2 * kPointerSize));
} }
...@@ -181,10 +179,13 @@ void FullCodeGenerator::Generate() { ...@@ -181,10 +179,13 @@ void FullCodeGenerator::Generate() {
int locals_count = info->scope()->num_stack_slots(); int locals_count = info->scope()->num_stack_slots();
// Generators allocate locals, if any, in context slots. // Generators allocate locals, if any, in context slots.
ASSERT(!info->function()->is_generator() || locals_count == 0); ASSERT(!info->function()->is_generator() || locals_count == 0);
if (locals_count > 0) {
__ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
for (int i = 0; i < locals_count; i++) { for (int i = 0; i < locals_count; i++) {
__ push(ip); __ push(ip);
} }
} }
}
bool function_in_register = true; bool function_in_register = true;
......
...@@ -161,9 +161,7 @@ bool LCodeGen::GeneratePrologue() { ...@@ -161,9 +161,7 @@ bool LCodeGen::GeneratePrologue() {
// The following three instructions must remain together and unmodified // The following three instructions must remain together and unmodified
// for code aging to work properly. // for code aging to work properly.
__ stm(db_w, sp, r1.bit() | cp.bit() | fp.bit() | lr.bit()); __ stm(db_w, sp, r1.bit() | cp.bit() | fp.bit() | lr.bit());
// Load undefined value here, so the value is ready for the loop __ nop(ip.code());
// below.
__ LoadRoot(ip, Heap::kUndefinedValueRootIndex);
// Adjust FP to point to saved FP. // Adjust FP to point to saved FP.
__ add(fp, sp, Operand(2 * kPointerSize)); __ add(fp, sp, Operand(2 * kPointerSize));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment