From bf48856a7d10f2dbd48624823d09fc2cd9fd17fe Mon Sep 17 00:00:00 2001 From: "verwaest@chromium.org" Date: Tue, 18 Sep 2012 13:52:18 +0000 Subject: [PATCH] MIPS: Do not go to slow mode and back to fast in initializer blocks. Port r12534 (4acfb92e) BUG= TEST= Committed: https://code.google.com/p/v8/source/detail?r=12539 Review URL: https://chromiumcodereview.appspot.com/10905313 Patch from Akos Palfi . git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12541 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mips/full-codegen-mips.cc | 59 ++----------------------------------------- 1 file changed, 2 insertions(+), 57 deletions(-) diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc index bfa2425..0d758a6 100644 --- a/src/mips/full-codegen-mips.cc +++ b/src/mips/full-codegen-mips.cc @@ -2208,44 +2208,17 @@ void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) { ASSERT(prop != NULL); ASSERT(prop->key()->AsLiteral() != NULL); - // If the assignment starts a block of assignments to the same object, - // change to slow case to avoid the quadratic behavior of repeatedly - // adding fast properties. - if (expr->starts_initialization_block()) { - __ push(result_register()); - __ lw(t0, MemOperand(sp, kPointerSize)); // Receiver is now under value. - __ push(t0); - __ CallRuntime(Runtime::kToSlowProperties, 1); - __ pop(result_register()); - } - // Record source code position before IC call. SetSourcePosition(expr->position()); __ mov(a0, result_register()); // Load the value. __ li(a2, Operand(prop->key()->AsLiteral()->handle())); - // Load receiver to a1. Leave a copy in the stack if needed for turning the - // receiver into fast case. - if (expr->ends_initialization_block()) { - __ lw(a1, MemOperand(sp)); - } else { - __ pop(a1); - } + __ pop(a1); Handle ic = is_classic_mode() ? isolate()->builtins()->StoreIC_Initialize() : isolate()->builtins()->StoreIC_Initialize_Strict(); CallIC(ic, RelocInfo::CODE_TARGET, expr->AssignmentFeedbackId()); - // If the assignment ends an initialization block, revert to fast case. - if (expr->ends_initialization_block()) { - __ push(v0); // Result of assignment, saved even if not needed. - // Receiver is under the result value. - __ lw(t0, MemOperand(sp, kPointerSize)); - __ push(t0); - __ CallRuntime(Runtime::kToFastProperties, 1); - __ pop(v0); - __ Drop(1); - } PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); context()->Plug(v0); } @@ -2254,18 +2227,6 @@ void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) { void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) { // Assignment to a property, using a keyed store IC. - // If the assignment starts a block of assignments to the same object, - // change to slow case to avoid the quadratic behavior of repeatedly - // adding fast properties. - if (expr->starts_initialization_block()) { - __ push(result_register()); - // Receiver is now under the key and value. - __ lw(t0, MemOperand(sp, 2 * kPointerSize)); - __ push(t0); - __ CallRuntime(Runtime::kToSlowProperties, 1); - __ pop(result_register()); - } - // Record source code position before IC call. SetSourcePosition(expr->position()); // Call keyed store IC. @@ -2275,29 +2236,13 @@ void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) { // - a2 is the receiver. __ mov(a0, result_register()); __ pop(a1); // Key. - // Load receiver to a2. Leave a copy in the stack if needed for turning the - // receiver into fast case. - if (expr->ends_initialization_block()) { - __ lw(a2, MemOperand(sp)); - } else { - __ pop(a2); - } + __ pop(a2); Handle ic = is_classic_mode() ? isolate()->builtins()->KeyedStoreIC_Initialize() : isolate()->builtins()->KeyedStoreIC_Initialize_Strict(); CallIC(ic, RelocInfo::CODE_TARGET, expr->AssignmentFeedbackId()); - // If the assignment ends an initialization block, revert to fast case. - if (expr->ends_initialization_block()) { - __ push(v0); // Result of assignment, saved even if not needed. - // Receiver is under the result value. - __ lw(t0, MemOperand(sp, kPointerSize)); - __ push(t0); - __ CallRuntime(Runtime::kToFastProperties, 1); - __ pop(v0); - __ Drop(1); - } PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); context()->Plug(v0); } -- 2.7.4