| Index: src/compiler/graph-assembler.h
|
| diff --git a/src/compiler/graph-assembler.h b/src/compiler/graph-assembler.h
|
| index b7a198fcabcdaa6fe3a0b85ffe5a4c195697be72..61f8f5b61d3e6e9d3edce17ecfab1b692ddc9582 100644
|
| --- a/src/compiler/graph-assembler.h
|
| +++ b/src/compiler/graph-assembler.h
|
| @@ -28,7 +28,8 @@ namespace compiler {
|
| V(RoundFloat64ToInt32) \
|
| V(TruncateFloat64ToWord32) \
|
| V(Float64ExtractHighWord32) \
|
| - V(Float64Abs)
|
| + V(Float64Abs) \
|
| + V(BitcastWordToTagged)
|
|
|
| #define PURE_ASSEMBLER_MACH_BINOP_LIST(V) \
|
| V(WordShl) \
|
| @@ -38,6 +39,9 @@ namespace compiler {
|
| V(Word32And) \
|
| V(Word32Shr) \
|
| V(Word32Shl) \
|
| + V(IntAdd) \
|
| + V(IntSub) \
|
| + V(UintLessThan) \
|
| V(Int32Add) \
|
| V(Int32Sub) \
|
| V(Int32Mul) \
|
| @@ -63,6 +67,19 @@ namespace compiler {
|
| V(Uint32Mod) \
|
| V(Uint32Div)
|
|
|
| +#define JSGRAPH_SINGLETON_CONSTANT_LIST(V) \
|
| + V(TrueConstant) \
|
| + V(FalseConstant) \
|
| + V(HeapNumberMapConstant) \
|
| + V(NoContextConstant) \
|
| + V(EmptyStringConstant) \
|
| + V(UndefinedConstant) \
|
| + V(TheHoleConstant) \
|
| + V(FixedArrayMapConstant) \
|
| + V(ToNumberBuiltinConstant) \
|
| + V(AllocateInNewSpaceStubConstant) \
|
| + V(AllocateInOldSpaceStubConstant)
|
| +
|
| class GraphAssembler;
|
|
|
| enum class GraphAssemblerLabelType { kDeferred, kNonDeferred };
|
| @@ -216,23 +233,20 @@ class GraphAssembler {
|
| }
|
|
|
| // Value creation.
|
| - Node* TrueConstant();
|
| - Node* FalseConstant();
|
| - Node* HeapNumberMapConstant();
|
| Node* IntPtrConstant(intptr_t value);
|
| Node* Uint32Constant(int32_t value);
|
| Node* Int32Constant(int32_t value);
|
| + Node* UniqueInt32Constant(int32_t value);
|
| Node* SmiConstant(int32_t value);
|
| Node* Float64Constant(double value);
|
| Node* Projection(int index, Node* value);
|
| Node* HeapConstant(Handle<HeapObject> object);
|
| - Node* NoContextConstant();
|
| Node* CEntryStubConstant(int result_size);
|
| Node* ExternalConstant(ExternalReference ref);
|
| - Node* EmptyStringConstant();
|
| - Node* UndefinedConstant();
|
| - Node* TheHoleConstant();
|
| - Node* FixedArrayMapConstant();
|
| +
|
| +#define SINGLETON_CONST_DECL(Name) Node* Name();
|
| + JSGRAPH_SINGLETON_CONSTANT_LIST(SINGLETON_CONST_DECL)
|
| +#undef SINGLETON_CONST_DECL
|
|
|
| #define PURE_UNOP_DECL(Name) Node* Name(Node* input);
|
| PURE_ASSEMBLER_MACH_UNOP_LIST(PURE_UNOP_DECL)
|
| @@ -254,6 +268,7 @@ class GraphAssembler {
|
| Node* value);
|
|
|
| Node* Store(StoreRepresentation rep, Node* object, Node* offset, Node* value);
|
| + Node* Load(MachineType rep, Node* object, Node* offset);
|
|
|
| Node* Retain(Node* buffer);
|
| Node* UnsafePointerAdd(Node* base, Node* external);
|
| @@ -264,6 +279,8 @@ class GraphAssembler {
|
| Node* frame_state);
|
| template <typename... Args>
|
| Node* Call(const CallDescriptor* desc, Args... args);
|
| + template <typename... Args>
|
| + Node* Call(const Operator* op, Args... args);
|
|
|
| // Basic control operations.
|
| template <class LabelType>
|
| @@ -410,6 +427,12 @@ void GraphAssembler::GotoUnless(Node* condition, LabelType* label,
|
| template <typename... Args>
|
| Node* GraphAssembler::Call(const CallDescriptor* desc, Args... args) {
|
| const Operator* op = common()->Call(desc);
|
| + return Call(op, args...);
|
| +}
|
| +
|
| +template <typename... Args>
|
| +Node* GraphAssembler::Call(const Operator* op, Args... args) {
|
| + DCHECK_EQ(IrOpcode::kCall, op->opcode());
|
| Node* args_array[] = {args..., current_effect_, current_control_};
|
| int size = static_cast<int>(sizeof...(args)) + op->EffectInputCount() +
|
| op->ControlInputCount();
|
|
|