| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 #include "src/compiler.h" | 7 #include "src/compiler.h" |
| 8 #include "src/interpreter/bytecode-array-iterator.h" | 8 #include "src/interpreter/bytecode-array-iterator.h" |
| 9 #include "src/interpreter/bytecode-generator.h" | 9 #include "src/interpreter/bytecode-generator.h" |
| 10 #include "src/interpreter/interpreter.h" | 10 #include "src/interpreter/interpreter.h" |
| (...skipping 2970 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2981 | 2981 |
| 2982 | 2982 |
| 2983 TEST(CountOperators) { | 2983 TEST(CountOperators) { |
| 2984 InitializedHandleScope handle_scope; | 2984 InitializedHandleScope handle_scope; |
| 2985 BytecodeGeneratorHelper helper; | 2985 BytecodeGeneratorHelper helper; |
| 2986 Zone zone; | 2986 Zone zone; |
| 2987 | 2987 |
| 2988 FeedbackVectorSpec feedback_spec(&zone); | 2988 FeedbackVectorSpec feedback_spec(&zone); |
| 2989 FeedbackVectorSlot slot1 = feedback_spec.AddLoadICSlot(); | 2989 FeedbackVectorSlot slot1 = feedback_spec.AddLoadICSlot(); |
| 2990 FeedbackVectorSlot slot2 = feedback_spec.AddStoreICSlot(); | 2990 FeedbackVectorSlot slot2 = feedback_spec.AddStoreICSlot(); |
| 2991 | |
| 2992 Handle<i::TypeFeedbackVector> vector = | 2991 Handle<i::TypeFeedbackVector> vector = |
| 2993 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); | 2992 i::NewTypeFeedbackVector(helper.isolate(), &feedback_spec); |
| 2994 | 2993 |
| 2994 FeedbackVectorSpec store_feedback_spec(&zone); |
| 2995 FeedbackVectorSlot store_slot = store_feedback_spec.AddStoreICSlot(); |
| 2996 Handle<i::TypeFeedbackVector> store_vector = |
| 2997 i::NewTypeFeedbackVector(helper.isolate(), &store_feedback_spec); |
| 2998 |
| 2995 int closure = Register::function_closure().index(); | 2999 int closure = Register::function_closure().index(); |
| 2996 int first_context_slot = Context::MIN_CONTEXT_SLOTS; | 3000 int first_context_slot = Context::MIN_CONTEXT_SLOTS; |
| 2997 | 3001 |
| 2998 int object_literal_flags = | 3002 int object_literal_flags = |
| 2999 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; | 3003 ObjectLiteral::kFastElements | ObjectLiteral::kDisableMementos; |
| 3004 int array_literal_flags = |
| 3005 ArrayLiteral::kDisableMementos | ArrayLiteral::kShallowElements; |
| 3000 | 3006 |
| 3001 ExpectedSnippet<InstanceType> snippets[] = { | 3007 ExpectedSnippet<InstanceType> snippets[] = { |
| 3002 {"var a = 1; return ++a;", | 3008 {"var a = 1; return ++a;", |
| 3003 1 * kPointerSize, | 3009 1 * kPointerSize, |
| 3004 1, | 3010 1, |
| 3005 11, | 3011 11, |
| 3006 { | 3012 { |
| 3007 B(LdaSmi8), U8(1), // | 3013 B(LdaSmi8), U8(1), // |
| 3008 B(Star), R(0), // | 3014 B(Star), R(0), // |
| 3009 B(Ldar), R(0), // | 3015 B(Ldar), R(0), // |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3172 B(LdaContextSlot), R(1), U8(first_context_slot), // | 3178 B(LdaContextSlot), R(1), U8(first_context_slot), // |
| 3173 B(ToNumber), // | 3179 B(ToNumber), // |
| 3174 B(Star), R(2), // | 3180 B(Star), R(2), // |
| 3175 B(Dec), // | 3181 B(Dec), // |
| 3176 B(StaContextSlot), R(1), U8(first_context_slot), // | 3182 B(StaContextSlot), R(1), U8(first_context_slot), // |
| 3177 B(Ldar), R(2), // | 3183 B(Ldar), R(2), // |
| 3178 B(Return), // | 3184 B(Return), // |
| 3179 }, | 3185 }, |
| 3180 1, | 3186 1, |
| 3181 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, | 3187 {InstanceType::SHARED_FUNCTION_INFO_TYPE}}, |
| 3188 {"var idx = 1; var a = [1, 2]; return a[idx++] = 2;", |
| 3189 3 * kPointerSize, |
| 3190 1, |
| 3191 26, |
| 3192 { |
| 3193 B(LdaSmi8), U8(1), // |
| 3194 B(Star), R(0), // |
| 3195 B(LdaConstant), U8(0), // |
| 3196 B(CreateArrayLiteral), U8(0), U8(array_literal_flags), // |
| 3197 B(Star), R(1), // |
| 3198 B(Ldar), R(0), // |
| 3199 B(ToNumber), // |
| 3200 B(Star), R(2), // |
| 3201 B(Inc), // |
| 3202 B(Star), R(0), // |
| 3203 B(LdaSmi8), U8(2), // |
| 3204 B(KeyedStoreICSloppy), R(1), R(2), // |
| 3205 U8(store_vector->GetIndex(store_slot)), // |
| 3206 B(Return), // |
| 3207 }, |
| 3208 1, |
| 3209 {InstanceType::FIXED_ARRAY_TYPE}}, |
| 3182 }; | 3210 }; |
| 3183 | 3211 |
| 3184 for (size_t i = 0; i < arraysize(snippets); i++) { | 3212 for (size_t i = 0; i < arraysize(snippets); i++) { |
| 3185 Handle<BytecodeArray> bytecode_array = | 3213 Handle<BytecodeArray> bytecode_array = |
| 3186 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 3214 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
| 3187 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 3215 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 3188 } | 3216 } |
| 3189 } | 3217 } |
| 3190 | 3218 |
| 3191 | 3219 |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3606 for (size_t i = 0; i < arraysize(snippets); i++) { | 3634 for (size_t i = 0; i < arraysize(snippets); i++) { |
| 3607 Handle<BytecodeArray> bytecode_array = | 3635 Handle<BytecodeArray> bytecode_array = |
| 3608 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); | 3636 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); |
| 3609 CheckBytecodeArrayEqual(snippets[i], bytecode_array); | 3637 CheckBytecodeArrayEqual(snippets[i], bytecode_array); |
| 3610 } | 3638 } |
| 3611 } | 3639 } |
| 3612 | 3640 |
| 3613 } // namespace interpreter | 3641 } // namespace interpreter |
| 3614 } // namespace internal | 3642 } // namespace internal |
| 3615 } // namespace v8 | 3643 } // namespace v8 |
| OLD | NEW |