1014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Copyright 2015 the V8 project authors. All rights reserved. 2014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// found in the LICENSE file. 4014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#ifndef V8_COMPILER_INTERPRETER_ASSEMBLER_H_ 6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#define V8_COMPILER_INTERPRETER_ASSEMBLER_H_ 7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Clients of this interface shouldn't depend on lots of compiler internals. 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Do not include anything from src/compiler here! 10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/allocation.h" 11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/base/smart-pointers.h" 12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/builtins.h" 13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/frames.h" 14014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/interpreter/bytecodes.h" 15014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/runtime/runtime.h" 16014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 17014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace v8 { 18014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace internal { 19014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 20014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass CallInterfaceDescriptor; 21014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass Isolate; 22014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass Zone; 23014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 24014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace compiler { 25014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 26014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass CallDescriptor; 27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass Graph; 28014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass Node; 29014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass Operator; 30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass RawMachineAssembler; 31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass Schedule; 32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 33014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochclass InterpreterAssembler { 34014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch public: 35014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch InterpreterAssembler(Isolate* isolate, Zone* zone, 36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch interpreter::Bytecode bytecode); 37014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch virtual ~InterpreterAssembler(); 38014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 39014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Handle<Code> GenerateCode(); 40014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 41014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns the count immediate for bytecode operand |operand_index| in the 42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // current bytecode. 43014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* BytecodeOperandCount(int operand_index); 44014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns the index immediate for bytecode operand |operand_index| in the 45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // current bytecode. 46014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* BytecodeOperandIdx(int operand_index); 47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns the Imm8 immediate for bytecode operand |operand_index| in the 48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // current bytecode. 49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* BytecodeOperandImm(int operand_index); 50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns the register index for bytecode operand |operand_index| in the 51014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // current bytecode. 52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* BytecodeOperandReg(int operand_index); 53014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Accumulator. 55014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* GetAccumulator(); 56014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void SetAccumulator(Node* value); 57014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 58014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Context. 59014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* GetContext(); 60014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void SetContext(Node* value); 61014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 62014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Loads from and stores to the interpreter register file. 63014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* LoadRegister(int offset); 64014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* LoadRegister(interpreter::Register reg); 65014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* LoadRegister(Node* reg_index); 66014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* StoreRegister(Node* value, int offset); 67014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* StoreRegister(Node* value, interpreter::Register reg); 68014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* StoreRegister(Node* value, Node* reg_index); 69014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 70014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns the next consecutive register. 71014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* NextRegister(Node* reg_index); 72014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 73014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns the location in memory of the register |reg_index| in the 74014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // interpreter register file. 75014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* RegisterLocation(Node* reg_index); 76014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 77014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Constants. 78014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* Int32Constant(int value); 79014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* IntPtrConstant(intptr_t value); 80014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* NumberConstant(double value); 81014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* HeapConstant(Handle<HeapObject> object); 82014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* BooleanConstant(bool value); 83014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 84014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Tag and untag Smi values. 85014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* SmiTag(Node* value); 86014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* SmiUntag(Node* value); 87014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 88014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Basic arithmetic operations. 89014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* IntPtrAdd(Node* a, Node* b); 90014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* IntPtrSub(Node* a, Node* b); 91014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* WordShl(Node* value, int shift); 92014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 93014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Load constant at |index| in the constant pool. 94014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* LoadConstantPoolEntry(Node* index); 95014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 96014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Load an element from a fixed array on the heap. 97014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* LoadFixedArrayElement(Node* fixed_array, int index); 98014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 99014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Load a field from an object on the heap. 100014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* LoadObjectField(Node* object, int offset); 101014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 102014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Load |slot_index| from |context|. 103014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* LoadContextSlot(Node* context, int slot_index); 104014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* LoadContextSlot(Node* context, Node* slot_index); 105014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Stores |value| into |slot_index| of |context|. 106014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* StoreContextSlot(Node* context, Node* slot_index, Node* value); 107014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 108014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Load the TypeFeedbackVector for the current function. 109014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* LoadTypeFeedbackVector(); 110014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 111014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Project the output value at index |index| 112014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* Projection(int index, Node* node); 113014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 114014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Call constructor |constructor| with |arg_count| arguments (not 115014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // including receiver) and the first argument located at 116014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // |first_arg|. The |new_target| is the same as the 117014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // |constructor| for the new keyword, but differs for the super 118014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // keyword. 119014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* CallConstruct(Node* new_target, Node* constructor, Node* first_arg, 120014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* arg_count); 121014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 122014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Call JSFunction or Callable |function| with |arg_count| 123014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // arguments (not including receiver) and the first argument 124014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // located at |first_arg|. 125014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* CallJS(Node* function, Node* first_arg, Node* arg_count); 126014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 127014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Call an IC code stub. 128014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* CallIC(CallInterfaceDescriptor descriptor, Node* target, Node* arg1, 129014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* arg2, Node* arg3); 130014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* CallIC(CallInterfaceDescriptor descriptor, Node* target, Node* arg1, 131014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* arg2, Node* arg3, Node* arg4); 132014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* CallIC(CallInterfaceDescriptor descriptor, Node* target, Node* arg1, 133014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* arg2, Node* arg3, Node* arg4, Node* arg5); 134014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 135014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Call runtime function. 136014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* CallRuntime(Node* function_id, Node* first_arg, Node* arg_count, 137014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int return_size = 1); 138014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* CallRuntime(Runtime::FunctionId function_id, Node* arg1); 139014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* CallRuntime(Runtime::FunctionId function_id, Node* arg1, Node* arg2); 140014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* CallRuntime(Runtime::FunctionId function_id, Node* arg1, Node* arg2, 141014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* arg3, Node* arg4); 142014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 143014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Jump relative to the current bytecode by |jump_offset|. 144014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void Jump(Node* jump_offset); 145014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 146014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Jump relative to the current bytecode by |jump_offset| if the 147014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // word values |lhs| and |rhs| are equal. 148014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void JumpIfWordEqual(Node* lhs, Node* rhs, Node* jump_offset); 149014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 150014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns from the function. 151014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void Return(); 152014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 153014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Dispatch to the bytecode. 154014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void Dispatch(); 155014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 156014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Abort with the given bailout reason. 157014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void Abort(BailoutReason bailout_reason); 158014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 159014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch protected: 160014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch static bool TargetSupportsUnalignedAccess(); 161014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 162014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Protected helpers (for testing) which delegate to RawMachineAssembler. 163014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CallDescriptor* call_descriptor() const; 164014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Graph* graph(); 165014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 166014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch private: 167014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns a raw pointer to start of the register file on the stack. 168014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* RegisterFileRawPointer(); 169014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns a tagged pointer to the current function's BytecodeArray object. 170014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* BytecodeArrayTaggedPointer(); 171014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns the offset from the BytecodeArrayPointer of the current bytecode. 172014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* BytecodeOffset(); 173014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns a raw pointer to first entry in the interpreter dispatch table. 174014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* DispatchTableRawPointer(); 175014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 176014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Saves and restores interpreter bytecode offset to the interpreter stack 177014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // frame when performing a call. 178014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void CallPrologue(); 179014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void CallEpilogue(); 180014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 181014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns the offset of register |index| relative to RegisterFilePointer(). 182014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* RegisterFrameOffset(Node* index); 183014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 184014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* SmiShiftBitsConstant(); 185014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* BytecodeOperand(int operand_index); 186014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* BytecodeOperandSignExtended(int operand_index); 187014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* BytecodeOperandShort(int operand_index); 188014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* BytecodeOperandShortSignExtended(int operand_index); 189014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 190014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* CallN(CallDescriptor* descriptor, Node* code_target, Node** args); 191014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* CallIC(CallInterfaceDescriptor descriptor, Node* target, Node** args); 192014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 193014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Returns BytecodeOffset() advanced by delta bytecodes. Note: this does not 194014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // update BytecodeOffset() itself. 195014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* Advance(int delta); 196014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* Advance(Node* delta); 197014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 198014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Starts next instruction dispatch at |new_bytecode_offset|. 199014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void DispatchTo(Node* new_bytecode_offset); 200014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 201014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Abort operations for debug code. 202014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch void AbortIfWordNotEqual(Node* lhs, Node* rhs, BailoutReason bailout_reason); 203014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 204014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch // Private helpers which delegate to RawMachineAssembler. 205014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Isolate* isolate(); 206014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Zone* zone(); 207014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 208014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch interpreter::Bytecode bytecode_; 209014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch base::SmartPointer<RawMachineAssembler> raw_assembler_; 210014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 211014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* accumulator_; 212014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* bytecode_offset_; 213014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch Node* context_; 214014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 215014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch bool code_generated_; 216014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 217014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch DISALLOW_COPY_AND_ASSIGN(InterpreterAssembler); 218014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}; 219014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 220014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace compiler 221014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 222014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 223014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 224014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#endif // V8_COMPILER_INTERPRETER_ASSEMBLER_H_ 225