| 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 #if V8_TARGET_ARCH_MIPS | 5 #if V8_TARGET_ARCH_MIPS | 
| 6 | 6 | 
| 7 // Note on Mips implementation: | 7 // Note on Mips implementation: | 
| 8 // | 8 // | 
| 9 // The result_register() for mips is the 'v0' register, which is defined | 9 // The result_register() for mips is the 'v0' register, which is defined | 
| 10 // by the ABI to contain function return values. However, the first | 10 // by the ABI to contain function return values. However, the first | 
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 292     __ LoadRoot(v0, Heap::kUndefinedValueRootIndex); | 292     __ LoadRoot(v0, Heap::kUndefinedValueRootIndex); | 
| 293     __ bind(&done); | 293     __ bind(&done); | 
| 294 | 294 | 
| 295     SetVar(new_target_var, v0, a2, a3); | 295     SetVar(new_target_var, v0, a2, a3); | 
| 296   } | 296   } | 
| 297 | 297 | 
| 298   Variable* arguments = scope()->arguments(); | 298   Variable* arguments = scope()->arguments(); | 
| 299   if (arguments != NULL) { | 299   if (arguments != NULL) { | 
| 300     // Function uses arguments object. | 300     // Function uses arguments object. | 
| 301     Comment cmnt(masm_, "[ Allocate arguments object"); | 301     Comment cmnt(masm_, "[ Allocate arguments object"); | 
|  | 302     DCHECK(a1.is(ArgumentsAccessNewDescriptor::function())); | 
| 302     if (!function_in_register_a1) { | 303     if (!function_in_register_a1) { | 
| 303       // Load this again, if it's used by the local context below. | 304       // Load this again, if it's used by the local context below. | 
| 304       __ lw(a3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); | 305       __ lw(a1, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); | 
| 305     } else { |  | 
| 306       __ mov(a3, a1); |  | 
| 307     } | 306     } | 
| 308     // Receiver is just before the parameters on the caller's stack. | 307     // Receiver is just before the parameters on the caller's stack. | 
| 309     int num_parameters = info->scope()->num_parameters(); | 308     int num_parameters = info->scope()->num_parameters(); | 
| 310     int offset = num_parameters * kPointerSize; | 309     int offset = num_parameters * kPointerSize; | 
| 311     __ Addu(a2, fp, | 310     __ li(ArgumentsAccessNewDescriptor::parameter_count(), | 
| 312            Operand(StandardFrameConstants::kCallerSPOffset + offset)); | 311           Operand(Smi::FromInt(num_parameters))); | 
| 313     __ li(a1, Operand(Smi::FromInt(num_parameters))); | 312     __ Addu(ArgumentsAccessNewDescriptor::parameter_pointer(), fp, | 
| 314     __ Push(a3, a2, a1); | 313             Operand(StandardFrameConstants::kCallerSPOffset + offset)); | 
| 315 | 314 | 
| 316     // Arguments to ArgumentsAccessStub: | 315     // Arguments to ArgumentsAccessStub: | 
| 317     //   function, receiver address, parameter count. | 316     //   function, parameter pointer, parameter count. | 
| 318     // The stub will rewrite receiever and parameter count if the previous | 317     // The stub will rewrite parameter pointer and parameter count if the | 
| 319     // stack frame was an arguments adapter frame. | 318     // previous stack frame was an arguments adapter frame. | 
| 320     ArgumentsAccessStub::Type type; | 319     bool is_unmapped = is_strict(language_mode()) || !has_simple_parameters(); | 
| 321     if (is_strict(language_mode()) || !has_simple_parameters()) { | 320     ArgumentsAccessStub::Type type = ArgumentsAccessStub::ComputeType( | 
| 322       type = ArgumentsAccessStub::NEW_STRICT; | 321         is_unmapped, literal()->has_duplicate_parameters()); | 
| 323     } else if (literal()->has_duplicate_parameters()) { |  | 
| 324       type = ArgumentsAccessStub::NEW_SLOPPY_SLOW; |  | 
| 325     } else { |  | 
| 326       type = ArgumentsAccessStub::NEW_SLOPPY_FAST; |  | 
| 327     } |  | 
| 328     ArgumentsAccessStub stub(isolate(), type); | 322     ArgumentsAccessStub stub(isolate(), type); | 
| 329     __ CallStub(&stub); | 323     __ CallStub(&stub); | 
| 330 | 324 | 
| 331     SetVar(arguments, v0, a1, a2); | 325     SetVar(arguments, v0, a1, a2); | 
| 332   } | 326   } | 
| 333 | 327 | 
| 334   if (FLAG_trace) { | 328   if (FLAG_trace) { | 
| 335     __ CallRuntime(Runtime::kTraceEnter, 0); | 329     __ CallRuntime(Runtime::kTraceEnter, 0); | 
| 336   } | 330   } | 
| 337 | 331 | 
| (...skipping 4892 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5230          reinterpret_cast<uint32_t>( | 5224          reinterpret_cast<uint32_t>( | 
| 5231              isolate->builtins()->OsrAfterStackCheck()->entry())); | 5225              isolate->builtins()->OsrAfterStackCheck()->entry())); | 
| 5232   return OSR_AFTER_STACK_CHECK; | 5226   return OSR_AFTER_STACK_CHECK; | 
| 5233 } | 5227 } | 
| 5234 | 5228 | 
| 5235 | 5229 | 
| 5236 }  // namespace internal | 5230 }  // namespace internal | 
| 5237 }  // namespace v8 | 5231 }  // namespace v8 | 
| 5238 | 5232 | 
| 5239 #endif  // V8_TARGET_ARCH_MIPS | 5233 #endif  // V8_TARGET_ARCH_MIPS | 
| OLD | NEW | 
|---|