X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fv8%2Fsrc%2Fia32%2Flithium-ia32.h;h=4206482de75c5c73a365a9eef31f02c2aad6ccd3;hb=4a1a0bdd01eef90b0826a0e761d3379d3715c10f;hp=e79974c8e8e741f2cffadb148530a12c481d8a47;hpb=b1be5ca53587d23e7aeb77b26861fdc0a181ffd8;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/v8/src/ia32/lithium-ia32.h b/src/v8/src/ia32/lithium-ia32.h index e79974c..4206482 100644 --- a/src/v8/src/ia32/lithium-ia32.h +++ b/src/v8/src/ia32/lithium-ia32.h @@ -6,165 +6,163 @@ #define V8_IA32_LITHIUM_IA32_H_ #include "src/hydrogen.h" -#include "src/lithium-allocator.h" #include "src/lithium.h" +#include "src/lithium-allocator.h" #include "src/safepoint-table.h" #include "src/utils.h" namespace v8 { namespace internal { +namespace compiler { +class RCodeVisualizer; +} + // Forward declarations. class LCodeGen; -#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \ - V(AccessArgumentsAt) \ - V(AddI) \ - V(AllocateBlockContext) \ - V(Allocate) \ - V(ApplyArguments) \ - V(ArgumentsElements) \ - V(ArgumentsLength) \ - V(ArithmeticD) \ - V(ArithmeticT) \ - V(BitI) \ - V(BoundsCheck) \ - V(Branch) \ - V(CallJSFunction) \ - V(CallWithDescriptor) \ - V(CallFunction) \ - V(CallNew) \ - V(CallNewArray) \ - V(CallRuntime) \ - V(CallStub) \ - V(CheckInstanceType) \ - V(CheckMaps) \ - V(CheckMapValue) \ - V(CheckNonSmi) \ - V(CheckSmi) \ - V(CheckValue) \ - V(ClampDToUint8) \ - V(ClampIToUint8) \ - V(ClampTToUint8) \ - V(ClassOfTestAndBranch) \ - V(CompareMinusZeroAndBranch) \ - V(CompareNumericAndBranch) \ - V(CmpObjectEqAndBranch) \ - V(CmpHoleAndBranch) \ - V(CmpMapAndBranch) \ - V(CmpT) \ - V(ConstantD) \ - V(ConstantE) \ - V(ConstantI) \ - V(ConstantS) \ - V(ConstantT) \ - V(ConstructDouble) \ - V(Context) \ - V(DateField) \ - V(DebugBreak) \ - V(DeclareGlobals) \ - V(Deoptimize) \ - V(DivByConstI) \ - V(DivByPowerOf2I) \ - V(DivI) \ - V(DoubleBits) \ - V(DoubleToI) \ - V(DoubleToSmi) \ - V(Drop) \ - V(Dummy) \ - V(DummyUse) \ - V(FlooringDivByConstI) \ - V(FlooringDivByPowerOf2I) \ - V(FlooringDivI) \ - V(ForInCacheArray) \ - V(ForInPrepareMap) \ - V(FunctionLiteral) \ - V(GetCachedArrayIndex) \ - V(Goto) \ - V(HasCachedArrayIndexAndBranch) \ - V(HasInstanceTypeAndBranch) \ - V(InnerAllocatedObject) \ - V(InstanceOf) \ - V(InstanceOfKnownGlobal) \ - V(InstructionGap) \ - V(Integer32ToDouble) \ - V(InvokeFunction) \ - V(IsConstructCallAndBranch) \ - V(IsObjectAndBranch) \ - V(IsStringAndBranch) \ - V(IsSmiAndBranch) \ - V(IsUndetectableAndBranch) \ - V(Label) \ - V(LazyBailout) \ - V(LoadContextSlot) \ - V(LoadFieldByIndex) \ - V(LoadFunctionPrototype) \ - V(LoadGlobalCell) \ - V(LoadGlobalGeneric) \ - V(LoadKeyed) \ - V(LoadKeyedGeneric) \ - V(LoadNamedField) \ - V(LoadNamedGeneric) \ - V(LoadRoot) \ - V(MapEnumLength) \ - V(MathAbs) \ - V(MathClz32) \ - V(MathExp) \ - V(MathFloor) \ - V(MathLog) \ - V(MathMinMax) \ - V(MathPowHalf) \ - V(MathRound) \ - V(MathSqrt) \ - V(ModByConstI) \ - V(ModByPowerOf2I) \ - V(NullarySIMDOperation) \ - V(UnarySIMDOperation) \ - V(BinarySIMDOperation) \ - V(TernarySIMDOperation) \ - V(QuarternarySIMDOperation) \ - V(ModI) \ - V(MulI) \ - V(NumberTagD) \ - V(NumberTagI) \ - V(NumberTagU) \ - V(NumberUntagD) \ - V(SIMD128ToTagged) \ - V(TaggedToSIMD128) \ - V(OsrEntry) \ - V(Parameter) \ - V(Power) \ - V(PushArgument) \ - V(RegExpLiteral) \ - V(Return) \ - V(SeqStringGetChar) \ - V(SeqStringSetChar) \ - V(ShiftI) \ - V(SmiTag) \ - V(SmiUntag) \ - 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(SubI) \ - V(TaggedToI) \ - V(ThisFunction) \ - V(ToFastProperties) \ - V(TransitionElementsKind) \ - V(TrapAllocationMemento) \ - V(Typeof) \ - V(TypeofIsAndBranch) \ - V(Uint32ToDouble) \ - V(UnknownOSRValue) \ +#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \ + V(AccessArgumentsAt) \ + V(AddI) \ + V(AllocateBlockContext) \ + V(Allocate) \ + V(ApplyArguments) \ + V(ArgumentsElements) \ + V(ArgumentsLength) \ + V(ArithmeticD) \ + V(ArithmeticT) \ + V(BitI) \ + V(BoundsCheck) \ + V(Branch) \ + V(CallJSFunction) \ + V(CallWithDescriptor) \ + V(CallFunction) \ + V(CallNew) \ + V(CallNewArray) \ + V(CallRuntime) \ + V(CallStub) \ + V(CheckInstanceType) \ + V(CheckMaps) \ + V(CheckMapValue) \ + V(CheckNonSmi) \ + V(CheckSmi) \ + V(CheckValue) \ + V(ClampDToUint8) \ + V(ClampIToUint8) \ + V(ClampTToUint8) \ + V(ClassOfTestAndBranch) \ + V(CompareMinusZeroAndBranch) \ + V(CompareNumericAndBranch) \ + V(CmpObjectEqAndBranch) \ + V(CmpHoleAndBranch) \ + V(CmpMapAndBranch) \ + V(CmpT) \ + V(ConstantD) \ + V(ConstantE) \ + V(ConstantI) \ + V(ConstantS) \ + V(ConstantT) \ + V(ConstructDouble) \ + V(Context) \ + V(DateField) \ + V(DebugBreak) \ + V(DeclareGlobals) \ + V(Deoptimize) \ + V(DivByConstI) \ + V(DivByPowerOf2I) \ + V(DivI) \ + V(DoubleBits) \ + V(DoubleToI) \ + V(DoubleToSmi) \ + V(Drop) \ + V(Dummy) \ + V(DummyUse) \ + V(FlooringDivByConstI) \ + V(FlooringDivByPowerOf2I) \ + V(FlooringDivI) \ + V(ForInCacheArray) \ + V(ForInPrepareMap) \ + V(FunctionLiteral) \ + V(GetCachedArrayIndex) \ + V(Goto) \ + V(HasCachedArrayIndexAndBranch) \ + V(HasInstanceTypeAndBranch) \ + V(InnerAllocatedObject) \ + V(InstanceOf) \ + V(InstanceOfKnownGlobal) \ + V(InstructionGap) \ + V(Integer32ToDouble) \ + V(InvokeFunction) \ + V(IsConstructCallAndBranch) \ + V(IsObjectAndBranch) \ + V(IsStringAndBranch) \ + V(IsSmiAndBranch) \ + V(IsUndetectableAndBranch) \ + V(Label) \ + V(LazyBailout) \ + V(LoadContextSlot) \ + V(LoadFieldByIndex) \ + V(LoadFunctionPrototype) \ + V(LoadGlobalCell) \ + V(LoadGlobalGeneric) \ + V(LoadKeyed) \ + V(LoadKeyedGeneric) \ + V(LoadNamedField) \ + V(LoadNamedGeneric) \ + V(LoadRoot) \ + V(MapEnumLength) \ + V(MathAbs) \ + V(MathClz32) \ + V(MathExp) \ + V(MathFloor) \ + V(MathFround) \ + V(MathLog) \ + V(MathMinMax) \ + V(MathPowHalf) \ + V(MathRound) \ + V(MathSqrt) \ + V(ModByConstI) \ + V(ModByPowerOf2I) \ + V(ModI) \ + V(MulI) \ + V(NumberTagD) \ + V(NumberTagI) \ + V(NumberTagU) \ + V(NumberUntagD) \ + V(OsrEntry) \ + V(Parameter) \ + V(Power) \ + V(PushArgument) \ + V(RegExpLiteral) \ + V(Return) \ + V(SeqStringGetChar) \ + V(SeqStringSetChar) \ + V(ShiftI) \ + V(SmiTag) \ + V(SmiUntag) \ + 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(SubI) \ + V(TaggedToI) \ + V(ThisFunction) \ + V(ToFastProperties) \ + V(TransitionElementsKind) \ + V(TrapAllocationMemento) \ + V(Typeof) \ + V(TypeofIsAndBranch) \ + V(Uint32ToDouble) \ + V(UnknownOSRValue) \ V(WrapReceiver) @@ -177,7 +175,7 @@ class LCodeGen; return mnemonic; \ } \ static L##type* cast(LInstruction* instr) { \ - ASSERT(instr->Is##type()); \ + DCHECK(instr->Is##type()); \ return reinterpret_cast(instr); \ } @@ -207,7 +205,7 @@ class LInstruction : public ZoneObject { enum Opcode { // Declare a unique enum value for each instruction. #define DECLARE_OPCODE(type) k##type, - LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_OPCODE) + LITHIUM_CONCRETE_INSTRUCTION_LIST(DECLARE_OPCODE) kAdapter, kNumberOfInstructions #undef DECLARE_OPCODE }; @@ -226,6 +224,9 @@ class LInstruction : public ZoneObject { virtual bool IsControl() const { return false; } + // Try deleting this instruction if possible. + virtual bool TryDelete() { return false; } + void set_environment(LEnvironment* env) { environment_ = env; } LEnvironment* environment() const { return environment_; } bool HasEnvironment() const { return environment_ != NULL; } @@ -264,11 +265,12 @@ class LInstruction : public ZoneObject { void VerifyCall(); #endif + virtual int InputCount() = 0; + virtual LOperand* InputAt(int i) = 0; + private: // Iterator support. friend class InputIterator; - virtual int InputCount() = 0; - virtual LOperand* InputAt(int i) = 0; friend class TempIterator; virtual int TempCount() = 0; @@ -332,7 +334,7 @@ class LGap : public LTemplateInstruction<0, 0, 0> { virtual bool IsGap() const V8_FINAL V8_OVERRIDE { return true; } virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; static LGap* cast(LInstruction* instr) { - ASSERT(instr->IsGap()); + DCHECK(instr->IsGap()); return reinterpret_cast(instr); } @@ -407,7 +409,7 @@ class LLazyBailout V8_FINAL : public LTemplateInstruction<0, 0, 0> { class LDummy V8_FINAL : public LTemplateInstruction<1, 0, 0> { public: - explicit LDummy() { } + LDummy() {} DECLARE_CONCRETE_INSTRUCTION(Dummy, "dummy") }; @@ -857,14 +859,24 @@ class LMathRound V8_FINAL : public LTemplateInstruction<1, 1, 1> { temps_[0] = temp; } - LOperand* value() { return inputs_[0]; } LOperand* temp() { return temps_[0]; } + LOperand* value() { return inputs_[0]; } DECLARE_CONCRETE_INSTRUCTION(MathRound, "math-round") DECLARE_HYDROGEN_ACCESSOR(UnaryMathOperation) }; +class LMathFround V8_FINAL : public LTemplateInstruction<1, 1, 0> { + public: + explicit LMathFround(LOperand* value) { inputs_[0] = value; } + + LOperand* value() { return inputs_[0]; } + + DECLARE_CONCRETE_INSTRUCTION(MathFround, "math-fround") +}; + + class LMathAbs V8_FINAL : public LTemplateInstruction<1, 2, 0> { public: LMathAbs(LOperand* context, LOperand* value) { @@ -949,154 +961,6 @@ class LMathPowHalf V8_FINAL : public LTemplateInstruction<1, 1, 1> { }; -class LNullarySIMDOperation V8_FINAL : public LTemplateInstruction<1, 0, 0> { - public: - explicit LNullarySIMDOperation(BuiltinFunctionId op) - : op_(op) { - } - - BuiltinFunctionId op() const { return op_; } - - virtual Opcode opcode() const V8_OVERRIDE { - return LInstruction::kNullarySIMDOperation; - } - virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; - virtual const char* Mnemonic() const V8_OVERRIDE; - static LNullarySIMDOperation* cast(LInstruction* instr) { - ASSERT(instr->IsNullarySIMDOperation()); - return reinterpret_cast(instr); - } - - DECLARE_HYDROGEN_ACCESSOR(NullarySIMDOperation) - - private: - BuiltinFunctionId op_; -}; - - -class LUnarySIMDOperation V8_FINAL : public LTemplateInstruction<1, 1, 0> { - public: - LUnarySIMDOperation(LOperand* value, BuiltinFunctionId op) - : op_(op) { - inputs_[0] = value; - } - - LOperand* value() { return inputs_[0]; } - BuiltinFunctionId op() const { return op_; } - - virtual Opcode opcode() const V8_OVERRIDE { - return LInstruction::kUnarySIMDOperation; - } - virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; - virtual const char* Mnemonic() const V8_OVERRIDE; - static LUnarySIMDOperation* cast(LInstruction* instr) { - ASSERT(instr->IsUnarySIMDOperation()); - return reinterpret_cast(instr); - } - - DECLARE_HYDROGEN_ACCESSOR(UnarySIMDOperation) - - private: - BuiltinFunctionId op_; -}; - - -class LBinarySIMDOperation V8_FINAL : public LTemplateInstruction<1, 2, 0> { - public: - LBinarySIMDOperation(LOperand* left, LOperand* right, BuiltinFunctionId op) - : op_(op) { - inputs_[0] = left; - inputs_[1] = right; - } - - LOperand* left() { return inputs_[0]; } - LOperand* right() { return inputs_[1]; } - BuiltinFunctionId op() const { return op_; } - - virtual Opcode opcode() const V8_OVERRIDE { - return LInstruction::kBinarySIMDOperation; - } - virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; - virtual const char* Mnemonic() const V8_OVERRIDE; - static LBinarySIMDOperation* cast(LInstruction* instr) { - ASSERT(instr->IsBinarySIMDOperation()); - return reinterpret_cast(instr); - } - - DECLARE_HYDROGEN_ACCESSOR(BinarySIMDOperation) - - private: - BuiltinFunctionId op_; -}; - - -class LTernarySIMDOperation V8_FINAL : public LTemplateInstruction<1, 3, 0> { - public: - LTernarySIMDOperation(LOperand* first, LOperand* second, LOperand* third, - BuiltinFunctionId op) - : op_(op) { - inputs_[0] = first; - inputs_[1] = second; - inputs_[2] = third; - } - - LOperand* first() { return inputs_[0]; } - LOperand* second() { return inputs_[1]; } - LOperand* third() { return inputs_[2]; } - BuiltinFunctionId op() const { return op_; } - - virtual Opcode opcode() const V8_OVERRIDE { - return LInstruction::kTernarySIMDOperation; - } - virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; - virtual const char* Mnemonic() const V8_OVERRIDE; - static LTernarySIMDOperation* cast(LInstruction* instr) { - ASSERT(instr->IsTernarySIMDOperation()); - return reinterpret_cast(instr); - } - - DECLARE_HYDROGEN_ACCESSOR(TernarySIMDOperation) - - private: - BuiltinFunctionId op_; -}; - - -class LQuarternarySIMDOperation V8_FINAL - : public LTemplateInstruction<1, 4, 0> { - public: - LQuarternarySIMDOperation(LOperand* x, LOperand* y, LOperand* z, - LOperand* w, BuiltinFunctionId op) - : op_(op) { - inputs_[0] = x; - inputs_[1] = y; - inputs_[2] = z; - inputs_[3] = w; - } - - LOperand* x() { return inputs_[0]; } - LOperand* y() { return inputs_[1]; } - LOperand* z() { return inputs_[2]; } - LOperand* w() { return inputs_[3]; } - BuiltinFunctionId op() const { return op_; } - - virtual Opcode opcode() const V8_OVERRIDE { - return LInstruction::kQuarternarySIMDOperation; - } - virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE; - virtual const char* Mnemonic() const V8_OVERRIDE; - static LQuarternarySIMDOperation* cast(LInstruction* instr) { - ASSERT(instr->IsQuarternarySIMDOperation()); - return reinterpret_cast(instr); - } - - DECLARE_HYDROGEN_ACCESSOR(QuarternarySIMDOperation) - - private: - BuiltinFunctionId op_; -}; - - class LCmpObjectEqAndBranch V8_FINAL : public LControlInstruction<2, 0> { public: LCmpObjectEqAndBranch(LOperand* left, LOperand* right) { @@ -1710,7 +1574,7 @@ class LReturn V8_FINAL : public LTemplateInstruction<0, 3, 0> { return parameter_count()->IsConstantOperand(); } LConstantOperand* constant_parameter_count() { - ASSERT(has_constant_parameter_count()); + DCHECK(has_constant_parameter_count()); return LConstantOperand::cast(parameter_count()); } LOperand* parameter_count() { return inputs_[2]; } @@ -1733,15 +1597,17 @@ class LLoadNamedField V8_FINAL : public LTemplateInstruction<1, 1, 0> { }; -class LLoadNamedGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> { +class LLoadNamedGeneric V8_FINAL : public LTemplateInstruction<1, 2, 1> { public: - LLoadNamedGeneric(LOperand* context, LOperand* object) { + LLoadNamedGeneric(LOperand* context, LOperand* object, LOperand* vector) { inputs_[0] = context; inputs_[1] = object; + temps_[0] = vector; } LOperand* context() { return inputs_[0]; } LOperand* object() { return inputs_[1]; } + LOperand* temp_vector() { return temps_[0]; } DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) @@ -1806,46 +1672,39 @@ class LLoadKeyed V8_FINAL : public LTemplateInstruction<1, 2, 0> { }; -inline static bool ExternalArrayOpRequiresPreScale( - Representation key_representation, - ElementsKind kind) { - int shift_size = ElementsKindToShiftSize(kind); - return key_representation.IsSmi() - ? shift_size > static_cast(maximal_scale_factor) + kSmiTagSize - : shift_size > static_cast(maximal_scale_factor); -} - - inline static bool ExternalArrayOpRequiresTemp( Representation key_representation, ElementsKind elements_kind) { - // Operations that require the key to be scaled by a factor or divided by two - // to be converted into an index cannot fold the scale operation into a load - // and need an extra temp register to do the work. - return ExternalArrayOpRequiresPreScale(key_representation, elements_kind) || - (key_representation.IsSmi() && - (elements_kind == EXTERNAL_INT8_ELEMENTS || - elements_kind == EXTERNAL_UINT8_ELEMENTS || - elements_kind == EXTERNAL_UINT8_CLAMPED_ELEMENTS || - elements_kind == UINT8_ELEMENTS || - elements_kind == INT8_ELEMENTS || - elements_kind == UINT8_CLAMPED_ELEMENTS)); + // Operations that require the key to be divided by two to be converted into + // an index cannot fold the scale operation into a load and need an extra + // temp register to do the work. + return key_representation.IsSmi() && + (elements_kind == EXTERNAL_INT8_ELEMENTS || + elements_kind == EXTERNAL_UINT8_ELEMENTS || + elements_kind == EXTERNAL_UINT8_CLAMPED_ELEMENTS || + elements_kind == UINT8_ELEMENTS || + elements_kind == INT8_ELEMENTS || + elements_kind == UINT8_CLAMPED_ELEMENTS); } -class LLoadKeyedGeneric V8_FINAL : public LTemplateInstruction<1, 3, 0> { +class LLoadKeyedGeneric V8_FINAL : public LTemplateInstruction<1, 3, 1> { public: - LLoadKeyedGeneric(LOperand* context, LOperand* obj, LOperand* key) { + LLoadKeyedGeneric(LOperand* context, LOperand* obj, LOperand* key, + LOperand* vector) { inputs_[0] = context; inputs_[1] = obj; inputs_[2] = key; + temps_[0] = vector; } LOperand* context() { return inputs_[0]; } LOperand* object() { return inputs_[1]; } LOperand* key() { return inputs_[2]; } + LOperand* temp_vector() { return temps_[0]; } DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") + DECLARE_HYDROGEN_ACCESSOR(LoadKeyedGeneric) }; @@ -1856,15 +1715,18 @@ class LLoadGlobalCell V8_FINAL : public LTemplateInstruction<1, 0, 0> { }; -class LLoadGlobalGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> { +class LLoadGlobalGeneric V8_FINAL : public LTemplateInstruction<1, 2, 1> { public: - LLoadGlobalGeneric(LOperand* context, LOperand* global_object) { + LLoadGlobalGeneric(LOperand* context, LOperand* global_object, + LOperand* vector) { inputs_[0] = context; inputs_[1] = global_object; + temps_[0] = vector; } LOperand* context() { return inputs_[0]; } LOperand* global_object() { return inputs_[1]; } + LOperand* temp_vector() { return temps_[0]; } DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) @@ -2029,11 +1891,11 @@ class LCallJSFunction V8_FINAL : public LTemplateInstruction<1, 1, 0> { class LCallWithDescriptor V8_FINAL : public LTemplateResultInstruction<1> { public: - LCallWithDescriptor(const CallInterfaceDescriptor* descriptor, + LCallWithDescriptor(const InterfaceDescriptor* descriptor, const ZoneList& operands, Zone* zone) - : inputs_(descriptor->environment_length() + 1, zone) { - ASSERT(descriptor->environment_length() + 1 == operands.length()); + : inputs_(descriptor->GetRegisterParameterCount() + 1, zone) { + DCHECK(descriptor->GetRegisterParameterCount() + 1 == operands.length()); inputs_.AddAll(operands, zone); } @@ -2220,23 +2082,6 @@ class LNumberTagD V8_FINAL : public LTemplateInstruction<1, 1, 1> { }; -class LSIMD128ToTagged V8_FINAL : public LTemplateInstruction<1, 1, 2> { - public: - explicit LSIMD128ToTagged(LOperand* value, LOperand* temp, LOperand* temp2) { - inputs_[0] = value; - temps_[0] = temp; - temps_[1] = temp2; - } - - LOperand* value() { return inputs_[0]; } - LOperand* temp() { return temps_[0]; } - LOperand* temp2() { return temps_[1]; } - - DECLARE_CONCRETE_INSTRUCTION(SIMD128ToTagged, "simd128-tag") - DECLARE_HYDROGEN_ACCESSOR(Change) -}; - - // Sometimes truncating conversion from a tagged value to an int32. class LDoubleToI V8_FINAL : public LTemplateInstruction<1, 1, 1> { public: @@ -2314,26 +2159,6 @@ class LNumberUntagD V8_FINAL : public LTemplateInstruction<1, 1, 1> { }; -class LTaggedToSIMD128 V8_FINAL : public LTemplateInstruction<1, 1, 1> { - public: - explicit LTaggedToSIMD128(LOperand* value, LOperand* temp, - Representation representation) - : representation_(representation) { - inputs_[0] = value; - temps_[0] = temp; - } - - LOperand* value() { return inputs_[0]; } - LOperand* temp() { return temps_[0]; } - Representation representation() const { return representation_; } - - DECLARE_CONCRETE_INSTRUCTION(TaggedToSIMD128, "simd128-untag") - DECLARE_HYDROGEN_ACCESSOR(Change); - private: - Representation representation_; -}; - - class LSmiUntag V8_FINAL : public LTemplateInstruction<1, 1, 0> { public: LSmiUntag(LOperand* value, bool needs_check) @@ -2925,6 +2750,7 @@ class LChunkBuilder V8_FINAL : public LChunkBuilderBase { LInstruction* DoMathFloor(HUnaryMathOperation* instr); LInstruction* DoMathRound(HUnaryMathOperation* instr); + LInstruction* DoMathFround(HUnaryMathOperation* instr); LInstruction* DoMathAbs(HUnaryMathOperation* instr); LInstruction* DoMathLog(HUnaryMathOperation* instr); LInstruction* DoMathExp(HUnaryMathOperation* instr);