| 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_MIPS | 7 #if V8_TARGET_ARCH_MIPS |
| 8 | 8 |
| 9 // Note on Mips implementation: | 9 // Note on Mips implementation: |
| 10 // | 10 // |
| (...skipping 2813 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2824 // Push a copy of the function (found below the arguments) and | 2824 // Push a copy of the function (found below the arguments) and |
| 2825 // resolve eval. | 2825 // resolve eval. |
| 2826 __ lw(a1, MemOperand(sp, (arg_count + 1) * kPointerSize)); | 2826 __ lw(a1, MemOperand(sp, (arg_count + 1) * kPointerSize)); |
| 2827 __ push(a1); | 2827 __ push(a1); |
| 2828 EmitResolvePossiblyDirectEval(arg_count); | 2828 EmitResolvePossiblyDirectEval(arg_count); |
| 2829 | 2829 |
| 2830 // The runtime call returns a pair of values in v0 (function) and | 2830 // The runtime call returns a pair of values in v0 (function) and |
| 2831 // v1 (receiver). Touch up the stack with the right values. | 2831 // v1 (receiver). Touch up the stack with the right values. |
| 2832 __ sw(v0, MemOperand(sp, (arg_count + 1) * kPointerSize)); | 2832 __ sw(v0, MemOperand(sp, (arg_count + 1) * kPointerSize)); |
| 2833 __ sw(v1, MemOperand(sp, arg_count * kPointerSize)); | 2833 __ sw(v1, MemOperand(sp, arg_count * kPointerSize)); |
| 2834 |
| 2835 PrepareForBailoutForId(expr->EvalOrLookupId(), NO_REGISTERS); |
| 2834 } | 2836 } |
| 2835 // Record source position for debugger. | 2837 // Record source position for debugger. |
| 2836 SetSourcePosition(expr->position()); | 2838 SetSourcePosition(expr->position()); |
| 2837 CallFunctionStub stub(isolate(), arg_count, NO_CALL_FUNCTION_FLAGS); | 2839 CallFunctionStub stub(isolate(), arg_count, NO_CALL_FUNCTION_FLAGS); |
| 2838 __ lw(a1, MemOperand(sp, (arg_count + 1) * kPointerSize)); | 2840 __ lw(a1, MemOperand(sp, (arg_count + 1) * kPointerSize)); |
| 2839 __ CallStub(&stub); | 2841 __ CallStub(&stub); |
| 2840 RecordJSReturnSite(expr); | 2842 RecordJSReturnSite(expr); |
| 2841 // Restore context register. | 2843 // Restore context register. |
| 2842 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); | 2844 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); |
| 2843 context()->DropAndPlug(1, v0); | 2845 context()->DropAndPlug(1, v0); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2855 } | 2857 } |
| 2856 | 2858 |
| 2857 __ bind(&slow); | 2859 __ bind(&slow); |
| 2858 // Call the runtime to find the function to call (returned in v0) | 2860 // Call the runtime to find the function to call (returned in v0) |
| 2859 // and the object holding it (returned in v1). | 2861 // and the object holding it (returned in v1). |
| 2860 DCHECK(!context_register().is(a2)); | 2862 DCHECK(!context_register().is(a2)); |
| 2861 __ li(a2, Operand(proxy->name())); | 2863 __ li(a2, Operand(proxy->name())); |
| 2862 __ Push(context_register(), a2); | 2864 __ Push(context_register(), a2); |
| 2863 __ CallRuntime(Runtime::kLoadLookupSlot, 2); | 2865 __ CallRuntime(Runtime::kLoadLookupSlot, 2); |
| 2864 __ Push(v0, v1); // Function, receiver. | 2866 __ Push(v0, v1); // Function, receiver. |
| 2867 PrepareForBailoutForId(expr->EvalOrLookupId(), NO_REGISTERS); |
| 2865 | 2868 |
| 2866 // If fast case code has been generated, emit code to push the | 2869 // If fast case code has been generated, emit code to push the |
| 2867 // function and receiver and have the slow path jump around this | 2870 // function and receiver and have the slow path jump around this |
| 2868 // code. | 2871 // code. |
| 2869 if (done.is_linked()) { | 2872 if (done.is_linked()) { |
| 2870 Label call; | 2873 Label call; |
| 2871 __ Branch(&call); | 2874 __ Branch(&call); |
| 2872 __ bind(&done); | 2875 __ bind(&done); |
| 2873 // Push function. | 2876 // Push function. |
| 2874 __ push(v0); | 2877 __ push(v0); |
| (...skipping 2081 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4956 Assembler::target_address_at(pc_immediate_load_address)) == | 4959 Assembler::target_address_at(pc_immediate_load_address)) == |
| 4957 reinterpret_cast<uint32_t>( | 4960 reinterpret_cast<uint32_t>( |
| 4958 isolate->builtins()->OsrAfterStackCheck()->entry())); | 4961 isolate->builtins()->OsrAfterStackCheck()->entry())); |
| 4959 return OSR_AFTER_STACK_CHECK; | 4962 return OSR_AFTER_STACK_CHECK; |
| 4960 } | 4963 } |
| 4961 | 4964 |
| 4962 | 4965 |
| 4963 } } // namespace v8::internal | 4966 } } // namespace v8::internal |
| 4964 | 4967 |
| 4965 #endif // V8_TARGET_ARCH_MIPS | 4968 #endif // V8_TARGET_ARCH_MIPS |
| OLD | NEW |