| OLD | NEW | 
|     1 // Copyright 2012 the V8 project authors. All rights reserved. |     1 // Copyright 2012 the V8 project authors. All rights reserved. | 
|     2 // Use of this source code is governed by a BSD-style license that can be |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 #include "src/v8.h" |     5 #include "src/v8.h" | 
|     6  |     6  | 
|     7 #if V8_TARGET_ARCH_X87 |     7 #if V8_TARGET_ARCH_X87 | 
|     8  |     8  | 
|     9 #include "src/code-factory.h" |     9 #include "src/code-factory.h" | 
|    10 #include "src/code-stubs.h" |    10 #include "src/code-stubs.h" | 
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   203       __ CallRuntime(Runtime::kNewFunctionContext, 1); |   203       __ CallRuntime(Runtime::kNewFunctionContext, 1); | 
|   204     } |   204     } | 
|   205     function_in_register = false; |   205     function_in_register = false; | 
|   206     // Context is returned in eax.  It replaces the context passed to us. |   206     // Context is returned in eax.  It replaces the context passed to us. | 
|   207     // It's saved in the stack and kept live in esi. |   207     // It's saved in the stack and kept live in esi. | 
|   208     __ mov(esi, eax); |   208     __ mov(esi, eax); | 
|   209     __ mov(Operand(ebp, StandardFrameConstants::kContextOffset), eax); |   209     __ mov(Operand(ebp, StandardFrameConstants::kContextOffset), eax); | 
|   210  |   210  | 
|   211     // Copy parameters into context if necessary. |   211     // Copy parameters into context if necessary. | 
|   212     int num_parameters = info->scope()->num_parameters(); |   212     int num_parameters = info->scope()->num_parameters(); | 
|   213     for (int i = 0; i < num_parameters; i++) { |   213     int first_parameter = info->scope()->has_this_declaration() ? -1 : 0; | 
|   214       Variable* var = scope()->parameter(i); |   214     for (int i = first_parameter; i < num_parameters; i++) { | 
 |   215       Variable* var = (i == -1) ? scope()->receiver() : scope()->parameter(i); | 
|   215       if (var->IsContextSlot()) { |   216       if (var->IsContextSlot()) { | 
|   216         int parameter_offset = StandardFrameConstants::kCallerSPOffset + |   217         int parameter_offset = StandardFrameConstants::kCallerSPOffset + | 
|   217             (num_parameters - 1 - i) * kPointerSize; |   218             (num_parameters - 1 - i) * kPointerSize; | 
|   218         // Load parameter from stack. |   219         // Load parameter from stack. | 
|   219         __ mov(eax, Operand(ebp, parameter_offset)); |   220         __ mov(eax, Operand(ebp, parameter_offset)); | 
|   220         // Store it in the context. |   221         // Store it in the context. | 
|   221         int context_offset = Context::SlotOffset(var->index()); |   222         int context_offset = Context::SlotOffset(var->index()); | 
|   222         __ mov(Operand(esi, context_offset), eax); |   223         __ mov(Operand(esi, context_offset), eax); | 
|   223         // Update the write barrier. This clobbers eax and ebx. |   224         // Update the write barrier. This clobbers eax and ebx. | 
|   224         if (need_write_barrier) { |   225         if (need_write_barrier) { | 
| (...skipping 2718 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2943   // Push copy of the first argument or undefined if it doesn't exist. |  2944   // Push copy of the first argument or undefined if it doesn't exist. | 
|  2944   if (arg_count > 0) { |  2945   if (arg_count > 0) { | 
|  2945     __ push(Operand(esp, arg_count * kPointerSize)); |  2946     __ push(Operand(esp, arg_count * kPointerSize)); | 
|  2946   } else { |  2947   } else { | 
|  2947     __ push(Immediate(isolate()->factory()->undefined_value())); |  2948     __ push(Immediate(isolate()->factory()->undefined_value())); | 
|  2948   } |  2949   } | 
|  2949  |  2950  | 
|  2950   // Push the enclosing function. |  2951   // Push the enclosing function. | 
|  2951   __ push(Operand(ebp, JavaScriptFrameConstants::kFunctionOffset)); |  2952   __ push(Operand(ebp, JavaScriptFrameConstants::kFunctionOffset)); | 
|  2952   // Push the receiver of the enclosing function. |  2953   // Push the receiver of the enclosing function. | 
|  2953   __ push(Operand(ebp, (2 + info_->scope()->num_parameters()) * kPointerSize)); |  2954   Variable* this_var = scope()->LookupThis(); | 
 |  2955   DCHECK_NOT_NULL(this_var); | 
 |  2956   __ push(VarOperand(this_var, ecx)); | 
|  2954   // Push the language mode. |  2957   // Push the language mode. | 
|  2955   __ push(Immediate(Smi::FromInt(language_mode()))); |  2958   __ push(Immediate(Smi::FromInt(language_mode()))); | 
|  2956  |  2959  | 
|  2957   // Push the start position of the scope the calls resides in. |  2960   // Push the start position of the scope the calls resides in. | 
|  2958   __ push(Immediate(Smi::FromInt(scope()->start_position()))); |  2961   __ push(Immediate(Smi::FromInt(scope()->start_position()))); | 
|  2959  |  2962  | 
|  2960   // Do the runtime call. |  2963   // Do the runtime call. | 
|  2961   __ CallRuntime(Runtime::kResolvePossiblyDirectEval, 6); |  2964   __ CallRuntime(Runtime::kResolvePossiblyDirectEval, 6); | 
|  2962 } |  2965 } | 
|  2963  |  2966  | 
| (...skipping 2395 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  5359   DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(), |  5362   DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(), | 
|  5360             Assembler::target_address_at(call_target_address, |  5363             Assembler::target_address_at(call_target_address, | 
|  5361                                          unoptimized_code)); |  5364                                          unoptimized_code)); | 
|  5362   return OSR_AFTER_STACK_CHECK; |  5365   return OSR_AFTER_STACK_CHECK; | 
|  5363 } |  5366 } | 
|  5364  |  5367  | 
|  5365  |  5368  | 
|  5366 } }  // namespace v8::internal |  5369 } }  // namespace v8::internal | 
|  5367  |  5370  | 
|  5368 #endif  // V8_TARGET_ARCH_X87 |  5371 #endif  // V8_TARGET_ARCH_X87 | 
| OLD | NEW |