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

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

Issue 1700993002: Remove strong mode support from property loads. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix comment. Created 4 years, 10 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/interpreter/bytecodes.h ('k') | src/objects.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 "src/ast/prettyprinter.h" 7 #include "src/ast/prettyprinter.h"
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/factory.h" 10 #include "src/factory.h"
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 Node* name = __ LoadConstantPoolEntry(constant_index); 256 Node* name = __ LoadConstantPoolEntry(constant_index);
257 Node* raw_slot = __ BytecodeOperandIdx(1); 257 Node* raw_slot = __ BytecodeOperandIdx(1);
258 Node* smi_slot = __ SmiTag(raw_slot); 258 Node* smi_slot = __ SmiTag(raw_slot);
259 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 259 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
260 Node* result = __ CallStub(ic.descriptor(), code_target, context, global, 260 Node* result = __ CallStub(ic.descriptor(), code_target, context, global,
261 name, smi_slot, type_feedback_vector); 261 name, smi_slot, type_feedback_vector);
262 __ SetAccumulator(result); 262 __ SetAccumulator(result);
263 __ Dispatch(); 263 __ Dispatch();
264 } 264 }
265 265
266 266 // LdaGlobal <name_index> <slot>
267 // LdaGlobalSloppy <name_index> <slot>
268 // 267 //
269 // Load the global with name in constant pool entry <name_index> into the 268 // Load the global with name in constant pool entry <name_index> into the
270 // accumulator using FeedBackVector slot <slot> in sloppy mode. 269 // accumulator using FeedBackVector slot <slot> outside of a typeof.
271 void Interpreter::DoLdaGlobalSloppy(InterpreterAssembler* assembler) { 270 void Interpreter::DoLdaGlobal(InterpreterAssembler* assembler) {
272 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF, 271 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF,
273 SLOPPY, UNINITIALIZED); 272 UNINITIALIZED);
273 DoLoadGlobal(ic, assembler);
274 }
275
276 // LdaGlobalInsideTypeof <name_index> <slot>
277 //
278 // Load the global with name in constant pool entry <name_index> into the
279 // accumulator using FeedBackVector slot <slot> inside of a typeof.
280 void Interpreter::DoLdaGlobalInsideTypeof(InterpreterAssembler* assembler) {
281 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, INSIDE_TYPEOF,
282 UNINITIALIZED);
283 DoLoadGlobal(ic, assembler);
284 }
285
286 // LdaGlobalWide <name_index> <slot>
287 //
288 // Load the global with name in constant pool entry <name_index> into the
289 // accumulator using FeedBackVector slot <slot> outside of a typeof.
290 void Interpreter::DoLdaGlobalWide(InterpreterAssembler* assembler) {
291 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF,
292 UNINITIALIZED);
293 DoLoadGlobal(ic, assembler);
294 }
295
296 // LdaGlobalInsideTypeofWide <name_index> <slot>
297 //
298 // Load the global with name in constant pool entry <name_index> into the
299 // accumulator using FeedBackVector slot <slot> inside of a typeof.
300 void Interpreter::DoLdaGlobalInsideTypeofWide(InterpreterAssembler* assembler) {
301 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, INSIDE_TYPEOF,
302 UNINITIALIZED);
274 DoLoadGlobal(ic, assembler); 303 DoLoadGlobal(ic, assembler);
275 } 304 }
276 305
277 306
278 // LdaGlobalSloppy <name_index> <slot>
279 //
280 // Load the global with name in constant pool entry <name_index> into the
281 // accumulator using FeedBackVector slot <slot> in strict mode.
282 void Interpreter::DoLdaGlobalStrict(InterpreterAssembler* assembler) {
283 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF,
284 STRICT, UNINITIALIZED);
285 DoLoadGlobal(ic, assembler);
286 }
287
288
289 // LdaGlobalInsideTypeofSloppy <name_index> <slot>
290 //
291 // Load the global with name in constant pool entry <name_index> into the
292 // accumulator using FeedBackVector slot <slot> in sloppy mode.
293 void Interpreter::DoLdaGlobalInsideTypeofSloppy(
294 InterpreterAssembler* assembler) {
295 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, INSIDE_TYPEOF,
296 SLOPPY, UNINITIALIZED);
297 DoLoadGlobal(ic, assembler);
298 }
299
300
301 // LdaGlobalInsideTypeofStrict <name_index> <slot>
302 //
303 // Load the global with name in constant pool entry <name_index> into the
304 // accumulator using FeedBackVector slot <slot> in strict mode.
305 void Interpreter::DoLdaGlobalInsideTypeofStrict(
306 InterpreterAssembler* assembler) {
307 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, INSIDE_TYPEOF,
308 STRICT, UNINITIALIZED);
309 DoLoadGlobal(ic, assembler);
310 }
311
312
313 // LdaGlobalSloppyWide <name_index> <slot>
314 //
315 // Load the global with name in constant pool entry <name_index> into the
316 // accumulator using FeedBackVector slot <slot> in sloppy mode.
317 void Interpreter::DoLdaGlobalSloppyWide(InterpreterAssembler* assembler) {
318 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF,
319 SLOPPY, UNINITIALIZED);
320 DoLoadGlobal(ic, assembler);
321 }
322
323
324 // LdaGlobalSloppyWide <name_index> <slot>
325 //
326 // Load the global with name in constant pool entry <name_index> into the
327 // accumulator using FeedBackVector slot <slot> in strict mode.
328 void Interpreter::DoLdaGlobalStrictWide(InterpreterAssembler* assembler) {
329 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF,
330 STRICT, UNINITIALIZED);
331 DoLoadGlobal(ic, assembler);
332 }
333
334
335 // LdaGlobalInsideTypeofSloppyWide <name_index> <slot>
336 //
337 // Load the global with name in constant pool entry <name_index> into the
338 // accumulator using FeedBackVector slot <slot> in sloppy mode.
339 void Interpreter::DoLdaGlobalInsideTypeofSloppyWide(
340 InterpreterAssembler* assembler) {
341 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, INSIDE_TYPEOF,
342 SLOPPY, UNINITIALIZED);
343 DoLoadGlobal(ic, assembler);
344 }
345
346
347 // LdaGlobalInsideTypeofSloppyWide <name_index> <slot>
348 //
349 // Load the global with name in constant pool entry <name_index> into the
350 // accumulator using FeedBackVector slot <slot> in strict mode.
351 void Interpreter::DoLdaGlobalInsideTypeofStrictWide(
352 InterpreterAssembler* assembler) {
353 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, INSIDE_TYPEOF,
354 STRICT, UNINITIALIZED);
355 DoLoadGlobal(ic, assembler);
356 }
357
358 void Interpreter::DoStoreGlobal(Callable ic, InterpreterAssembler* assembler) { 307 void Interpreter::DoStoreGlobal(Callable ic, InterpreterAssembler* assembler) {
359 // Get the global object. 308 // Get the global object.
360 Node* context = __ GetContext(); 309 Node* context = __ GetContext();
361 Node* native_context = 310 Node* native_context =
362 __ LoadContextSlot(context, Context::NATIVE_CONTEXT_INDEX); 311 __ LoadContextSlot(context, Context::NATIVE_CONTEXT_INDEX);
363 Node* global = __ LoadContextSlot(native_context, Context::EXTENSION_INDEX); 312 Node* global = __ LoadContextSlot(native_context, Context::EXTENSION_INDEX);
364 313
365 // Store the global via the StoreIC. 314 // Store the global via the StoreIC.
366 Node* code_target = __ HeapConstant(ic.code()); 315 Node* code_target = __ HeapConstant(ic.code());
367 Node* constant_index = __ BytecodeOperandIdx(0); 316 Node* constant_index = __ BytecodeOperandIdx(0);
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 Node* raw_slot = __ BytecodeOperandIdx(2); 517 Node* raw_slot = __ BytecodeOperandIdx(2);
569 Node* smi_slot = __ SmiTag(raw_slot); 518 Node* smi_slot = __ SmiTag(raw_slot);
570 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 519 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
571 Node* context = __ GetContext(); 520 Node* context = __ GetContext();
572 Node* result = __ CallStub(ic.descriptor(), code_target, context, object, 521 Node* result = __ CallStub(ic.descriptor(), code_target, context, object,
573 name, smi_slot, type_feedback_vector); 522 name, smi_slot, type_feedback_vector);
574 __ SetAccumulator(result); 523 __ SetAccumulator(result);
575 __ Dispatch(); 524 __ Dispatch();
576 } 525 }
577 526
527 // LoadIC <object> <name_index> <slot>
528 //
529 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at
530 // constant pool entry <name_index>.
531 void Interpreter::DoLoadIC(InterpreterAssembler* assembler) {
532 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF,
533 UNINITIALIZED);
534 DoLoadIC(ic, assembler);
535 }
578 536
579 // LoadICSloppy <object> <name_index> <slot> 537 // LoadICWide <object> <name_index> <slot>
580 // 538 //
581 // Calls the sloppy mode LoadIC at FeedBackVector slot <slot> for <object> and 539 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at
582 // the name at constant pool entry <name_index>. 540 // constant pool entry <name_index>.
583 void Interpreter::DoLoadICSloppy(InterpreterAssembler* assembler) { 541 void Interpreter::DoLoadICWide(InterpreterAssembler* assembler) {
584 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF, 542 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF,
585 SLOPPY, UNINITIALIZED); 543 UNINITIALIZED);
586 DoLoadIC(ic, assembler); 544 DoLoadIC(ic, assembler);
587 } 545 }
588 546
589 547
590 // LoadICStrict <object> <name_index> <slot>
591 //
592 // Calls the sloppy mode LoadIC at FeedBackVector slot <slot> for <object> and
593 // the name at constant pool entry <name_index>.
594 void Interpreter::DoLoadICStrict(InterpreterAssembler* assembler) {
595 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF,
596 STRICT, UNINITIALIZED);
597 DoLoadIC(ic, assembler);
598 }
599
600
601 // LoadICSloppyWide <object> <name_index> <slot>
602 //
603 // Calls the sloppy mode LoadIC at FeedBackVector slot <slot> for <object> and
604 // the name at constant pool entry <name_index>.
605 void Interpreter::DoLoadICSloppyWide(InterpreterAssembler* assembler) {
606 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF,
607 SLOPPY, UNINITIALIZED);
608 DoLoadIC(ic, assembler);
609 }
610
611
612 // LoadICStrictWide <object> <name_index> <slot>
613 //
614 // Calls the sloppy mode LoadIC at FeedBackVector slot <slot> for <object> and
615 // the name at constant pool entry <name_index>.
616 void Interpreter::DoLoadICStrictWide(InterpreterAssembler* assembler) {
617 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF,
618 STRICT, UNINITIALIZED);
619 DoLoadIC(ic, assembler);
620 }
621
622 void Interpreter::DoKeyedLoadIC(Callable ic, InterpreterAssembler* assembler) { 548 void Interpreter::DoKeyedLoadIC(Callable ic, InterpreterAssembler* assembler) {
623 Node* code_target = __ HeapConstant(ic.code()); 549 Node* code_target = __ HeapConstant(ic.code());
624 Node* reg_index = __ BytecodeOperandReg(0); 550 Node* reg_index = __ BytecodeOperandReg(0);
625 Node* object = __ LoadRegister(reg_index); 551 Node* object = __ LoadRegister(reg_index);
626 Node* name = __ GetAccumulator(); 552 Node* name = __ GetAccumulator();
627 Node* raw_slot = __ BytecodeOperandIdx(1); 553 Node* raw_slot = __ BytecodeOperandIdx(1);
628 Node* smi_slot = __ SmiTag(raw_slot); 554 Node* smi_slot = __ SmiTag(raw_slot);
629 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 555 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
630 Node* context = __ GetContext(); 556 Node* context = __ GetContext();
631 Node* result = __ CallStub(ic.descriptor(), code_target, context, object, 557 Node* result = __ CallStub(ic.descriptor(), code_target, context, object,
632 name, smi_slot, type_feedback_vector); 558 name, smi_slot, type_feedback_vector);
633 __ SetAccumulator(result); 559 __ SetAccumulator(result);
634 __ Dispatch(); 560 __ Dispatch();
635 } 561 }
636 562
563 // KeyedLoadIC <object> <slot>
564 //
565 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key
566 // in the accumulator.
567 void Interpreter::DoKeyedLoadIC(InterpreterAssembler* assembler) {
568 Callable ic =
569 CodeFactory::KeyedLoadICInOptimizedCode(isolate_, UNINITIALIZED);
570 DoKeyedLoadIC(ic, assembler);
571 }
637 572
638 // KeyedLoadICSloppy <object> <slot> 573 // KeyedLoadICWide <object> <slot>
639 // 574 //
640 // Calls the sloppy mode KeyedLoadIC at FeedBackVector slot <slot> for <object> 575 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key
641 // and the key in the accumulator. 576 // in the accumulator.
642 void Interpreter::DoKeyedLoadICSloppy(InterpreterAssembler* assembler) { 577 void Interpreter::DoKeyedLoadICWide(InterpreterAssembler* assembler) {
643 Callable ic = 578 Callable ic =
644 CodeFactory::KeyedLoadICInOptimizedCode(isolate_, SLOPPY, UNINITIALIZED); 579 CodeFactory::KeyedLoadICInOptimizedCode(isolate_, UNINITIALIZED);
645 DoKeyedLoadIC(ic, assembler); 580 DoKeyedLoadIC(ic, assembler);
646 } 581 }
647 582
648 583
649 // KeyedLoadICStrict <object> <slot>
650 //
651 // Calls the strict mode KeyedLoadIC at FeedBackVector slot <slot> for <object>
652 // and the key in the accumulator.
653 void Interpreter::DoKeyedLoadICStrict(InterpreterAssembler* assembler) {
654 Callable ic =
655 CodeFactory::KeyedLoadICInOptimizedCode(isolate_, STRICT, UNINITIALIZED);
656 DoKeyedLoadIC(ic, assembler);
657 }
658
659
660 // KeyedLoadICSloppyWide <object> <slot>
661 //
662 // Calls the sloppy mode KeyedLoadIC at FeedBackVector slot <slot> for <object>
663 // and the key in the accumulator.
664 void Interpreter::DoKeyedLoadICSloppyWide(InterpreterAssembler* assembler) {
665 Callable ic =
666 CodeFactory::KeyedLoadICInOptimizedCode(isolate_, SLOPPY, UNINITIALIZED);
667 DoKeyedLoadIC(ic, assembler);
668 }
669
670
671 // KeyedLoadICStrictWide <object> <slot>
672 //
673 // Calls the strict mode KeyedLoadIC at FeedBackVector slot <slot> for <object>
674 // and the key in the accumulator.
675 void Interpreter::DoKeyedLoadICStrictWide(InterpreterAssembler* assembler) {
676 Callable ic =
677 CodeFactory::KeyedLoadICInOptimizedCode(isolate_, STRICT, UNINITIALIZED);
678 DoKeyedLoadIC(ic, assembler);
679 }
680
681 void Interpreter::DoStoreIC(Callable ic, InterpreterAssembler* assembler) { 584 void Interpreter::DoStoreIC(Callable ic, InterpreterAssembler* assembler) {
682 Node* code_target = __ HeapConstant(ic.code()); 585 Node* code_target = __ HeapConstant(ic.code());
683 Node* object_reg_index = __ BytecodeOperandReg(0); 586 Node* object_reg_index = __ BytecodeOperandReg(0);
684 Node* object = __ LoadRegister(object_reg_index); 587 Node* object = __ LoadRegister(object_reg_index);
685 Node* constant_index = __ BytecodeOperandIdx(1); 588 Node* constant_index = __ BytecodeOperandIdx(1);
686 Node* name = __ LoadConstantPoolEntry(constant_index); 589 Node* name = __ LoadConstantPoolEntry(constant_index);
687 Node* value = __ GetAccumulator(); 590 Node* value = __ GetAccumulator();
688 Node* raw_slot = __ BytecodeOperandIdx(2); 591 Node* raw_slot = __ BytecodeOperandIdx(2);
689 Node* smi_slot = __ SmiTag(raw_slot); 592 Node* smi_slot = __ SmiTag(raw_slot);
690 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); 593 Node* type_feedback_vector = __ LoadTypeFeedbackVector();
(...skipping 1199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1890 Node* index = __ LoadRegister(index_reg); 1793 Node* index = __ LoadRegister(index_reg);
1891 Node* context = __ GetContext(); 1794 Node* context = __ GetContext();
1892 Node* result = __ CallRuntime(Runtime::kForInStep, context, index); 1795 Node* result = __ CallRuntime(Runtime::kForInStep, context, index);
1893 __ SetAccumulator(result); 1796 __ SetAccumulator(result);
1894 __ Dispatch(); 1797 __ Dispatch();
1895 } 1798 }
1896 1799
1897 } // namespace interpreter 1800 } // namespace interpreter
1898 } // namespace internal 1801 } // namespace internal
1899 } // namespace v8 1802 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/bytecodes.h ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698