Index: src/ia32/code-stubs-ia32.cc |
diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc |
index 901f41837db1f8625aa56b6dc6eb70a9ea9bcbf5..f21308f67a61e60c9eef710f5802401c96eb2c76 100644 |
--- a/src/ia32/code-stubs-ia32.cc |
+++ b/src/ia32/code-stubs-ia32.cc |
@@ -54,6 +54,16 @@ void FastNewClosureStub::InitializeInterfaceDescriptor( |
} |
+void FastNewContextStub::InitializeInterfaceDescriptor( |
+ Isolate* isolate, |
+ CodeStubInterfaceDescriptor* descriptor) { |
+ static Register registers[] = { edi }; |
+ descriptor->register_param_count_ = 1; |
+ descriptor->register_params_ = registers; |
+ descriptor->deoptimization_handler_ = NULL; |
+} |
+ |
+ |
void ToNumberStub::InitializeInterfaceDescriptor( |
Isolate* isolate, |
CodeStubInterfaceDescriptor* descriptor) { |
@@ -441,49 +451,6 @@ void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) { |
} |
-void FastNewContextStub::Generate(MacroAssembler* masm) { |
- // Try to allocate the context in new space. |
- Label gc; |
- int length = slots_ + Context::MIN_CONTEXT_SLOTS; |
- __ Allocate((length * kPointerSize) + FixedArray::kHeaderSize, |
- eax, ebx, ecx, &gc, TAG_OBJECT); |
- |
- // Get the function from the stack. |
- __ mov(ecx, Operand(esp, 1 * kPointerSize)); |
- |
- // Set up the object header. |
- Factory* factory = masm->isolate()->factory(); |
- __ mov(FieldOperand(eax, HeapObject::kMapOffset), |
- factory->function_context_map()); |
- __ mov(FieldOperand(eax, Context::kLengthOffset), |
- Immediate(Smi::FromInt(length))); |
- |
- // Set up the fixed slots. |
- __ Set(ebx, Immediate(0)); // Set to NULL. |
- __ mov(Operand(eax, Context::SlotOffset(Context::CLOSURE_INDEX)), ecx); |
- __ mov(Operand(eax, Context::SlotOffset(Context::PREVIOUS_INDEX)), esi); |
- __ mov(Operand(eax, Context::SlotOffset(Context::EXTENSION_INDEX)), ebx); |
- |
- // Copy the global object from the previous context. |
- __ mov(ebx, Operand(esi, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX))); |
- __ mov(Operand(eax, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX)), ebx); |
- |
- // Initialize the rest of the slots to undefined. |
- __ mov(ebx, factory->undefined_value()); |
- for (int i = Context::MIN_CONTEXT_SLOTS; i < length; i++) { |
- __ mov(Operand(eax, Context::SlotOffset(i)), ebx); |
- } |
- |
- // Return and remove the on-stack parameter. |
- __ mov(esi, eax); |
- __ ret(1 * kPointerSize); |
- |
- // Need to collect. Call into runtime system. |
- __ bind(&gc); |
- __ TailCallRuntime(Runtime::kNewFunctionContext, 1, 1); |
-} |
- |
- |
void FastNewBlockContextStub::Generate(MacroAssembler* masm) { |
// Stack layout on entry: |
// |