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

Unified Diff: src/interpreter/bytecode-array-builder.cc

Issue 1385623002: [Interpreter]: Add support for strict mode load / store ICs. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: src/interpreter/bytecode-array-builder.cc
diff --git a/src/interpreter/bytecode-array-builder.cc b/src/interpreter/bytecode-array-builder.cc
index 9c937d74370d3cde35fcb47caa36239d048b6137..01c5a91a1a4f4953d2d33c8f0821aab01b960b92 100644
--- a/src/interpreter/bytecode-array-builder.cc
+++ b/src/interpreter/bytecode-array-builder.cc
@@ -127,8 +127,12 @@ void BytecodeArrayBuilder::Output(Bytecode bytecode) {
}
-BytecodeArrayBuilder& BytecodeArrayBuilder::BinaryOperation(Token::Value op,
- Register reg) {
+BytecodeArrayBuilder& BytecodeArrayBuilder::BinaryOperation(
+ Token::Value op, Register reg, LanguageMode language_mode) {
+ if (is_strong(strength(language_mode))) {
+ UNIMPLEMENTED();
oth 2015/10/02 15:17:44 Nitletino - other updates here take a more conserv
rmcilroy 2015/10/06 13:56:34 I'd prefer not to do this since it is the language
+ }
+
Output(BytecodeForBinaryOperation(op), reg.ToOperand());
return *this;
}
@@ -136,7 +140,7 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::BinaryOperation(Token::Value op,
BytecodeArrayBuilder& BytecodeArrayBuilder::CompareOperation(
Token::Value op, Register reg, LanguageMode language_mode) {
- if (!is_sloppy(language_mode)) {
+ if (is_strong(strength(language_mode))) {
oth 2015/10/02 15:17:44 Nitletino -same here.
rmcilroy 2015/10/06 13:56:34 Acknowledged.
UNIMPLEMENTED();
}
@@ -226,13 +230,21 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadGlobal(int slot_index) {
BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty(
Register object, int feedback_slot, LanguageMode language_mode) {
- if (!is_sloppy(language_mode)) {
- UNIMPLEMENTED();
+ Bytecode bytecode;
+ switch (language_mode) {
+ case SLOPPY:
+ bytecode = Bytecode::kLoadIC;
+ break;
+ case STRICT:
+ bytecode = Bytecode::kLoadICStrict;
+ break;
+ case STRONG:
+ default:
+ UNIMPLEMENTED();
Michael Starzinger 2015/10/05 12:04:45 nit: The strong case is UNIMPLEMENTED but the defa
rmcilroy 2015/10/06 13:56:34 Done.
}
if (FitsInIdxOperand(feedback_slot)) {
- Output(Bytecode::kLoadIC, object.ToOperand(),
- static_cast<uint8_t>(feedback_slot));
+ Output(bytecode, object.ToOperand(), static_cast<uint8_t>(feedback_slot));
} else {
UNIMPLEMENTED();
}
@@ -242,13 +254,21 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty(
BytecodeArrayBuilder& BytecodeArrayBuilder::LoadKeyedProperty(
Register object, int feedback_slot, LanguageMode language_mode) {
- if (!is_sloppy(language_mode)) {
- UNIMPLEMENTED();
+ Bytecode bytecode;
+ switch (language_mode) {
+ case SLOPPY:
+ bytecode = Bytecode::kKeyedLoadIC;
+ break;
+ case STRICT:
+ bytecode = Bytecode::kKeyedLoadICStrict;
+ break;
+ case STRONG:
+ default:
+ UNIMPLEMENTED();
}
if (FitsInIdxOperand(feedback_slot)) {
- Output(Bytecode::kKeyedLoadIC, object.ToOperand(),
- static_cast<uint8_t>(feedback_slot));
+ Output(bytecode, object.ToOperand(), static_cast<uint8_t>(feedback_slot));
} else {
UNIMPLEMENTED();
}
@@ -259,12 +279,21 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadKeyedProperty(
BytecodeArrayBuilder& BytecodeArrayBuilder::StoreNamedProperty(
Register object, Register name, int feedback_slot,
LanguageMode language_mode) {
- if (!is_sloppy(language_mode)) {
- UNIMPLEMENTED();
+ Bytecode bytecode;
+ switch (language_mode) {
+ case SLOPPY:
+ bytecode = Bytecode::kStoreIC;
+ break;
+ case STRICT:
+ bytecode = Bytecode::kStoreICStrict;
+ break;
+ case STRONG:
+ default:
+ UNIMPLEMENTED();
}
if (FitsInIdxOperand(feedback_slot)) {
- Output(Bytecode::kStoreIC, object.ToOperand(), name.ToOperand(),
+ Output(bytecode, object.ToOperand(), name.ToOperand(),
static_cast<uint8_t>(feedback_slot));
} else {
UNIMPLEMENTED();
@@ -276,12 +305,21 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::StoreNamedProperty(
BytecodeArrayBuilder& BytecodeArrayBuilder::StoreKeyedProperty(
Register object, Register key, int feedback_slot,
LanguageMode language_mode) {
- if (!is_sloppy(language_mode)) {
- UNIMPLEMENTED();
+ Bytecode bytecode;
+ switch (language_mode) {
+ case SLOPPY:
+ bytecode = Bytecode::kKeyedStoreIC;
+ break;
+ case STRICT:
+ bytecode = Bytecode::kKeyedStoreICStrict;
+ break;
+ case STRONG:
+ default:
+ UNIMPLEMENTED();
}
if (FitsInIdxOperand(feedback_slot)) {
- Output(Bytecode::kKeyedStoreIC, object.ToOperand(), key.ToOperand(),
+ Output(bytecode, object.ToOperand(), key.ToOperand(),
static_cast<uint8_t>(feedback_slot));
} else {
UNIMPLEMENTED();

Powered by Google App Engine
This is Rietveld 408576698