Index: src/interpreter/interpreter.cc |
diff --git a/src/interpreter/interpreter.cc b/src/interpreter/interpreter.cc |
index 85fa74fc87a40c5d41643ea6ae151fefb26910b8..98d9b33fb864a5a0019ec380db936aa80c34204f 100644 |
--- a/src/interpreter/interpreter.cc |
+++ b/src/interpreter/interpreter.cc |
@@ -347,6 +347,26 @@ void Interpreter::DoKeyedStoreICStrict( |
} |
+// KeyedStoreICGeneric <object> <key> |
+// |
+// Calls the generic KeyStoreIC for <object> and the key <key> with the value in |
+// the accumulator. |
+void Interpreter::DoKeyedStoreICGeneric( |
+ compiler::InterpreterAssembler* assembler) { |
+ Callable ic = |
+ CodeFactory::KeyedStoreICInOptimizedCode(isolate_, SLOPPY, MEGAMORPHIC); |
+ Node* code_target = __ HeapConstant(ic.code()); |
+ Node* object_reg_index = __ BytecodeOperandReg8(0); |
+ Node* object = __ LoadRegister(object_reg_index); |
+ Node* name_reg_index = __ BytecodeOperandReg8(1); |
+ Node* name = __ LoadRegister(name_reg_index); |
+ Node* value = __ GetAccumulator(); |
+ Node* result = __ CallIC(ic.descriptor(), code_target, object, name, value); |
+ __ SetAccumulator(result); |
+ __ Dispatch(); |
+} |
+ |
+ |
// PushContext <context> |
// |
// Pushes the accumulator as the current context, and saves it in <context> |
@@ -710,6 +730,27 @@ void Interpreter::DoJumpIfFalseConstant( |
} |
+// CreateArrayLiteral <idx> <flags> |
+// |
+// Creates an array literal for literal index <idx> with flags <flags> and |
+// constant elements in the accumulator. |
+void Interpreter::DoCreateArrayLiteral( |
+ compiler::InterpreterAssembler* assembler) { |
+ Node* constant_elements = __ GetAccumulator(); |
+ Node* literal_index_raw = __ BytecodeOperandIdx8(0); |
+ Node* literal_index = __ SmiTag(literal_index_raw); |
+ Node* flags_raw = __ BytecodeOperandImm8(1); |
+ Node* flags = __ SmiTag(flags_raw); |
+ Node* closure = __ LoadRegister(Register::function_closure()); |
+ Node* literals_array = |
+ __ LoadObjectField(closure, JSFunction::kLiteralsOffset); |
+ Node* result = __ CallRuntime(Runtime::kCreateArrayLiteral, literals_array, |
+ literal_index, constant_elements, flags); |
+ __ SetAccumulator(result); |
+ __ Dispatch(); |
+} |
+ |
+ |
// CreateClosure <tenured> |
// |
// Creates a new closure for SharedFunctionInfo in the accumulator with the |