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

Side by Side Diff: src/interpreter/bytecode-array-builder.cc

Issue 1546643002: [Interpreter] Updates load/store global and named property to accept variable name. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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/bytecode-array-builder.h ('k') | src/interpreter/bytecode-generator.cc » ('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/bytecode-array-builder.h" 5 #include "src/interpreter/bytecode-array-builder.h"
6 6
7 namespace v8 { 7 namespace v8 {
8 namespace internal { 8 namespace internal {
9 namespace interpreter { 9 namespace interpreter {
10 10
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 373
374 BytecodeArrayBuilder& BytecodeArrayBuilder::MoveRegister(Register from, 374 BytecodeArrayBuilder& BytecodeArrayBuilder::MoveRegister(Register from,
375 Register to) { 375 Register to) {
376 DCHECK(from != to); 376 DCHECK(from != to);
377 Output(Bytecode::kMov, from.ToOperand(), to.ToOperand()); 377 Output(Bytecode::kMov, from.ToOperand(), to.ToOperand());
378 return *this; 378 return *this;
379 } 379 }
380 380
381 381
382 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal( 382 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal(
383 size_t name_index, int feedback_slot, LanguageMode language_mode, 383 const Handle<String> name, int feedback_slot, LanguageMode language_mode,
384 TypeofMode typeof_mode) { 384 TypeofMode typeof_mode) {
385 // TODO(rmcilroy): Potentially store language and typeof information in an 385 // TODO(rmcilroy): Potentially store language and typeof information in an
386 // operand rather than having extra bytecodes. 386 // operand rather than having extra bytecodes.
387 Bytecode bytecode = BytecodeForLoadGlobal(language_mode, typeof_mode); 387 Bytecode bytecode = BytecodeForLoadGlobal(language_mode, typeof_mode);
388 size_t name_index = GetConstantPoolEntry(name);
388 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) { 389 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) {
389 Output(bytecode, static_cast<uint8_t>(name_index), 390 Output(bytecode, static_cast<uint8_t>(name_index),
390 static_cast<uint8_t>(feedback_slot)); 391 static_cast<uint8_t>(feedback_slot));
391 } else if (FitsInIdx16Operand(name_index) && 392 } else if (FitsInIdx16Operand(name_index) &&
392 FitsInIdx16Operand(feedback_slot)) { 393 FitsInIdx16Operand(feedback_slot)) {
393 Output(BytecodeForWideOperands(bytecode), static_cast<uint16_t>(name_index), 394 Output(BytecodeForWideOperands(bytecode), static_cast<uint16_t>(name_index),
394 static_cast<uint16_t>(feedback_slot)); 395 static_cast<uint16_t>(feedback_slot));
395 } else { 396 } else {
396 UNIMPLEMENTED(); 397 UNIMPLEMENTED();
397 } 398 }
398 return *this; 399 return *this;
399 } 400 }
400 401
401 402
402 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreGlobal( 403 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreGlobal(
403 size_t name_index, int feedback_slot, LanguageMode language_mode) { 404 const Handle<String> name, int feedback_slot, LanguageMode language_mode) {
404 Bytecode bytecode = BytecodeForStoreGlobal(language_mode); 405 Bytecode bytecode = BytecodeForStoreGlobal(language_mode);
406 size_t name_index = GetConstantPoolEntry(name);
405 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) { 407 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) {
406 Output(bytecode, static_cast<uint8_t>(name_index), 408 Output(bytecode, static_cast<uint8_t>(name_index),
407 static_cast<uint8_t>(feedback_slot)); 409 static_cast<uint8_t>(feedback_slot));
408 } else if (FitsInIdx16Operand(name_index) && 410 } else if (FitsInIdx16Operand(name_index) &&
409 FitsInIdx16Operand(feedback_slot)) { 411 FitsInIdx16Operand(feedback_slot)) {
410 Output(BytecodeForWideOperands(bytecode), static_cast<uint16_t>(name_index), 412 Output(BytecodeForWideOperands(bytecode), static_cast<uint16_t>(name_index),
411 static_cast<uint16_t>(feedback_slot)); 413 static_cast<uint16_t>(feedback_slot));
412 } else { 414 } else {
413 UNIMPLEMENTED(); 415 UNIMPLEMENTED();
414 } 416 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 if (FitsInIdx8Operand(name_index)) { 466 if (FitsInIdx8Operand(name_index)) {
465 Output(bytecode, static_cast<uint8_t>(name_index)); 467 Output(bytecode, static_cast<uint8_t>(name_index));
466 } else { 468 } else {
467 UNIMPLEMENTED(); 469 UNIMPLEMENTED();
468 } 470 }
469 return *this; 471 return *this;
470 } 472 }
471 473
472 474
473 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty( 475 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty(
474 Register object, size_t name_index, int feedback_slot, 476 Register object, const Handle<String> name, int feedback_slot,
475 LanguageMode language_mode) { 477 LanguageMode language_mode) {
476 Bytecode bytecode = BytecodeForLoadIC(language_mode); 478 Bytecode bytecode = BytecodeForLoadIC(language_mode);
479 size_t name_index = GetConstantPoolEntry(name);
477 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) { 480 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) {
478 Output(bytecode, object.ToOperand(), static_cast<uint8_t>(name_index), 481 Output(bytecode, object.ToOperand(), static_cast<uint8_t>(name_index),
479 static_cast<uint8_t>(feedback_slot)); 482 static_cast<uint8_t>(feedback_slot));
480 } else if (FitsInIdx16Operand(name_index) && 483 } else if (FitsInIdx16Operand(name_index) &&
481 FitsInIdx16Operand(feedback_slot)) { 484 FitsInIdx16Operand(feedback_slot)) {
482 Output(BytecodeForWideOperands(bytecode), object.ToOperand(), 485 Output(BytecodeForWideOperands(bytecode), object.ToOperand(),
483 static_cast<uint16_t>(name_index), 486 static_cast<uint16_t>(name_index),
484 static_cast<uint16_t>(feedback_slot)); 487 static_cast<uint16_t>(feedback_slot));
485 } else { 488 } else {
486 UNIMPLEMENTED(); 489 UNIMPLEMENTED();
(...skipping 11 matching lines...) Expand all
498 Output(BytecodeForWideOperands(bytecode), object.ToOperand(), 501 Output(BytecodeForWideOperands(bytecode), object.ToOperand(),
499 static_cast<uint16_t>(feedback_slot)); 502 static_cast<uint16_t>(feedback_slot));
500 } else { 503 } else {
501 UNIMPLEMENTED(); 504 UNIMPLEMENTED();
502 } 505 }
503 return *this; 506 return *this;
504 } 507 }
505 508
506 509
507 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreNamedProperty( 510 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreNamedProperty(
508 Register object, size_t name_index, int feedback_slot, 511 Register object, const Handle<String> name, int feedback_slot,
509 LanguageMode language_mode) { 512 LanguageMode language_mode) {
510 Bytecode bytecode = BytecodeForStoreIC(language_mode); 513 Bytecode bytecode = BytecodeForStoreIC(language_mode);
514 size_t name_index = GetConstantPoolEntry(name);
511 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) { 515 if (FitsInIdx8Operand(name_index) && FitsInIdx8Operand(feedback_slot)) {
512 Output(bytecode, object.ToOperand(), static_cast<uint8_t>(name_index), 516 Output(bytecode, object.ToOperand(), static_cast<uint8_t>(name_index),
513 static_cast<uint8_t>(feedback_slot)); 517 static_cast<uint8_t>(feedback_slot));
514 } else if (FitsInIdx16Operand(name_index) && 518 } else if (FitsInIdx16Operand(name_index) &&
515 FitsInIdx16Operand(feedback_slot)) { 519 FitsInIdx16Operand(feedback_slot)) {
516 Output(BytecodeForWideOperands(bytecode), object.ToOperand(), 520 Output(BytecodeForWideOperands(bytecode), object.ToOperand(),
517 static_cast<uint16_t>(name_index), 521 static_cast<uint16_t>(name_index),
518 static_cast<uint16_t>(feedback_slot)); 522 static_cast<uint16_t>(feedback_slot));
519 } else { 523 } else {
520 UNIMPLEMENTED(); 524 UNIMPLEMENTED();
(...skipping 1012 matching lines...) Expand 10 before | Expand all | Expand 10 after
1533 DCHECK_GT(next_consecutive_count_, 0); 1537 DCHECK_GT(next_consecutive_count_, 0);
1534 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); 1538 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_);
1535 allocated_.push_back(next_consecutive_register_); 1539 allocated_.push_back(next_consecutive_register_);
1536 next_consecutive_count_--; 1540 next_consecutive_count_--;
1537 return Register(next_consecutive_register_++); 1541 return Register(next_consecutive_register_++);
1538 } 1542 }
1539 1543
1540 } // namespace interpreter 1544 } // namespace interpreter
1541 } // namespace internal 1545 } // namespace internal
1542 } // namespace v8 1546 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/bytecode-array-builder.h ('k') | src/interpreter/bytecode-generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698