Reviewers: Erik Corry, Description: Handle loading the property name for load IC in the virtual frame
Please review this at http://codereview.chromium.org/1946001/show SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/arm/codegen-arm.cc M src/arm/virtual-frame-arm.h M src/arm/virtual-frame-arm.cc Index: src/arm/codegen-arm.cc =================================================================== --- src/arm/codegen-arm.cc (revision 4576) +++ src/arm/codegen-arm.cc (working copy) @@ -1343,9 +1343,7 @@ // give us a megamorphic load site. Not super, but it works. LoadAndSpill(applicand); Handle<String> name = Factory::LookupAsciiSymbol("apply"); - __ mov(r2, Operand(name)); - __ ldr(r0, MemOperand(sp, 0)); - frame_->CallLoadIC(RelocInfo::CODE_TARGET); + frame_->CallLoadIC(name, RelocInfo::CODE_TARGET); frame_->EmitPush(r0); // Load the receiver and the existing arguments object onto the @@ -3012,11 +3010,10 @@ // Load the global object. LoadGlobal(); // Setup the name register and call load IC. - frame_->SpillAllButCopyTOSToR0(); - __ mov(r2, Operand(slot->var()->name())); - frame_->CallLoadIC(typeof_state == INSIDE_TYPEOF - ? RelocInfo::CODE_TARGET - : RelocInfo::CODE_TARGET_CONTEXT); + frame_->CallLoadIC(slot->var()->name(), + typeof_state == INSIDE_TYPEOF + ? RelocInfo::CODE_TARGET + : RelocInfo::CODE_TARGET_CONTEXT); // Drop the global object. The result is in r0. frame_->Drop(); } @@ -5445,11 +5442,10 @@ if (is_contextual || scope()->is_global_scope() || loop_nesting() == 0) { Comment cmnt(masm(), "[ Load from named Property"); // Setup the name register and call load IC. - frame_->SpillAllButCopyTOSToR0(); - __ mov(r2, Operand(name)); - frame_->CallLoadIC(is_contextual - ? RelocInfo::CODE_TARGET_CONTEXT - : RelocInfo::CODE_TARGET); + frame_->CallLoadIC(name, + is_contextual + ? RelocInfo::CODE_TARGET_CONTEXT + : RelocInfo::CODE_TARGET); } else { // Inline the in-object property case. Comment cmnt(masm(), "[ Inlined named property load"); Index: src/arm/virtual-frame-arm.cc =================================================================== --- src/arm/virtual-frame-arm.cc (revision 4576) +++ src/arm/virtual-frame-arm.cc (working copy) @@ -298,8 +298,10 @@ } -void VirtualFrame::CallLoadIC(RelocInfo::Mode mode) { +void VirtualFrame::CallLoadIC(Handle<String> name, RelocInfo::Mode mode) { Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); + SpillAllButCopyTOSToR0(); + __ mov(r2, Operand(name)); CallCodeObject(ic, mode, 0); } Index: src/arm/virtual-frame-arm.h =================================================================== --- src/arm/virtual-frame-arm.h (revision 4576) +++ src/arm/virtual-frame-arm.h (working copy) @@ -308,9 +308,8 @@ InvokeJSFlags flag, int arg_count); - // Call load IC. Receiver is on the stack and the property name is in r2. - // Result is returned in r0. - void CallLoadIC(RelocInfo::Mode mode); + // Call load IC. Receiver is on the stack. Result is returned in r0. + void CallLoadIC(Handle<String> name, RelocInfo::Mode mode); // Call store IC. If the load is contextual, value is found on top of the // frame. If not, value and receiver are on the frame. Both are consumed. -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
