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 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
8 #include "src/bootstrapper.h" | 8 #include "src/bootstrapper.h" |
9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 2664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2675 | 2675 |
2676 // Goto miss case if we do not have a function. | 2676 // Goto miss case if we do not have a function. |
2677 __ GetObjectType(a1, t0, t0); | 2677 __ GetObjectType(a1, t0, t0); |
2678 __ Branch(&miss, ne, t0, Operand(JS_FUNCTION_TYPE)); | 2678 __ Branch(&miss, ne, t0, Operand(JS_FUNCTION_TYPE)); |
2679 | 2679 |
2680 // Make sure the function is not the Array() function, which requires special | 2680 // Make sure the function is not the Array() function, which requires special |
2681 // behavior on MISS. | 2681 // behavior on MISS. |
2682 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, t0); | 2682 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, t0); |
2683 __ Branch(&miss, eq, a1, Operand(t0)); | 2683 __ Branch(&miss, eq, a1, Operand(t0)); |
2684 | 2684 |
| 2685 // Make sure the function belongs to the same native context (which implies |
| 2686 // the same global object). |
| 2687 __ lw(t0, FieldMemOperand(a1, JSFunction::kContextOffset)); |
| 2688 __ lw(t0, ContextOperand(t0, Context::GLOBAL_OBJECT_INDEX)); |
| 2689 __ lw(t1, GlobalObjectOperand()); |
| 2690 __ Branch(&miss, ne, t0, Operand(t1)); |
| 2691 |
2685 // Update stats. | 2692 // Update stats. |
2686 __ lw(t0, FieldMemOperand(a2, with_types_offset)); | 2693 __ lw(t0, FieldMemOperand(a2, with_types_offset)); |
2687 __ Addu(t0, t0, Operand(Smi::FromInt(1))); | 2694 __ Addu(t0, t0, Operand(Smi::FromInt(1))); |
2688 __ sw(t0, FieldMemOperand(a2, with_types_offset)); | 2695 __ sw(t0, FieldMemOperand(a2, with_types_offset)); |
2689 | 2696 |
2690 // Initialize the call counter. | 2697 // Initialize the call counter. |
2691 __ sll(at, a3, kPointerSizeLog2 - kSmiTagSize); | 2698 __ sll(at, a3, kPointerSizeLog2 - kSmiTagSize); |
2692 __ Addu(at, a2, Operand(at)); | 2699 __ Addu(at, a2, Operand(at)); |
2693 __ li(t0, Operand(Smi::FromInt(CallICNexus::kCallCountIncrement))); | 2700 __ li(t0, Operand(Smi::FromInt(CallICNexus::kCallCountIncrement))); |
2694 __ sw(t0, FieldMemOperand(at, FixedArray::kHeaderSize + kPointerSize)); | 2701 __ sw(t0, FieldMemOperand(at, FixedArray::kHeaderSize + kPointerSize)); |
(...skipping 2940 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5635 MemOperand(fp, 6 * kPointerSize), NULL); | 5642 MemOperand(fp, 6 * kPointerSize), NULL); |
5636 } | 5643 } |
5637 | 5644 |
5638 | 5645 |
5639 #undef __ | 5646 #undef __ |
5640 | 5647 |
5641 } // namespace internal | 5648 } // namespace internal |
5642 } // namespace v8 | 5649 } // namespace v8 |
5643 | 5650 |
5644 #endif // V8_TARGET_ARCH_MIPS | 5651 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |