| OLD | NEW |
| 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/compiler.h" | 7 #include "src/compiler.h" |
| 8 #include "src/compiler/interpreter-assembler.h" | 8 #include "src/compiler/interpreter-assembler.h" |
| 9 #include "src/factory.h" | 9 #include "src/factory.h" |
| 10 #include "src/interpreter/bytecode-generator.h" | 10 #include "src/interpreter/bytecode-generator.h" |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 Handle<FixedArray> handler_table) { | 82 Handle<FixedArray> handler_table) { |
| 83 DCHECK(handler_table->length() == static_cast<int>(Bytecode::kLast) + 1); | 83 DCHECK(handler_table->length() == static_cast<int>(Bytecode::kLast) + 1); |
| 84 return handler_table->get(0) != isolate_->heap()->undefined_value(); | 84 return handler_table->get(0) != isolate_->heap()->undefined_value(); |
| 85 } | 85 } |
| 86 | 86 |
| 87 | 87 |
| 88 // LdaZero | 88 // LdaZero |
| 89 // | 89 // |
| 90 // Load literal '0' into the accumulator. | 90 // Load literal '0' into the accumulator. |
| 91 void Interpreter::DoLdaZero(compiler::InterpreterAssembler* assembler) { | 91 void Interpreter::DoLdaZero(compiler::InterpreterAssembler* assembler) { |
| 92 // TODO(rmcilroy) Implement. | 92 Node* zero_value = __ NumberConstant(0.0); |
| 93 __ SetAccumulator(zero_value); |
| 93 __ Dispatch(); | 94 __ Dispatch(); |
| 94 } | 95 } |
| 95 | 96 |
| 96 | 97 |
| 97 // LdaSmi8 <imm8> | 98 // LdaSmi8 <imm8> |
| 98 // | 99 // |
| 99 // Load an 8-bit integer literal into the accumulator as a Smi. | 100 // Load an 8-bit integer literal into the accumulator as a Smi. |
| 100 void Interpreter::DoLdaSmi8(compiler::InterpreterAssembler* assembler) { | 101 void Interpreter::DoLdaSmi8(compiler::InterpreterAssembler* assembler) { |
| 101 // TODO(rmcilroy) Implement 8-bit integer to SMI promotion. | 102 Node* raw_int = __ BytecodeOperandImm8(0); |
| 103 Node* smi_int = __ SmiTag(raw_int); |
| 104 __ SetAccumulator(smi_int); |
| 102 __ Dispatch(); | 105 __ Dispatch(); |
| 103 } | 106 } |
| 104 | 107 |
| 105 | 108 |
| 106 // LdaUndefined | 109 // LdaUndefined |
| 107 // | 110 // |
| 108 // Load Undefined into the accumulator. | 111 // Load Undefined into the accumulator. |
| 109 void Interpreter::DoLdaUndefined(compiler::InterpreterAssembler* assembler) { | 112 void Interpreter::DoLdaUndefined(compiler::InterpreterAssembler* assembler) { |
| 110 // TODO(rmcilroy) Implement. | 113 Node* undefined_value = __ HeapConstant(Unique<HeapObject>::CreateImmovable( |
| 114 isolate_->factory()->undefined_value())); |
| 115 __ SetAccumulator(undefined_value); |
| 111 __ Dispatch(); | 116 __ Dispatch(); |
| 112 } | 117 } |
| 113 | 118 |
| 114 | 119 |
| 115 // LdaNull | 120 // LdaNull |
| 116 // | 121 // |
| 117 // Load Null into the accumulator. | 122 // Load Null into the accumulator. |
| 118 void Interpreter::DoLdaNull(compiler::InterpreterAssembler* assembler) { | 123 void Interpreter::DoLdaNull(compiler::InterpreterAssembler* assembler) { |
| 119 // TODO(rmcilroy) Implement. | 124 Node* null_value = __ HeapConstant( |
| 125 Unique<HeapObject>::CreateImmovable(isolate_->factory()->null_value())); |
| 126 __ SetAccumulator(null_value); |
| 120 __ Dispatch(); | 127 __ Dispatch(); |
| 121 } | 128 } |
| 122 | 129 |
| 123 | 130 |
| 124 // LdaTheHole | 131 // LdaTheHole |
| 125 // | 132 // |
| 126 // Load TheHole into the accumulator. | 133 // Load TheHole into the accumulator. |
| 127 void Interpreter::DoLdaTheHole(compiler::InterpreterAssembler* assembler) { | 134 void Interpreter::DoLdaTheHole(compiler::InterpreterAssembler* assembler) { |
| 128 // TODO(rmcilroy) Implement. | 135 Node* the_hole_value = __ HeapConstant(Unique<HeapObject>::CreateImmovable( |
| 136 isolate_->factory()->the_hole_value())); |
| 137 __ SetAccumulator(the_hole_value); |
| 129 __ Dispatch(); | 138 __ Dispatch(); |
| 130 } | 139 } |
| 131 | 140 |
| 132 | 141 |
| 133 // LdaTrue | 142 // LdaTrue |
| 134 // | 143 // |
| 135 // Load True into the accumulator. | 144 // Load True into the accumulator. |
| 136 void Interpreter::DoLdaTrue(compiler::InterpreterAssembler* assembler) { | 145 void Interpreter::DoLdaTrue(compiler::InterpreterAssembler* assembler) { |
| 137 // TODO(rmcilroy) Implement. | 146 Node* true_value = __ HeapConstant( |
| 147 Unique<HeapObject>::CreateImmovable(isolate_->factory()->true_value())); |
| 148 __ SetAccumulator(true_value); |
| 138 __ Dispatch(); | 149 __ Dispatch(); |
| 139 } | 150 } |
| 140 | 151 |
| 141 | 152 |
| 142 // LdaFalse | 153 // LdaFalse |
| 143 // | 154 // |
| 144 // Load False into the accumulator. | 155 // Load False into the accumulator. |
| 145 void Interpreter::DoLdaFalse(compiler::InterpreterAssembler* assembler) { | 156 void Interpreter::DoLdaFalse(compiler::InterpreterAssembler* assembler) { |
| 146 // TODO(rmcilroy) Implement. | 157 Node* false_value = __ HeapConstant( |
| 158 Unique<HeapObject>::CreateImmovable(isolate_->factory()->false_value())); |
| 159 __ SetAccumulator(false_value); |
| 147 __ Dispatch(); | 160 __ Dispatch(); |
| 148 } | 161 } |
| 149 | 162 |
| 150 | 163 |
| 151 // Ldar <src> | 164 // Ldar <src> |
| 152 // | 165 // |
| 153 // Load accumulator with value from register <src>. | 166 // Load accumulator with value from register <src>. |
| 154 void Interpreter::DoLdar(compiler::InterpreterAssembler* assembler) { | 167 void Interpreter::DoLdar(compiler::InterpreterAssembler* assembler) { |
| 155 // TODO(rmcilroy) Implement. | 168 Node* value = __ LoadRegister(__ BytecodeOperandReg(0)); |
| 169 __ SetAccumulator(value); |
| 156 __ Dispatch(); | 170 __ Dispatch(); |
| 157 } | 171 } |
| 158 | 172 |
| 159 | 173 |
| 160 // Star <dst> | 174 // Star <dst> |
| 161 // | 175 // |
| 162 // Store accumulator to register <dst>. | 176 // Store accumulator to register <dst>. |
| 163 void Interpreter::DoStar(compiler::InterpreterAssembler* assembler) { | 177 void Interpreter::DoStar(compiler::InterpreterAssembler* assembler) { |
| 164 // TODO(rmcilroy) Implement. | 178 Node* reg_index = __ BytecodeOperandReg(0); |
| 179 Node* accumulator = __ GetAccumulator(); |
| 180 __ StoreRegister(accumulator, reg_index); |
| 165 __ Dispatch(); | 181 __ Dispatch(); |
| 166 } | 182 } |
| 167 | 183 |
| 168 | 184 |
| 169 // Add <src> | 185 // Add <src> |
| 170 // | 186 // |
| 171 // Add register <src> to accumulator. | 187 // Add register <src> to accumulator. |
| 172 void Interpreter::DoAdd(compiler::InterpreterAssembler* assembler) { | 188 void Interpreter::DoAdd(compiler::InterpreterAssembler* assembler) { |
| 173 // TODO(rmcilroy) Implement. | 189 // TODO(rmcilroy) Implement. |
| 174 __ Dispatch(); | 190 __ Dispatch(); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 // | 222 // |
| 207 // Return the value in register 0. | 223 // Return the value in register 0. |
| 208 void Interpreter::DoReturn(compiler::InterpreterAssembler* assembler) { | 224 void Interpreter::DoReturn(compiler::InterpreterAssembler* assembler) { |
| 209 __ Return(); | 225 __ Return(); |
| 210 } | 226 } |
| 211 | 227 |
| 212 | 228 |
| 213 } // namespace interpreter | 229 } // namespace interpreter |
| 214 } // namespace internal | 230 } // namespace internal |
| 215 } // namespace v8 | 231 } // namespace v8 |
| OLD | NEW |