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 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api.h" | 8 #include "src/api.h" |
9 #include "src/arguments.h" | 9 #include "src/arguments.h" |
10 #include "src/base/bits.h" | 10 #include "src/base/bits.h" |
(...skipping 1332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1343 Handle<Code> StoreIC::initialize_stub(Isolate* isolate, | 1343 Handle<Code> StoreIC::initialize_stub(Isolate* isolate, |
1344 StrictMode strict_mode) { | 1344 StrictMode strict_mode) { |
1345 ExtraICState extra_state = ComputeExtraICState(strict_mode); | 1345 ExtraICState extra_state = ComputeExtraICState(strict_mode); |
1346 Handle<Code> ic = | 1346 Handle<Code> ic = |
1347 PropertyICCompiler::ComputeStore(isolate, UNINITIALIZED, extra_state); | 1347 PropertyICCompiler::ComputeStore(isolate, UNINITIALIZED, extra_state); |
1348 return ic; | 1348 return ic; |
1349 } | 1349 } |
1350 | 1350 |
1351 | 1351 |
1352 Handle<Code> StoreIC::megamorphic_stub() { | 1352 Handle<Code> StoreIC::megamorphic_stub() { |
1353 return PropertyICCompiler::ComputeStore(isolate(), MEGAMORPHIC, | 1353 if (kind() == Code::STORE_IC) { |
1354 extra_ic_state()); | 1354 return PropertyICCompiler::ComputeStore(isolate(), MEGAMORPHIC, |
| 1355 extra_ic_state()); |
| 1356 } else { |
| 1357 DCHECK(kind() == Code::KEYED_STORE_IC); |
| 1358 if (strict_mode() == STRICT) { |
| 1359 return isolate()->builtins()->KeyedStoreIC_Generic_Strict(); |
| 1360 } else { |
| 1361 return isolate()->builtins()->KeyedStoreIC_Generic(); |
| 1362 } |
| 1363 } |
1355 } | 1364 } |
1356 | 1365 |
1357 | 1366 |
1358 Handle<Code> StoreIC::generic_stub() const { | 1367 Handle<Code> StoreIC::generic_stub() const { |
1359 return PropertyICCompiler::ComputeStore(isolate(), GENERIC, extra_ic_state()); | 1368 if (kind() == Code::STORE_IC) { |
| 1369 return PropertyICCompiler::ComputeStore(isolate(), GENERIC, |
| 1370 extra_ic_state()); |
| 1371 } else { |
| 1372 DCHECK(kind() == Code::KEYED_STORE_IC); |
| 1373 if (strict_mode() == STRICT) { |
| 1374 return isolate()->builtins()->KeyedStoreIC_Generic_Strict(); |
| 1375 } else { |
| 1376 return isolate()->builtins()->KeyedStoreIC_Generic(); |
| 1377 } |
| 1378 } |
1360 } | 1379 } |
1361 | 1380 |
1362 | 1381 |
| 1382 Handle<Code> StoreIC::slow_stub() const { |
| 1383 if (kind() == Code::STORE_IC) { |
| 1384 return isolate()->builtins()->StoreIC_Slow(); |
| 1385 } else { |
| 1386 DCHECK(kind() == Code::KEYED_STORE_IC); |
| 1387 return isolate()->builtins()->KeyedStoreIC_Slow(); |
| 1388 } |
| 1389 } |
| 1390 |
| 1391 |
1363 Handle<Code> StoreIC::pre_monomorphic_stub(Isolate* isolate, | 1392 Handle<Code> StoreIC::pre_monomorphic_stub(Isolate* isolate, |
1364 StrictMode strict_mode) { | 1393 StrictMode strict_mode) { |
1365 ExtraICState state = ComputeExtraICState(strict_mode); | 1394 ExtraICState state = ComputeExtraICState(strict_mode); |
1366 return PropertyICCompiler::ComputeStore(isolate, PREMONOMORPHIC, state); | 1395 return PropertyICCompiler::ComputeStore(isolate, PREMONOMORPHIC, state); |
1367 } | 1396 } |
1368 | 1397 |
1369 | 1398 |
1370 void StoreIC::UpdateCaches(LookupIterator* lookup, Handle<Object> value, | 1399 void StoreIC::UpdateCaches(LookupIterator* lookup, Handle<Object> value, |
1371 JSReceiver::StoreFromKeyed store_mode) { | 1400 JSReceiver::StoreFromKeyed store_mode) { |
1372 if (state() == UNINITIALIZED) { | 1401 if (state() == UNINITIALIZED) { |
(...skipping 1275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2648 static const Address IC_utilities[] = { | 2677 static const Address IC_utilities[] = { |
2649 #define ADDR(name) FUNCTION_ADDR(name), | 2678 #define ADDR(name) FUNCTION_ADDR(name), |
2650 IC_UTIL_LIST(ADDR) NULL | 2679 IC_UTIL_LIST(ADDR) NULL |
2651 #undef ADDR | 2680 #undef ADDR |
2652 }; | 2681 }; |
2653 | 2682 |
2654 | 2683 |
2655 Address IC::AddressFromUtilityId(IC::UtilityId id) { return IC_utilities[id]; } | 2684 Address IC::AddressFromUtilityId(IC::UtilityId id) { return IC_utilities[id]; } |
2656 } | 2685 } |
2657 } // namespace v8::internal | 2686 } // namespace v8::internal |
OLD | NEW |