Index: src/hydrogen-instructions.h |
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h |
index dc087be92b18155a7623f8b96acf50ddd53ac548..1844715dbdf91c7257f964cffd1622b6ab2e9484 100644 |
--- a/src/hydrogen-instructions.h |
+++ b/src/hydrogen-instructions.h |
@@ -37,133 +37,134 @@ class LInstruction; |
class LChunkBuilder; |
class OStream; |
-#define HYDROGEN_ABSTRACT_INSTRUCTION_LIST(V) \ |
- V(ArithmeticBinaryOperation) \ |
- V(BinaryOperation) \ |
- V(BitwiseBinaryOperation) \ |
- V(ControlInstruction) \ |
- V(Instruction) \ |
- |
- |
-#define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) \ |
- V(AbnormalExit) \ |
- V(AccessArgumentsAt) \ |
- V(Add) \ |
- V(AllocateBlockContext) \ |
- V(Allocate) \ |
- V(ApplyArguments) \ |
- V(ArgumentsElements) \ |
- V(ArgumentsLength) \ |
- V(ArgumentsObject) \ |
- V(Bitwise) \ |
- V(BlockEntry) \ |
- V(BoundsCheck) \ |
- V(BoundsCheckBaseIndexInformation) \ |
- V(Branch) \ |
- V(CallWithDescriptor) \ |
- V(CallJSFunction) \ |
- V(CallFunction) \ |
- V(CallNew) \ |
- V(CallNewArray) \ |
- V(CallRuntime) \ |
- V(CallStub) \ |
- V(CapturedObject) \ |
- V(Change) \ |
- V(CheckHeapObject) \ |
- V(CheckInstanceType) \ |
- V(CheckMaps) \ |
- V(CheckMapValue) \ |
- V(CheckSmi) \ |
- V(CheckValue) \ |
- V(ClampToUint8) \ |
- V(ClassOfTestAndBranch) \ |
- V(CompareNumericAndBranch) \ |
- V(CompareHoleAndBranch) \ |
- V(CompareGeneric) \ |
- V(CompareMinusZeroAndBranch) \ |
- V(CompareObjectEqAndBranch) \ |
- V(CompareMap) \ |
- V(Constant) \ |
- V(ConstructDouble) \ |
- V(Context) \ |
- V(DateField) \ |
- V(DebugBreak) \ |
- V(DeclareGlobals) \ |
- V(Deoptimize) \ |
- V(Div) \ |
- V(DoubleBits) \ |
- V(DummyUse) \ |
- V(EnterInlined) \ |
- V(EnvironmentMarker) \ |
- V(ForceRepresentation) \ |
- V(ForInCacheArray) \ |
- V(ForInPrepareMap) \ |
- V(FunctionLiteral) \ |
- V(GetCachedArrayIndex) \ |
- V(Goto) \ |
- V(HasCachedArrayIndexAndBranch) \ |
- V(HasInstanceTypeAndBranch) \ |
- V(InnerAllocatedObject) \ |
- V(InstanceOf) \ |
- V(InstanceOfKnownGlobal) \ |
- V(InvokeFunction) \ |
- V(IsConstructCallAndBranch) \ |
- V(IsObjectAndBranch) \ |
- V(IsStringAndBranch) \ |
- V(IsSmiAndBranch) \ |
- V(IsUndetectableAndBranch) \ |
- V(LeaveInlined) \ |
- V(LoadContextSlot) \ |
- V(LoadFieldByIndex) \ |
- V(LoadFunctionPrototype) \ |
- V(LoadGlobalCell) \ |
- V(LoadGlobalGeneric) \ |
- V(LoadKeyed) \ |
- V(LoadKeyedGeneric) \ |
- V(LoadNamedField) \ |
- V(LoadNamedGeneric) \ |
- V(LoadRoot) \ |
- V(MapEnumLength) \ |
- V(MathFloorOfDiv) \ |
- V(MathMinMax) \ |
- V(Mod) \ |
- V(Mul) \ |
- V(OsrEntry) \ |
- V(Parameter) \ |
- V(Power) \ |
- V(PushArguments) \ |
- V(RegExpLiteral) \ |
- V(Return) \ |
- V(Ror) \ |
- V(Sar) \ |
- V(SeqStringGetChar) \ |
- V(SeqStringSetChar) \ |
- V(Shl) \ |
- V(Shr) \ |
- V(Simulate) \ |
- V(StackCheck) \ |
- V(StoreCodeEntry) \ |
- V(StoreContextSlot) \ |
- V(StoreFrameContext) \ |
- V(StoreGlobalCell) \ |
- V(StoreKeyed) \ |
- V(StoreKeyedGeneric) \ |
- V(StoreNamedField) \ |
- V(StoreNamedGeneric) \ |
- V(StringAdd) \ |
- V(StringCharCodeAt) \ |
- V(StringCharFromCode) \ |
- V(StringCompareAndBranch) \ |
- V(Sub) \ |
- V(ThisFunction) \ |
- V(ToFastProperties) \ |
- V(TransitionElementsKind) \ |
- V(TrapAllocationMemento) \ |
- V(Typeof) \ |
- V(TypeofIsAndBranch) \ |
- V(UnaryMathOperation) \ |
- V(UnknownOSRValue) \ |
- V(UseConst) \ |
+#define HYDROGEN_ABSTRACT_INSTRUCTION_LIST(V) \ |
+ V(ArithmeticBinaryOperation) \ |
+ V(BinaryOperation) \ |
+ V(BitwiseBinaryOperation) \ |
+ V(ControlInstruction) \ |
+ V(Instruction) |
+ |
+ |
+#define HYDROGEN_CONCRETE_INSTRUCTION_LIST(V) \ |
+ V(AbnormalExit) \ |
+ V(AccessArgumentsAt) \ |
+ V(Add) \ |
+ V(AllocateBlockContext) \ |
+ V(Allocate) \ |
+ V(ApplyArguments) \ |
+ V(ArgumentsElements) \ |
+ V(ArgumentsLength) \ |
+ V(ArgumentsObject) \ |
+ V(Bitwise) \ |
+ V(BlockEntry) \ |
+ V(BoundsCheck) \ |
+ V(BoundsCheckBaseIndexInformation) \ |
+ V(Branch) \ |
+ V(CallWithDescriptor) \ |
+ V(CallJSFunction) \ |
+ V(CallFunction) \ |
+ V(CallNew) \ |
+ V(CallNewArray) \ |
+ V(CallRuntime) \ |
+ V(CallStub) \ |
+ V(CapturedObject) \ |
+ V(Change) \ |
+ V(CheckHeapObject) \ |
+ V(CheckInstanceType) \ |
+ V(CheckMaps) \ |
+ V(CheckMapValue) \ |
+ V(CheckSmi) \ |
+ V(CheckValue) \ |
+ V(ClampToUint8) \ |
+ V(ClassOfTestAndBranch) \ |
+ V(CompareNumericAndBranch) \ |
+ V(CompareHoleAndBranch) \ |
+ V(CompareGeneric) \ |
+ V(CompareMinusZeroAndBranch) \ |
+ V(CompareObjectEqAndBranch) \ |
+ V(CompareMap) \ |
+ V(Constant) \ |
+ V(ConstructDouble) \ |
+ V(Context) \ |
+ V(DateField) \ |
+ V(DebugBreak) \ |
+ V(DeclareGlobals) \ |
+ V(Deoptimize) \ |
+ V(Div) \ |
+ V(DoubleBits) \ |
+ V(DummyUse) \ |
+ V(EnterInlined) \ |
+ V(EnvironmentMarker) \ |
+ V(ForceRepresentation) \ |
+ V(ForInCacheArray) \ |
+ V(ForInPrepareMap) \ |
+ V(FunctionLiteral) \ |
+ V(GetCachedArrayIndex) \ |
+ V(Goto) \ |
+ V(HasCachedArrayIndexAndBranch) \ |
+ V(HasInstanceTypeAndBranch) \ |
+ V(InnerAllocatedObject) \ |
+ V(InstanceOf) \ |
+ V(InstanceOfKnownGlobal) \ |
+ V(InvokeFunction) \ |
+ V(IsConstructCallAndBranch) \ |
+ V(IsObjectAndBranch) \ |
+ V(IsStringAndBranch) \ |
+ V(IsSmiAndBranch) \ |
+ V(IsUndetectableAndBranch) \ |
+ V(LeaveInlined) \ |
+ V(LoadContextSlot) \ |
+ V(LoadFieldByIndex) \ |
+ V(LoadFunctionPrototype) \ |
+ V(LoadGlobalCell) \ |
+ V(LoadGlobalGeneric) \ |
+ V(LoadKeyed) \ |
+ V(LoadKeyedGeneric) \ |
+ V(LoadNamedField) \ |
+ V(LoadNamedGeneric) \ |
+ V(LoadRoot) \ |
+ V(MapEnumLength) \ |
+ V(MathFloorOfDiv) \ |
+ V(MathMinMax) \ |
+ V(Mod) \ |
+ V(Mul) \ |
+ V(OsrEntry) \ |
+ V(Parameter) \ |
+ V(Power) \ |
+ V(PushArguments) \ |
+ V(RegExpLiteral) \ |
+ V(Return) \ |
+ V(Ror) \ |
+ V(Sar) \ |
+ V(SeqStringGetChar) \ |
+ V(SeqStringSetChar) \ |
+ V(Shl) \ |
+ V(Shr) \ |
+ V(Simulate) \ |
+ V(StackCheck) \ |
+ V(StoreCodeEntry) \ |
+ V(StoreContextSlot) \ |
+ V(StoreFrameContext) \ |
+ V(StoreGlobalCell) \ |
+ V(StoreKeyed) \ |
+ V(StoreKeyedGeneric) \ |
+ V(StoreNamedField) \ |
+ V(StoreNamedGeneric) \ |
+ V(StringAdd) \ |
+ V(StringCharCodeAt) \ |
+ V(StringCharFromCode) \ |
+ V(StringCompareAndBranch) \ |
+ V(Sub) \ |
+ V(TailCallThroughMegamorphicCache) \ |
+ V(ThisFunction) \ |
+ V(ToFastProperties) \ |
+ V(TransitionElementsKind) \ |
+ V(TrapAllocationMemento) \ |
+ V(Typeof) \ |
+ V(TypeofIsAndBranch) \ |
+ V(UnaryMathOperation) \ |
+ V(UnknownOSRValue) \ |
+ V(UseConst) \ |
V(WrapReceiver) |
#define GVN_TRACKED_FLAG_LIST(V) \ |
@@ -2324,9 +2325,8 @@ class HCallWithDescriptor FINAL : public HInstruction { |
CallInterfaceDescriptor descriptor, |
const Vector<HValue*>& operands) { |
DCHECK(operands.length() == descriptor.GetEnvironmentLength()); |
- HCallWithDescriptor* res = |
- new(zone) HCallWithDescriptor(target, argument_count, |
- descriptor, operands, zone); |
+ HCallWithDescriptor* res = new (zone) |
+ HCallWithDescriptor(target, argument_count, descriptor, operands, zone); |
return res; |
} |
@@ -5352,6 +5352,37 @@ class HCallStub FINAL : public HUnaryCall { |
}; |
+class HTailCallThroughMegamorphicCache FINAL : public HTemplateInstruction<3> { |
+ public: |
+ DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(HTailCallThroughMegamorphicCache, |
+ HValue*, HValue*, Code::Flags); |
+ |
+ virtual Representation RequiredInputRepresentation(int index) OVERRIDE { |
+ return Representation::Tagged(); |
+ } |
+ |
+ HValue* context() const { return OperandAt(0); } |
+ HValue* receiver() const { return OperandAt(1); } |
+ HValue* name() const { return OperandAt(2); } |
+ Code::Flags flags() const { return flags_; } |
+ |
+ virtual OStream& PrintDataTo(OStream& os) const OVERRIDE; // NOLINT |
+ |
+ DECLARE_CONCRETE_INSTRUCTION(TailCallThroughMegamorphicCache) |
+ |
+ private: |
+ HTailCallThroughMegamorphicCache(HValue* context, HValue* receiver, |
+ HValue* name, Code::Flags flags) |
+ : flags_(flags) { |
+ SetOperandAt(0, context); |
+ SetOperandAt(1, receiver); |
+ SetOperandAt(2, name); |
+ } |
+ |
+ Code::Flags flags_; |
+}; |
+ |
+ |
class HUnknownOSRValue FINAL : public HTemplateInstruction<0> { |
public: |
DECLARE_INSTRUCTION_FACTORY_P2(HUnknownOSRValue, HEnvironment*, int); |