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

Side by Side Diff: src/interpreter/interpreter-assembler.h

Issue 2552883012: [interpreter][stubs] Fixing issues found by machine graph verifier. (Closed)
Patch Set: Addressing nits Created 4 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/interpreter.cc ('k') | src/interpreter/interpreter-assembler.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 #ifndef V8_INTERPRETER_INTERPRETER_ASSEMBLER_H_ 5 #ifndef V8_INTERPRETER_INTERPRETER_ASSEMBLER_H_
6 #define V8_INTERPRETER_INTERPRETER_ASSEMBLER_H_ 6 #define V8_INTERPRETER_INTERPRETER_ASSEMBLER_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/builtins/builtins.h" 9 #include "src/builtins/builtins.h"
10 #include "src/code-stub-assembler.h" 10 #include "src/code-stub-assembler.h"
11 #include "src/frames.h" 11 #include "src/frames.h"
12 #include "src/globals.h" 12 #include "src/globals.h"
13 #include "src/interpreter/bytecode-register.h" 13 #include "src/interpreter/bytecode-register.h"
14 #include "src/interpreter/bytecodes.h" 14 #include "src/interpreter/bytecodes.h"
15 #include "src/runtime/runtime.h" 15 #include "src/runtime/runtime.h"
16 16
17 namespace v8 { 17 namespace v8 {
18 namespace internal { 18 namespace internal {
19 namespace interpreter { 19 namespace interpreter {
20 20
21 class V8_EXPORT_PRIVATE InterpreterAssembler : public CodeStubAssembler { 21 class V8_EXPORT_PRIVATE InterpreterAssembler : public CodeStubAssembler {
22 public: 22 public:
23 InterpreterAssembler(compiler::CodeAssemblerState* state, Bytecode bytecode, 23 InterpreterAssembler(compiler::CodeAssemblerState* state, Bytecode bytecode,
24 OperandScale operand_scale); 24 OperandScale operand_scale);
25 virtual ~InterpreterAssembler(); 25 virtual ~InterpreterAssembler();
26 26
27 // Returns the count immediate for bytecode operand |operand_index| in the 27 // Returns the 32-bit unsigned count immediate for bytecode operand
28 // |operand_index| in the current bytecode.
29 compiler::Node* BytecodeOperandCount(int operand_index);
30 // Returns the 32-bit unsigned flag for bytecode operand |operand_index|
31 // in the current bytecode.
32 compiler::Node* BytecodeOperandFlag(int operand_index);
33 // Returns the 32-bit zero-extended index immediate for bytecode operand
34 // |operand_index| in the current bytecode.
35 compiler::Node* BytecodeOperandIdx(int operand_index);
36 // Returns the smi index immediate for bytecode operand |operand_index|
37 // in the current bytecode.
38 compiler::Node* BytecodeOperandIdxSmi(int operand_index);
39 // Returns the 32-bit unsigned immediate for bytecode operand |operand_index|
40 // in the current bytecode.
41 compiler::Node* BytecodeOperandUImm(int operand_index);
42 // Returns the 32-bit signed immediate for bytecode operand |operand_index|
43 // in the current bytecode.
44 compiler::Node* BytecodeOperandImm(int operand_index);
45 // Returns the word-size signed immediate for bytecode operand |operand_index|
46 // in the current bytecode.
47 compiler::Node* BytecodeOperandImmIntPtr(int operand_index);
48 // Returns the smi immediate for bytecode operand |operand_index| in the
28 // current bytecode. 49 // current bytecode.
29 compiler::Node* BytecodeOperandCount(int operand_index); 50 compiler::Node* BytecodeOperandImmSmi(int operand_index);
30 // Returns the 8-bit flag for bytecode operand |operand_index| in the 51 // Returns the word-size sign-extended register index for bytecode operand
31 // current bytecode. 52 // |operand_index| in the current bytecode.
32 compiler::Node* BytecodeOperandFlag(int operand_index);
33 // Returns the index immediate for bytecode operand |operand_index| in the
34 // current bytecode.
35 compiler::Node* BytecodeOperandIdx(int operand_index);
36 // Returns the UImm8 immediate for bytecode operand |operand_index| in the
37 // current bytecode.
38 compiler::Node* BytecodeOperandUImm(int operand_index);
39 // Returns the Imm8 immediate for bytecode operand |operand_index| in the
40 // current bytecode.
41 compiler::Node* BytecodeOperandImm(int operand_index);
42 // Returns the register index for bytecode operand |operand_index| in the
43 // current bytecode.
44 compiler::Node* BytecodeOperandReg(int operand_index); 53 compiler::Node* BytecodeOperandReg(int operand_index);
45 // Returns the runtime id immediate for bytecode operand 54 // Returns the 32-bit unsigned runtime id immediate for bytecode operand
46 // |operand_index| in the current bytecode. 55 // |operand_index| in the current bytecode.
47 compiler::Node* BytecodeOperandRuntimeId(int operand_index); 56 compiler::Node* BytecodeOperandRuntimeId(int operand_index);
48 // Returns the intrinsic id immediate for bytecode operand 57 // Returns the 32-bit unsigned intrinsic id immediate for bytecode operand
49 // |operand_index| in the current bytecode. 58 // |operand_index| in the current bytecode.
50 compiler::Node* BytecodeOperandIntrinsicId(int operand_index); 59 compiler::Node* BytecodeOperandIntrinsicId(int operand_index);
51 60
52 // Accumulator. 61 // Accumulator.
53 compiler::Node* GetAccumulator(); 62 compiler::Node* GetAccumulator();
54 void SetAccumulator(compiler::Node* value); 63 void SetAccumulator(compiler::Node* value);
55 64
56 // Context. 65 // Context.
57 compiler::Node* GetContext(); 66 compiler::Node* GetContext();
58 void SetContext(compiler::Node* value); 67 void SetContext(compiler::Node* value);
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 // frame when performing a call. 220 // frame when performing a call.
212 void CallPrologue() override; 221 void CallPrologue() override;
213 void CallEpilogue() override; 222 void CallEpilogue() override;
214 223
215 // Increment the dispatch counter for the (current, next) bytecode pair. 224 // Increment the dispatch counter for the (current, next) bytecode pair.
216 void TraceBytecodeDispatch(compiler::Node* target_index); 225 void TraceBytecodeDispatch(compiler::Node* target_index);
217 226
218 // Traces the current bytecode by calling |function_id|. 227 // Traces the current bytecode by calling |function_id|.
219 void TraceBytecode(Runtime::FunctionId function_id); 228 void TraceBytecode(Runtime::FunctionId function_id);
220 229
221 // Updates the bytecode array's interrupt budget by |weight| and calls 230 // Updates the bytecode array's interrupt budget by a 32-bit signed |weight|
222 // Runtime::kInterrupt if counter reaches zero. 231 // and calls Runtime::kInterrupt if counter reaches zero.
223 void UpdateInterruptBudget(compiler::Node* weight); 232 void UpdateInterruptBudget(compiler::Node* weight);
224 233
225 // Returns the offset of register |index| relative to RegisterFilePointer(). 234 // Returns the offset of register |index| relative to RegisterFilePointer().
226 compiler::Node* RegisterFrameOffset(compiler::Node* index); 235 compiler::Node* RegisterFrameOffset(compiler::Node* index);
227 236
228 // Returns the offset of an operand relative to the current bytecode offset. 237 // Returns the offset of an operand relative to the current bytecode offset.
229 compiler::Node* OperandOffset(int operand_index); 238 compiler::Node* OperandOffset(int operand_index);
230 239
231 // Returns a value built from an sequence of bytes in the bytecode 240 // Returns a value built from an sequence of bytes in the bytecode
232 // array starting at |relative_offset| from the current bytecode. 241 // array starting at |relative_offset| from the current bytecode.
233 // The |result_type| determines the size and signedness. of the 242 // The |result_type| determines the size and signedness. of the
234 // value read. This method should only be used on architectures that 243 // value read. This method should only be used on architectures that
235 // do not support unaligned memory accesses. 244 // do not support unaligned memory accesses.
236 compiler::Node* BytecodeOperandReadUnaligned(int relative_offset, 245 compiler::Node* BytecodeOperandReadUnaligned(int relative_offset,
237 MachineType result_type); 246 MachineType result_type);
238 247
248 // Returns zero- or sign-extended to word32 value of the operand.
239 compiler::Node* BytecodeOperandUnsignedByte(int operand_index); 249 compiler::Node* BytecodeOperandUnsignedByte(int operand_index);
240 compiler::Node* BytecodeOperandSignedByte(int operand_index); 250 compiler::Node* BytecodeOperandSignedByte(int operand_index);
241 compiler::Node* BytecodeOperandUnsignedShort(int operand_index); 251 compiler::Node* BytecodeOperandUnsignedShort(int operand_index);
242 compiler::Node* BytecodeOperandSignedShort(int operand_index); 252 compiler::Node* BytecodeOperandSignedShort(int operand_index);
243 compiler::Node* BytecodeOperandUnsignedQuad(int operand_index); 253 compiler::Node* BytecodeOperandUnsignedQuad(int operand_index);
244 compiler::Node* BytecodeOperandSignedQuad(int operand_index); 254 compiler::Node* BytecodeOperandSignedQuad(int operand_index);
245 255
256 // Returns zero- or sign-extended to word32 value of the operand of
257 // given size.
246 compiler::Node* BytecodeSignedOperand(int operand_index, 258 compiler::Node* BytecodeSignedOperand(int operand_index,
247 OperandSize operand_size); 259 OperandSize operand_size);
248 compiler::Node* BytecodeUnsignedOperand(int operand_index, 260 compiler::Node* BytecodeUnsignedOperand(int operand_index,
249 OperandSize operand_size); 261 OperandSize operand_size);
250 262
251 // Jump relative to the current bytecode by |jump_offset| if the 263 // Jump relative to the current bytecode by |jump_offset| if the
252 // |condition| is true. Helper function for JumpIfWordEqual and 264 // |condition| is true. Helper function for JumpIfWordEqual and
253 // JumpIfWordNotEqual. 265 // JumpIfWordNotEqual.
254 void JumpConditional(compiler::Node* condition, compiler::Node* jump_offset); 266 void JumpConditional(compiler::Node* condition, compiler::Node* jump_offset);
255 267
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 compiler::Node* stack_pointer_before_call_; 312 compiler::Node* stack_pointer_before_call_;
301 313
302 DISALLOW_COPY_AND_ASSIGN(InterpreterAssembler); 314 DISALLOW_COPY_AND_ASSIGN(InterpreterAssembler);
303 }; 315 };
304 316
305 } // namespace interpreter 317 } // namespace interpreter
306 } // namespace internal 318 } // namespace internal
307 } // namespace v8 319 } // namespace v8
308 320
309 #endif // V8_INTERPRETER_INTERPRETER_ASSEMBLER_H_ 321 #endif // V8_INTERPRETER_INTERPRETER_ASSEMBLER_H_
OLDNEW
« no previous file with comments | « src/interpreter/interpreter.cc ('k') | src/interpreter/interpreter-assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698