OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 KeyedLoadStubCompiler compiler(isolate_); | 390 KeyedLoadStubCompiler compiler(isolate_); |
391 Handle<Code> handler = | 391 Handle<Code> handler = |
392 compiler.CompileLoadCallback(receiver, holder, name, callback); | 392 compiler.CompileLoadCallback(receiver, holder, name, callback); |
393 JSObject::UpdateMapCodeCache(stub_holder, name, handler); | 393 JSObject::UpdateMapCodeCache(stub_holder, name, handler); |
394 return handler; | 394 return handler; |
395 } | 395 } |
396 | 396 |
397 | 397 |
398 Handle<Code> StubCache::ComputeStoreField(Handle<Name> name, | 398 Handle<Code> StubCache::ComputeStoreField(Handle<Name> name, |
399 Handle<JSObject> receiver, | 399 Handle<JSObject> receiver, |
400 int field_index, | 400 LookupResult* lookup, |
401 Handle<Map> transition, | 401 Handle<Map> transition, |
402 StrictModeFlag strict_mode) { | 402 StrictModeFlag strict_mode) { |
403 Code::StubType type = | 403 Code::StubType type = |
404 transition.is_null() ? Code::FIELD : Code::MAP_TRANSITION; | 404 transition.is_null() ? Code::FIELD : Code::MAP_TRANSITION; |
405 | 405 |
406 Handle<Code> stub = FindIC( | 406 Handle<Code> stub = FindIC( |
407 name, receiver, Code::STORE_IC, type, strict_mode); | 407 name, receiver, Code::STORE_IC, type, strict_mode); |
408 if (!stub.is_null()) return stub; | 408 if (!stub.is_null()) return stub; |
409 | 409 |
410 StoreStubCompiler compiler(isolate_, strict_mode); | 410 StoreStubCompiler compiler(isolate_, strict_mode); |
411 Handle<Code> code = | 411 Handle<Code> code = |
412 compiler.CompileStoreField(receiver, field_index, transition, name); | 412 compiler.CompileStoreField(receiver, lookup, transition, name); |
413 JSObject::UpdateMapCodeCache(receiver, name, code); | 413 JSObject::UpdateMapCodeCache(receiver, name, code); |
414 return code; | 414 return code; |
415 } | 415 } |
416 | 416 |
417 | 417 |
418 Handle<Code> StubCache::ComputeKeyedLoadElement(Handle<Map> receiver_map) { | 418 Handle<Code> StubCache::ComputeKeyedLoadElement(Handle<Map> receiver_map) { |
419 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC); | 419 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC); |
420 Handle<Name> name = | 420 Handle<Name> name = |
421 isolate()->factory()->KeyedLoadElementMonomorphic_string(); | 421 isolate()->factory()->KeyedLoadElementMonomorphic_string(); |
422 | 422 |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 if (!stub.is_null()) return stub; | 525 if (!stub.is_null()) return stub; |
526 | 526 |
527 StoreStubCompiler compiler(isolate_, strict_mode); | 527 StoreStubCompiler compiler(isolate_, strict_mode); |
528 Handle<Code> code = compiler.CompileStoreInterceptor(receiver, name); | 528 Handle<Code> code = compiler.CompileStoreInterceptor(receiver, name); |
529 JSObject::UpdateMapCodeCache(receiver, name, code); | 529 JSObject::UpdateMapCodeCache(receiver, name, code); |
530 return code; | 530 return code; |
531 } | 531 } |
532 | 532 |
533 Handle<Code> StubCache::ComputeKeyedStoreField(Handle<Name> name, | 533 Handle<Code> StubCache::ComputeKeyedStoreField(Handle<Name> name, |
534 Handle<JSObject> receiver, | 534 Handle<JSObject> receiver, |
535 int field_index, | 535 LookupResult* lookup, |
536 Handle<Map> transition, | 536 Handle<Map> transition, |
537 StrictModeFlag strict_mode) { | 537 StrictModeFlag strict_mode) { |
538 Code::StubType type = | 538 Code::StubType type = |
539 (transition.is_null()) ? Code::FIELD : Code::MAP_TRANSITION; | 539 (transition.is_null()) ? Code::FIELD : Code::MAP_TRANSITION; |
540 Handle<Code> stub = FindIC( | 540 Handle<Code> stub = FindIC( |
541 name, receiver, Code::KEYED_STORE_IC, type, strict_mode); | 541 name, receiver, Code::KEYED_STORE_IC, type, strict_mode); |
542 if (!stub.is_null()) return stub; | 542 if (!stub.is_null()) return stub; |
543 | 543 |
544 KeyedStoreStubCompiler compiler(isolate(), strict_mode, STANDARD_STORE); | 544 KeyedStoreStubCompiler compiler(isolate(), strict_mode, STANDARD_STORE); |
545 Handle<Code> code = | 545 Handle<Code> code = |
546 compiler.CompileStoreField(receiver, field_index, transition, name); | 546 compiler.CompileStoreField(receiver, lookup, transition, name); |
547 JSObject::UpdateMapCodeCache(receiver, name, code); | 547 JSObject::UpdateMapCodeCache(receiver, name, code); |
548 return code; | 548 return code; |
549 } | 549 } |
550 | 550 |
551 | 551 |
552 #define CALL_LOGGER_TAG(kind, type) \ | 552 #define CALL_LOGGER_TAG(kind, type) \ |
553 (kind == Code::CALL_IC ? Logger::type : Logger::KEYED_##type) | 553 (kind == Code::CALL_IC ? Logger::type : Logger::KEYED_##type) |
554 | 554 |
555 Handle<Code> StubCache::ComputeCallConstant(int argc, | 555 Handle<Code> StubCache::ComputeCallConstant(int argc, |
556 Code::Kind kind, | 556 Code::Kind kind, |
(...skipping 1020 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1577 | 1577 |
1578 __ bind(&success); | 1578 __ bind(&success); |
1579 GenerateLoadViaGetter(masm(), getter); | 1579 GenerateLoadViaGetter(masm(), getter); |
1580 | 1580 |
1581 // Return the generated code. | 1581 // Return the generated code. |
1582 return GetCode(kind(), Code::CALLBACKS, name); | 1582 return GetCode(kind(), Code::CALLBACKS, name); |
1583 } | 1583 } |
1584 | 1584 |
1585 | 1585 |
1586 Handle<Code> BaseStoreStubCompiler::CompileStoreField(Handle<JSObject> object, | 1586 Handle<Code> BaseStoreStubCompiler::CompileStoreField(Handle<JSObject> object, |
1587 int index, | 1587 LookupResult* lookup, |
1588 Handle<Map> transition, | 1588 Handle<Map> transition, |
1589 Handle<Name> name) { | 1589 Handle<Name> name) { |
1590 Label miss, miss_restore_name; | 1590 Label miss, miss_restore_name; |
1591 | 1591 |
1592 GenerateNameCheck(name, this->name(), &miss); | 1592 GenerateNameCheck(name, this->name(), &miss); |
1593 | 1593 |
1594 // Generate store field code. | 1594 // Generate store field code. |
1595 GenerateStoreField(masm(), | 1595 GenerateStoreField(masm(), |
1596 object, | 1596 object, |
1597 index, | 1597 lookup, |
1598 transition, | 1598 transition, |
1599 name, | 1599 name, |
1600 receiver(), this->name(), value(), scratch1(), scratch2(), | 1600 receiver(), this->name(), value(), scratch1(), scratch2(), |
1601 &miss, | 1601 &miss, |
1602 &miss_restore_name); | 1602 &miss_restore_name); |
1603 | 1603 |
1604 // Handle store cache miss. | 1604 // Handle store cache miss. |
1605 GenerateRestoreName(masm(), &miss_restore_name, name); | 1605 GenerateRestoreName(masm(), &miss_restore_name, name); |
1606 __ bind(&miss); | 1606 __ bind(&miss); |
1607 TailCallBuiltin(masm(), MissBuiltin(kind())); | 1607 TailCallBuiltin(masm(), MissBuiltin(kind())); |
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2009 Handle<FunctionTemplateInfo>( | 2009 Handle<FunctionTemplateInfo>( |
2010 FunctionTemplateInfo::cast(signature->receiver())); | 2010 FunctionTemplateInfo::cast(signature->receiver())); |
2011 } | 2011 } |
2012 } | 2012 } |
2013 | 2013 |
2014 is_simple_api_call_ = true; | 2014 is_simple_api_call_ = true; |
2015 } | 2015 } |
2016 | 2016 |
2017 | 2017 |
2018 } } // namespace v8::internal | 2018 } } // namespace v8::internal |
OLD | NEW |