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

Unified Diff: src/arm64/full-codegen-arm64.cc

Issue 366083004: ARM64: optimize fullcodegen pushes (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 6 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/arm64/full-codegen-arm64.cc
diff --git a/src/arm64/full-codegen-arm64.cc b/src/arm64/full-codegen-arm64.cc
index 37c9ed3aa05026d78ba86ed98638399f6b2070a1..438907e8002ce553d24edfc684e0871774f80aa0 100644
--- a/src/arm64/full-codegen-arm64.cc
+++ b/src/arm64/full-codegen-arm64.cc
@@ -1165,8 +1165,9 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
FieldMemOperand(x2, DescriptorArray::kEnumCacheBridgeCacheOffset));
// Set up the four remaining stack slots.
- __ Push(x0, x2); // Map, enumeration cache.
- __ SmiTagAndPush(x1, xzr); // Enum cache length, zero (both as smis).
+ __ SmiTag(x1);
+ // Map, enumeration cache, enum cache length, zero (both last as smis).
+ __ Push(x0, x2, x1, xzr);
__ B(&loop);
__ Bind(&no_descriptors);
@@ -1187,9 +1188,9 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) {
__ CompareObjectType(x10, x11, x12, LAST_JS_PROXY_TYPE);
ASSERT(Smi::FromInt(0) == 0);
__ CzeroX(x1, le); // Zero indicates proxy.
- __ Push(x1, x0); // Smi and array
- __ Ldr(x1, FieldMemOperand(x0, FixedArray::kLengthOffset));
- __ Push(x1, xzr); // Fixed array length (as smi) and initial index.
+ __ Ldr(x2, FieldMemOperand(x0, FixedArray::kLengthOffset));
+ // Smi and array, fixed array length (as smi) and initial index.
+ __ Push(x1, x0, x2, xzr);
// Generate code for doing the condition check.
PrepareForBailoutForId(stmt->BodyId(), NO_REGISTERS);
@@ -1802,8 +1803,8 @@ void FullCodeGenerator::VisitArrayLiteral(ArrayLiteral* expr) {
if (CompileTimeValue::IsCompileTimeValue(subexpr)) continue;
if (!result_saved) {
- __ Push(x0);
- __ Push(Smi::FromInt(expr->literal_index()));
+ __ Mov(x1, Smi::FromInt(expr->literal_index()));
+ __ Push(x0, x1);
result_saved = true;
}
VisitForAccumulatorValue(subexpr);
@@ -2164,9 +2165,8 @@ void FullCodeGenerator::EmitVariableAssignment(Variable* var,
// Const initializers need a write barrier.
ASSERT(!var->IsParameter()); // No const parameters.
if (var->IsLookupSlot()) {
- __ Push(x0);
- __ Mov(x0, Operand(var->name()));
- __ Push(cp, x0); // Context and name.
+ __ Mov(x1, Operand(var->name()));
+ __ Push(x0, cp, x1);
__ CallRuntime(Runtime::kInitializeConstContextSlot, 3);
} else {
ASSERT(var->IsStackLocal() || var->IsContextSlot());
@@ -2380,16 +2380,13 @@ void FullCodeGenerator::EmitResolvePossiblyDirectEval(int arg_count) {
int receiver_offset = 2 + info_->scope()->num_parameters();
__ Ldr(x11, MemOperand(fp, receiver_offset * kPointerSize));
- // Push.
- __ Push(x10, x11);
-
// Prepare to push the language mode.
- __ Mov(x10, Smi::FromInt(strict_mode()));
+ __ Mov(x12, Smi::FromInt(strict_mode()));
// Prepare to push the start position of the scope the calls resides in.
- __ Mov(x11, Smi::FromInt(scope()->start_position()));
+ __ Mov(x13, Smi::FromInt(scope()->start_position()));
// Push.
- __ Push(x10, x11);
+ __ Push(x10, x11, x12, x13);
// Do the runtime call.
__ CallRuntime(Runtime::kResolvePossiblyDirectEval, 5);
@@ -2466,9 +2463,8 @@ void FullCodeGenerator::VisitCall(Call* expr) {
__ Bind(&slow);
// Call the runtime to find the function to call (returned in x0)
// and the object holding it (returned in x1).
- __ Push(context_register());
__ Mov(x10, Operand(proxy->name()));
- __ Push(x10);
+ __ Push(context_register(), x10);
__ CallRuntime(Runtime::kLoadContextSlot, 2);
__ Push(x0, x1); // Receiver, function.
@@ -2480,11 +2476,10 @@ void FullCodeGenerator::VisitCall(Call* expr) {
__ B(&call);
__ Bind(&done);
// Push function.
- __ Push(x0);
// The receiver is implicitly the global receiver. Indicate this
// by passing the undefined to the call function stub.
__ LoadRoot(x1, Heap::kUndefinedValueRootIndex);
- __ Push(x1);
+ __ Push(x0, x1);
__ Bind(&call);
}
« 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