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_MIPS64 | 7 #if V8_TARGET_ARCH_MIPS64 |
8 | 8 |
9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 2929 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2940 if (!FLAG_trace_ic) { | 2940 if (!FLAG_trace_ic) { |
2941 // We are going megamorphic. If the feedback is a JSFunction, it is fine | 2941 // We are going megamorphic. If the feedback is a JSFunction, it is fine |
2942 // to handle it here. More complex cases are dealt with in the runtime. | 2942 // to handle it here. More complex cases are dealt with in the runtime. |
2943 __ AssertNotSmi(a4); | 2943 __ AssertNotSmi(a4); |
2944 __ GetObjectType(a4, a5, a5); | 2944 __ GetObjectType(a4, a5, a5); |
2945 __ Branch(&miss, ne, a5, Operand(JS_FUNCTION_TYPE)); | 2945 __ Branch(&miss, ne, a5, Operand(JS_FUNCTION_TYPE)); |
2946 __ dsrl(a4, a3, 32 - kPointerSizeLog2); | 2946 __ dsrl(a4, a3, 32 - kPointerSizeLog2); |
2947 __ Daddu(a4, a2, Operand(a4)); | 2947 __ Daddu(a4, a2, Operand(a4)); |
2948 __ LoadRoot(at, Heap::kmegamorphic_symbolRootIndex); | 2948 __ LoadRoot(at, Heap::kmegamorphic_symbolRootIndex); |
2949 __ sd(at, FieldMemOperand(a4, FixedArray::kHeaderSize)); | 2949 __ sd(at, FieldMemOperand(a4, FixedArray::kHeaderSize)); |
2950 __ Branch(&slow_start); | 2950 // We have to update statistics for runtime profiling. |
| 2951 const int with_types_offset = |
| 2952 FixedArray::OffsetOfElementAt(TypeFeedbackVector::kWithTypesIndex); |
| 2953 __ ld(a4, FieldMemOperand(a2, with_types_offset)); |
| 2954 __ Dsubu(a4, a4, Operand(Smi::FromInt(1))); |
| 2955 __ sd(a4, FieldMemOperand(a2, with_types_offset)); |
| 2956 const int generic_offset = |
| 2957 FixedArray::OffsetOfElementAt(TypeFeedbackVector::kGenericCountIndex); |
| 2958 __ ld(a4, FieldMemOperand(a2, generic_offset)); |
| 2959 __ Daddu(a4, a4, Operand(Smi::FromInt(1))); |
| 2960 __ Branch(USE_DELAY_SLOT, &slow_start); |
| 2961 __ sd(a4, FieldMemOperand(a2, generic_offset)); // In delay slot. |
2951 } | 2962 } |
2952 | 2963 |
2953 // We are here because tracing is on or we are going monomorphic. | 2964 // We are here because tracing is on or we are going monomorphic. |
2954 __ bind(&miss); | 2965 __ bind(&miss); |
2955 GenerateMiss(masm); | 2966 GenerateMiss(masm); |
2956 | 2967 |
2957 // the slow case | 2968 // the slow case |
2958 __ bind(&slow_start); | 2969 __ bind(&slow_start); |
2959 // Check that the function is really a JavaScript function. | 2970 // Check that the function is really a JavaScript function. |
2960 // r1: pushed function (to be verified) | 2971 // r1: pushed function (to be verified) |
(...skipping 1990 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4951 MemOperand(fp, 6 * kPointerSize), | 4962 MemOperand(fp, 6 * kPointerSize), |
4952 NULL); | 4963 NULL); |
4953 } | 4964 } |
4954 | 4965 |
4955 | 4966 |
4956 #undef __ | 4967 #undef __ |
4957 | 4968 |
4958 } } // namespace v8::internal | 4969 } } // namespace v8::internal |
4959 | 4970 |
4960 #endif // V8_TARGET_ARCH_MIPS64 | 4971 #endif // V8_TARGET_ARCH_MIPS64 |
OLD | NEW |