Commit efe9f30f authored by sgjesse@chromium.org's avatar sgjesse@chromium.org

Handle loading the property name for load IC in the virtual frame

Review URL: http://codereview.chromium.org/1946001

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4585 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent a355e45e
...@@ -1343,9 +1343,7 @@ void CodeGenerator::CallApplyLazy(Expression* applicand, ...@@ -1343,9 +1343,7 @@ void CodeGenerator::CallApplyLazy(Expression* applicand,
// give us a megamorphic load site. Not super, but it works. // give us a megamorphic load site. Not super, but it works.
LoadAndSpill(applicand); LoadAndSpill(applicand);
Handle<String> name = Factory::LookupAsciiSymbol("apply"); Handle<String> name = Factory::LookupAsciiSymbol("apply");
__ mov(r2, Operand(name)); frame_->CallLoadIC(name, RelocInfo::CODE_TARGET);
__ ldr(r0, MemOperand(sp, 0));
frame_->CallLoadIC(RelocInfo::CODE_TARGET);
frame_->EmitPush(r0); frame_->EmitPush(r0);
// Load the receiver and the existing arguments object onto the // Load the receiver and the existing arguments object onto the
...@@ -3012,9 +3010,8 @@ void CodeGenerator::LoadFromGlobalSlotCheckExtensions(Slot* slot, ...@@ -3012,9 +3010,8 @@ void CodeGenerator::LoadFromGlobalSlotCheckExtensions(Slot* slot,
// Load the global object. // Load the global object.
LoadGlobal(); LoadGlobal();
// Setup the name register and call load IC. // Setup the name register and call load IC.
frame_->SpillAllButCopyTOSToR0(); frame_->CallLoadIC(slot->var()->name(),
__ mov(r2, Operand(slot->var()->name())); typeof_state == INSIDE_TYPEOF
frame_->CallLoadIC(typeof_state == INSIDE_TYPEOF
? RelocInfo::CODE_TARGET ? RelocInfo::CODE_TARGET
: RelocInfo::CODE_TARGET_CONTEXT); : RelocInfo::CODE_TARGET_CONTEXT);
// Drop the global object. The result is in r0. // Drop the global object. The result is in r0.
...@@ -5446,9 +5443,8 @@ void CodeGenerator::EmitNamedLoad(Handle<String> name, bool is_contextual) { ...@@ -5446,9 +5443,8 @@ void CodeGenerator::EmitNamedLoad(Handle<String> name, bool is_contextual) {
if (is_contextual || scope()->is_global_scope() || loop_nesting() == 0) { if (is_contextual || scope()->is_global_scope() || loop_nesting() == 0) {
Comment cmnt(masm(), "[ Load from named Property"); Comment cmnt(masm(), "[ Load from named Property");
// Setup the name register and call load IC. // Setup the name register and call load IC.
frame_->SpillAllButCopyTOSToR0(); frame_->CallLoadIC(name,
__ mov(r2, Operand(name)); is_contextual
frame_->CallLoadIC(is_contextual
? RelocInfo::CODE_TARGET_CONTEXT ? RelocInfo::CODE_TARGET_CONTEXT
: RelocInfo::CODE_TARGET); : RelocInfo::CODE_TARGET);
} else { } else {
......
...@@ -298,8 +298,10 @@ void VirtualFrame::InvokeBuiltin(Builtins::JavaScript id, ...@@ -298,8 +298,10 @@ void VirtualFrame::InvokeBuiltin(Builtins::JavaScript id,
} }
void VirtualFrame::CallLoadIC(RelocInfo::Mode mode) { void VirtualFrame::CallLoadIC(Handle<String> name, RelocInfo::Mode mode) {
Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize)); Handle<Code> ic(Builtins::builtin(Builtins::LoadIC_Initialize));
SpillAllButCopyTOSToR0();
__ mov(r2, Operand(name));
CallCodeObject(ic, mode, 0); CallCodeObject(ic, mode, 0);
} }
......
...@@ -308,9 +308,8 @@ class VirtualFrame : public ZoneObject { ...@@ -308,9 +308,8 @@ class VirtualFrame : public ZoneObject {
InvokeJSFlags flag, InvokeJSFlags flag,
int arg_count); int arg_count);
// Call load IC. Receiver is on the stack and the property name is in r2. // Call load IC. Receiver is on the stack. Result is returned in r0.
// Result is returned in r0. void CallLoadIC(Handle<String> name, RelocInfo::Mode mode);
void CallLoadIC(RelocInfo::Mode mode);
// Call store IC. If the load is contextual, value is found on top of the // 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. // frame. If not, value and receiver are on the frame. Both are consumed.
......
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