Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Side by Side Diff: src/interpreter/interpreter.cc

Issue 1912633002: [ic] Split LoadIC into LoadGlobalIC and LoadIC. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebasing Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/interface-descriptors.cc ('k') | src/log.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/interpreter/interpreter.h" 5 #include "src/interpreter/interpreter.h"
6 6
7 #include <fstream> 7 #include <fstream>
8 8
9 #include "src/ast/prettyprinter.h" 9 #include "src/ast/prettyprinter.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 403 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
404 return __ CallStub(ic.descriptor(), code_target, context, global, name, 404 return __ CallStub(ic.descriptor(), code_target, context, global, name,
405 smi_slot, type_feedback_vector); 405 smi_slot, type_feedback_vector);
406 } 406 }
407 407
408 // LdaGlobal <name_index> <slot> 408 // LdaGlobal <name_index> <slot>
409 // 409 //
410 // Load the global with name in constant pool entry <name_index> into the 410 // Load the global with name in constant pool entry <name_index> into the
411 // accumulator using FeedBackVector slot <slot> outside of a typeof. 411 // accumulator using FeedBackVector slot <slot> outside of a typeof.
412 void Interpreter::DoLdaGlobal(InterpreterAssembler* assembler) { 412 void Interpreter::DoLdaGlobal(InterpreterAssembler* assembler) {
413 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF); 413 Callable ic =
414 CodeFactory::LoadGlobalICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF);
414 Node* result = BuildLoadGlobal(ic, assembler); 415 Node* result = BuildLoadGlobal(ic, assembler);
415 __ SetAccumulator(result); 416 __ SetAccumulator(result);
416 __ Dispatch(); 417 __ Dispatch();
417 } 418 }
418 419
419 // LdrGlobal <name_index> <slot> <reg> 420 // LdrGlobal <name_index> <slot> <reg>
420 // 421 //
421 // Load the global with name in constant pool entry <name_index> into 422 // Load the global with name in constant pool entry <name_index> into
422 // register <reg> using FeedBackVector slot <slot> outside of a typeof. 423 // register <reg> using FeedBackVector slot <slot> outside of a typeof.
423 void Interpreter::DoLdrGlobal(InterpreterAssembler* assembler) { 424 void Interpreter::DoLdrGlobal(InterpreterAssembler* assembler) {
424 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF); 425 Callable ic =
426 CodeFactory::LoadGlobalICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF);
425 Node* result = BuildLoadGlobal(ic, assembler); 427 Node* result = BuildLoadGlobal(ic, assembler);
426 Node* destination = __ BytecodeOperandReg(2); 428 Node* destination = __ BytecodeOperandReg(2);
427 __ StoreRegister(result, destination); 429 __ StoreRegister(result, destination);
428 __ Dispatch(); 430 __ Dispatch();
429 } 431 }
430 432
431 // LdaGlobalInsideTypeof <name_index> <slot> 433 // LdaGlobalInsideTypeof <name_index> <slot>
432 // 434 //
433 // Load the global with name in constant pool entry <name_index> into the 435 // Load the global with name in constant pool entry <name_index> into the
434 // accumulator using FeedBackVector slot <slot> inside of a typeof. 436 // accumulator using FeedBackVector slot <slot> inside of a typeof.
435 void Interpreter::DoLdaGlobalInsideTypeof(InterpreterAssembler* assembler) { 437 void Interpreter::DoLdaGlobalInsideTypeof(InterpreterAssembler* assembler) {
436 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, INSIDE_TYPEOF); 438 Callable ic =
439 CodeFactory::LoadGlobalICInOptimizedCode(isolate_, INSIDE_TYPEOF);
437 Node* result = BuildLoadGlobal(ic, assembler); 440 Node* result = BuildLoadGlobal(ic, assembler);
438 __ SetAccumulator(result); 441 __ SetAccumulator(result);
439 __ Dispatch(); 442 __ Dispatch();
440 } 443 }
441 444
442 void Interpreter::DoStaGlobal(Callable ic, InterpreterAssembler* assembler) { 445 void Interpreter::DoStaGlobal(Callable ic, InterpreterAssembler* assembler) {
443 // Get the global object. 446 // Get the global object.
444 Node* context = __ GetContext(); 447 Node* context = __ GetContext();
445 Node* native_context = 448 Node* native_context =
446 __ LoadContextSlot(context, Context::NATIVE_CONTEXT_INDEX); 449 __ LoadContextSlot(context, Context::NATIVE_CONTEXT_INDEX);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 Node* context = __ GetContext(); 588 Node* context = __ GetContext();
586 return __ CallStub(ic.descriptor(), code_target, context, object, name, 589 return __ CallStub(ic.descriptor(), code_target, context, object, name,
587 smi_slot, type_feedback_vector); 590 smi_slot, type_feedback_vector);
588 } 591 }
589 592
590 // LdaNamedProperty <object> <name_index> <slot> 593 // LdaNamedProperty <object> <name_index> <slot>
591 // 594 //
592 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at 595 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at
593 // constant pool entry <name_index>. 596 // constant pool entry <name_index>.
594 void Interpreter::DoLdaNamedProperty(InterpreterAssembler* assembler) { 597 void Interpreter::DoLdaNamedProperty(InterpreterAssembler* assembler) {
595 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF); 598 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_);
596 Node* result = BuildLoadNamedProperty(ic, assembler); 599 Node* result = BuildLoadNamedProperty(ic, assembler);
597 __ SetAccumulator(result); 600 __ SetAccumulator(result);
598 __ Dispatch(); 601 __ Dispatch();
599 } 602 }
600 603
601 // LdrNamedProperty <object> <name_index> <slot> <reg> 604 // LdrNamedProperty <object> <name_index> <slot> <reg>
602 // 605 //
603 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at 606 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at
604 // constant pool entry <name_index> and puts the result into register <reg>. 607 // constant pool entry <name_index> and puts the result into register <reg>.
605 void Interpreter::DoLdrNamedProperty(InterpreterAssembler* assembler) { 608 void Interpreter::DoLdrNamedProperty(InterpreterAssembler* assembler) {
606 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF); 609 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_);
607 Node* result = BuildLoadNamedProperty(ic, assembler); 610 Node* result = BuildLoadNamedProperty(ic, assembler);
608 Node* destination = __ BytecodeOperandReg(3); 611 Node* destination = __ BytecodeOperandReg(3);
609 __ StoreRegister(result, destination); 612 __ StoreRegister(result, destination);
610 __ Dispatch(); 613 __ Dispatch();
611 } 614 }
612 615
613 Node* Interpreter::BuildLoadKeyedProperty(Callable ic, 616 Node* Interpreter::BuildLoadKeyedProperty(Callable ic,
614 InterpreterAssembler* assembler) { 617 InterpreterAssembler* assembler) {
615 Node* code_target = __ HeapConstant(ic.code()); 618 Node* code_target = __ HeapConstant(ic.code());
616 Node* reg_index = __ BytecodeOperandReg(0); 619 Node* reg_index = __ BytecodeOperandReg(0);
(...skipping 1205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1822 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, 1825 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset,
1823 __ SmiTag(new_state)); 1826 __ SmiTag(new_state));
1824 __ SetAccumulator(old_state); 1827 __ SetAccumulator(old_state);
1825 1828
1826 __ Dispatch(); 1829 __ Dispatch();
1827 } 1830 }
1828 1831
1829 } // namespace interpreter 1832 } // namespace interpreter
1830 } // namespace internal 1833 } // namespace internal
1831 } // namespace v8 1834 } // namespace v8
OLDNEW
« no previous file with comments | « src/interface-descriptors.cc ('k') | src/log.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698