Chromium Code Reviews| 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/bytecodes.h" | 11 #include "src/interpreter/bytecodes.h" |
| 11 #include "src/zone.h" | 12 #include "src/zone.h" |
| 12 | 13 |
| 13 namespace v8 { | 14 namespace v8 { |
| 14 namespace internal { | 15 namespace internal { |
| 15 namespace interpreter { | 16 namespace interpreter { |
| 16 | 17 |
| 17 using compiler::Node; | 18 using compiler::Node; |
| 18 #define __ assembler-> | 19 #define __ assembler-> |
| 19 | 20 |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 37 Do##Name(&assembler); \ | 38 Do##Name(&assembler); \ |
| 38 Handle<Code> code = assembler.GenerateCode(); \ | 39 Handle<Code> code = assembler.GenerateCode(); \ |
| 39 handler_table->set(static_cast<int>(Bytecode::k##Name), *code); \ | 40 handler_table->set(static_cast<int>(Bytecode::k##Name), *code); \ |
| 40 } | 41 } |
| 41 BYTECODE_LIST(GENERATE_CODE) | 42 BYTECODE_LIST(GENERATE_CODE) |
| 42 #undef GENERATE_CODE | 43 #undef GENERATE_CODE |
| 43 } | 44 } |
| 44 } | 45 } |
| 45 | 46 |
| 46 | 47 |
| 48 // static | |
| 49 bool Interpreter::MakeBytecode(CompilationInfo* info) { | |
| 50 Handle<SharedFunctionInfo> shared_info = | |
| 51 Compiler::GetSharedFunctionInfo(info->function(), info->script(), info); | |
| 52 BytecodeGenerator generator(info->isolate(), info->zone()); | |
| 53 Handle<BytecodeArray> bytecodes = generator.MakeBytecode(info); | |
| 54 bytecodes->Print(); | |
|
rmcilroy
2015/07/30 10:12:25
nit - add a flag for printing the bytecodes (e.g.,
oth
2015/07/30 15:38:43
Done in the bytecode generation CL.
| |
| 55 | |
| 56 CHECK(shared_info->function_data()->IsUndefined()); | |
| 57 shared_info->set_function_data(*bytecodes); | |
| 58 // info->SetCode(info->isolate()->builtins()->InterpreterEntryTrampoline()); | |
|
rmcilroy
2015/07/30 10:12:25
Just do this?
oth
2015/07/30 15:38:43
Other CL.
| |
| 59 info->EnsureFeedbackVector(); | |
| 60 return true; | |
| 61 } | |
| 62 | |
| 63 | |
| 47 // LoadLiteral0 <dst> | 64 // LoadLiteral0 <dst> |
| 48 // | 65 // |
| 49 // Load literal '0' into the destination register. | 66 // Load literal '0' into the destination register. |
| 50 void Interpreter::DoLoadLiteral0(compiler::InterpreterAssembler* assembler) { | 67 void Interpreter::DoLoadLiteral0(compiler::InterpreterAssembler* assembler) { |
| 51 Node* register_index = __ BytecodeOperand(0); | 68 Node* register_index = __ BytecodeOperand(0); |
| 52 __ StoreRegister(__ NumberConstant(0), register_index); | 69 __ StoreRegister(__ NumberConstant(0), register_index); |
| 53 __ Dispatch(); | 70 __ Dispatch(); |
| 54 } | 71 } |
| 55 | 72 |
| 56 | 73 |
| 57 // LoadSmi8 <dst>, <imm8> | 74 // LoadSmi8 <dst>, <imm8> |
| 58 // | 75 // |
| 59 // Load an 8-bit integer literal into destination register as a Smi. | 76 // Load an 8-bit integer literal into destination register as a Smi. |
| 60 void Interpreter::DoLoadSmi8(compiler::InterpreterAssembler* assembler) { | 77 void Interpreter::DoLoadSmi8(compiler::InterpreterAssembler* assembler) { |
| 61 // TODO(rmcilroy) Convert an 8-bit integer to a Smi. | 78 // TODO(rmcilroy) Implement 8-bit integer to SMI promotion. |
| 62 } | 79 } |
| 63 | 80 |
| 64 | 81 |
| 82 // LdaUndefined | |
| 83 // | |
| 84 // Load Undefined into the accumulator. | |
| 85 void Interpreter::DoLdaUndefined(compiler::InterpreterAssembler* assembler) { | |
| 86 // TODO(rmcilroy) Implement. | |
| 87 } | |
| 88 | |
| 89 | |
| 90 // LdaNull | |
| 91 // | |
| 92 // Load Null into the accumulator. | |
| 93 void Interpreter::DoLdaNull(compiler::InterpreterAssembler* assembler) { | |
| 94 // TODO(rmcilroy) Implement. | |
| 95 } | |
| 96 | |
| 97 | |
| 98 // LdaTheHole | |
| 99 // | |
| 100 // Load TheHole into the accumulator. | |
| 101 void Interpreter::DoLdaTheHole(compiler::InterpreterAssembler* assembler) { | |
| 102 // TODO(rmcilroy) Implement. | |
| 103 } | |
| 104 | |
| 105 | |
| 106 // LdaTrue | |
| 107 // | |
| 108 // Load True into the accumulator. | |
| 109 void Interpreter::DoLdaTrue(compiler::InterpreterAssembler* assembler) { | |
| 110 // TODO(rmcilroy) Implement. | |
| 111 } | |
| 112 | |
| 113 | |
| 114 // LdaFalse | |
| 115 // | |
| 116 // Load False into the accumulator. | |
| 117 void Interpreter::DoLdaFalse(compiler::InterpreterAssembler* assembler) { | |
| 118 // TODO(rmcilroy) Implement. | |
| 119 } | |
| 120 | |
| 121 | |
| 122 // Ldar <src> | |
| 123 // | |
| 124 // Load accumulator with value from register <src>. | |
| 125 void Interpreter::DoLdar(compiler::InterpreterAssembler* assembler) { | |
| 126 // TODO(rmcilroy) Implement. | |
| 127 } | |
| 128 | |
| 129 | |
| 130 // Stra <dst> | |
| 131 // | |
| 132 // Store accumulator to register <dst>. | |
| 133 void Interpreter::DoStra(compiler::InterpreterAssembler* assembler) { | |
| 134 // TODO(rmcilroy) Implement. | |
| 135 } | |
| 136 | |
| 137 | |
| 138 // Add <src> | |
| 139 // | |
| 140 // Add register <src> to accumulator. | |
| 141 void Interpreter::DoAdd(compiler::InterpreterAssembler* assembler) { | |
| 142 // TODO(rmcilroy) Implement. | |
| 143 } | |
| 144 | |
| 145 | |
| 146 // Sub <src> | |
| 147 // | |
| 148 // Subtract register <src> from accumulator. | |
| 149 void Interpreter::DoSub(compiler::InterpreterAssembler* assembler) { | |
| 150 // TODO(rmcilroy) Implement. | |
| 151 } | |
| 152 | |
| 153 | |
| 154 // Mul <src> | |
| 155 // | |
| 156 // Multiply accumulator by register <src>. | |
| 157 void Interpreter::DoMul(compiler::InterpreterAssembler* assembler) { | |
| 158 // TODO(rmcilroy) Implement add register to accumulator. | |
| 159 } | |
| 160 | |
| 161 | |
| 162 // Div <src> | |
| 163 // | |
| 164 // Divide register <src> by accumulator. | |
| 165 void Interpreter::DoDiv(compiler::InterpreterAssembler* assembler) { | |
| 166 // TODO(rmcilroy) Implement. | |
| 167 } | |
| 168 | |
| 169 | |
| 65 // Return | 170 // Return |
| 66 // | 171 // |
| 67 // Return the value in register 0. | 172 // Return the value in register 0. |
| 68 void Interpreter::DoReturn(compiler::InterpreterAssembler* assembler) { | 173 void Interpreter::DoReturn(compiler::InterpreterAssembler* assembler) { |
| 69 // TODO(rmcilroy) Jump to exit trampoline. | 174 // TODO(rmcilroy) Jump to exit trampoline. |
| 70 } | 175 } |
| 71 | 176 |
| 72 | 177 |
| 73 } // namespace interpreter | 178 } // namespace interpreter |
| 74 } // namespace internal | 179 } // namespace internal |
| 75 } // namespace v8 | 180 } // namespace v8 |
| OLD | NEW |