MIPS: Inline Math.fround in optimized code.
Port r22665 (7e3d70d) BUG=v8:3469 LOG=N R=paul.lind@imgtec.com Review URL: https://codereview.chromium.org/425053002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22682 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
e0401f3f71
commit
07c93cd000
@ -3824,6 +3824,14 @@ void LCodeGen::DoMathRound(LMathRound* instr) {
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::DoMathFround(LMathFround* instr) {
|
||||
DoubleRegister input = ToDoubleRegister(instr->value());
|
||||
DoubleRegister result = ToDoubleRegister(instr->result());
|
||||
__ cvt_s_d(result.low(), input);
|
||||
__ cvt_d_s(result, result.low());
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::DoMathSqrt(LMathSqrt* instr) {
|
||||
DoubleRegister input = ToDoubleRegister(instr->value());
|
||||
DoubleRegister result = ToDoubleRegister(instr->result());
|
||||
|
@ -1113,14 +1113,24 @@ LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) {
|
||||
|
||||
LInstruction* LChunkBuilder::DoUnaryMathOperation(HUnaryMathOperation* instr) {
|
||||
switch (instr->op()) {
|
||||
case kMathFloor: return DoMathFloor(instr);
|
||||
case kMathRound: return DoMathRound(instr);
|
||||
case kMathAbs: return DoMathAbs(instr);
|
||||
case kMathLog: return DoMathLog(instr);
|
||||
case kMathExp: return DoMathExp(instr);
|
||||
case kMathSqrt: return DoMathSqrt(instr);
|
||||
case kMathPowHalf: return DoMathPowHalf(instr);
|
||||
case kMathClz32: return DoMathClz32(instr);
|
||||
case kMathFloor:
|
||||
return DoMathFloor(instr);
|
||||
case kMathRound:
|
||||
return DoMathRound(instr);
|
||||
case kMathFround:
|
||||
return DoMathFround(instr);
|
||||
case kMathAbs:
|
||||
return DoMathAbs(instr);
|
||||
case kMathLog:
|
||||
return DoMathLog(instr);
|
||||
case kMathExp:
|
||||
return DoMathExp(instr);
|
||||
case kMathSqrt:
|
||||
return DoMathSqrt(instr);
|
||||
case kMathPowHalf:
|
||||
return DoMathPowHalf(instr);
|
||||
case kMathClz32:
|
||||
return DoMathClz32(instr);
|
||||
default:
|
||||
UNREACHABLE();
|
||||
return NULL;
|
||||
@ -1164,6 +1174,13 @@ LInstruction* LChunkBuilder::DoMathPowHalf(HUnaryMathOperation* instr) {
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoMathFround(HUnaryMathOperation* instr) {
|
||||
LOperand* input = UseRegister(instr->value());
|
||||
LMathFround* result = new (zone()) LMathFround(input);
|
||||
return DefineAsRegister(result);
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoMathAbs(HUnaryMathOperation* instr) {
|
||||
Representation r = instr->value()->representation();
|
||||
LOperand* context = (r.IsDouble() || r.IsSmiOrInteger32())
|
||||
|
@ -17,148 +17,149 @@ namespace internal {
|
||||
// Forward declarations.
|
||||
class LCodeGen;
|
||||
|
||||
#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \
|
||||
V(AccessArgumentsAt) \
|
||||
V(AddI) \
|
||||
V(Allocate) \
|
||||
V(AllocateBlockContext) \
|
||||
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(DoubleToI) \
|
||||
V(DoubleBits) \
|
||||
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(LoadRoot) \
|
||||
V(LoadFieldByIndex) \
|
||||
V(LoadFunctionPrototype) \
|
||||
V(LoadGlobalCell) \
|
||||
V(LoadGlobalGeneric) \
|
||||
V(LoadKeyed) \
|
||||
V(LoadKeyedGeneric) \
|
||||
V(LoadNamedField) \
|
||||
V(LoadNamedGeneric) \
|
||||
V(MapEnumLength) \
|
||||
V(MathAbs) \
|
||||
V(MathExp) \
|
||||
V(MathClz32) \
|
||||
V(MathFloor) \
|
||||
V(MathLog) \
|
||||
V(MathMinMax) \
|
||||
V(MathPowHalf) \
|
||||
V(MathRound) \
|
||||
V(MathSqrt) \
|
||||
V(ModByConstI) \
|
||||
V(ModByPowerOf2I) \
|
||||
V(ModI) \
|
||||
V(MulI) \
|
||||
V(MultiplyAddD) \
|
||||
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) \
|
||||
#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \
|
||||
V(AccessArgumentsAt) \
|
||||
V(AddI) \
|
||||
V(Allocate) \
|
||||
V(AllocateBlockContext) \
|
||||
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(DoubleToI) \
|
||||
V(DoubleBits) \
|
||||
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(LoadRoot) \
|
||||
V(LoadFieldByIndex) \
|
||||
V(LoadFunctionPrototype) \
|
||||
V(LoadGlobalCell) \
|
||||
V(LoadGlobalGeneric) \
|
||||
V(LoadKeyed) \
|
||||
V(LoadKeyedGeneric) \
|
||||
V(LoadNamedField) \
|
||||
V(LoadNamedGeneric) \
|
||||
V(MapEnumLength) \
|
||||
V(MathAbs) \
|
||||
V(MathExp) \
|
||||
V(MathClz32) \
|
||||
V(MathFloor) \
|
||||
V(MathFround) \
|
||||
V(MathLog) \
|
||||
V(MathMinMax) \
|
||||
V(MathPowHalf) \
|
||||
V(MathRound) \
|
||||
V(MathSqrt) \
|
||||
V(ModByConstI) \
|
||||
V(ModByPowerOf2I) \
|
||||
V(ModI) \
|
||||
V(MulI) \
|
||||
V(MultiplyAddD) \
|
||||
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)
|
||||
|
||||
#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \
|
||||
@ -851,6 +852,16 @@ class LMathRound V8_FINAL : public LTemplateInstruction<1, 1, 1> {
|
||||
};
|
||||
|
||||
|
||||
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(MathRound, "math-fround")
|
||||
};
|
||||
|
||||
|
||||
class LMathAbs V8_FINAL : public LTemplateInstruction<1, 2, 0> {
|
||||
public:
|
||||
LMathAbs(LOperand* context, LOperand* value) {
|
||||
@ -2706,6 +2717,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);
|
||||
|
@ -3854,6 +3854,14 @@ void LCodeGen::DoMathRound(LMathRound* instr) {
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::DoMathFround(LMathFround* instr) {
|
||||
DoubleRegister input = ToDoubleRegister(instr->value());
|
||||
DoubleRegister result = ToDoubleRegister(instr->result());
|
||||
__ cvt_s_d(result, input);
|
||||
__ cvt_d_s(result, result);
|
||||
}
|
||||
|
||||
|
||||
void LCodeGen::DoMathSqrt(LMathSqrt* instr) {
|
||||
DoubleRegister input = ToDoubleRegister(instr->value());
|
||||
DoubleRegister result = ToDoubleRegister(instr->result());
|
||||
|
@ -1113,14 +1113,24 @@ LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) {
|
||||
|
||||
LInstruction* LChunkBuilder::DoUnaryMathOperation(HUnaryMathOperation* instr) {
|
||||
switch (instr->op()) {
|
||||
case kMathFloor: return DoMathFloor(instr);
|
||||
case kMathRound: return DoMathRound(instr);
|
||||
case kMathAbs: return DoMathAbs(instr);
|
||||
case kMathLog: return DoMathLog(instr);
|
||||
case kMathExp: return DoMathExp(instr);
|
||||
case kMathSqrt: return DoMathSqrt(instr);
|
||||
case kMathPowHalf: return DoMathPowHalf(instr);
|
||||
case kMathClz32: return DoMathClz32(instr);
|
||||
case kMathFloor:
|
||||
return DoMathFloor(instr);
|
||||
case kMathRound:
|
||||
return DoMathRound(instr);
|
||||
case kMathFround:
|
||||
return DoMathFround(instr);
|
||||
case kMathAbs:
|
||||
return DoMathAbs(instr);
|
||||
case kMathLog:
|
||||
return DoMathLog(instr);
|
||||
case kMathExp:
|
||||
return DoMathExp(instr);
|
||||
case kMathSqrt:
|
||||
return DoMathSqrt(instr);
|
||||
case kMathPowHalf:
|
||||
return DoMathPowHalf(instr);
|
||||
case kMathClz32:
|
||||
return DoMathClz32(instr);
|
||||
default:
|
||||
UNREACHABLE();
|
||||
return NULL;
|
||||
@ -1164,6 +1174,13 @@ LInstruction* LChunkBuilder::DoMathPowHalf(HUnaryMathOperation* instr) {
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoMathFround(HUnaryMathOperation* instr) {
|
||||
LOperand* input = UseRegister(instr->value());
|
||||
LMathFround* result = new (zone()) LMathFround(input);
|
||||
return DefineAsRegister(result);
|
||||
}
|
||||
|
||||
|
||||
LInstruction* LChunkBuilder::DoMathAbs(HUnaryMathOperation* instr) {
|
||||
Representation r = instr->value()->representation();
|
||||
LOperand* context = (r.IsDouble() || r.IsSmiOrInteger32())
|
||||
|
@ -17,147 +17,148 @@ namespace internal {
|
||||
// Forward declarations.
|
||||
class LCodeGen;
|
||||
|
||||
#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \
|
||||
V(AccessArgumentsAt) \
|
||||
V(AddI) \
|
||||
V(Allocate) \
|
||||
V(AllocateBlockContext) \
|
||||
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(DoubleToI) \
|
||||
V(DoubleBits) \
|
||||
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(LoadRoot) \
|
||||
V(LoadFieldByIndex) \
|
||||
V(LoadFunctionPrototype) \
|
||||
V(LoadGlobalCell) \
|
||||
V(LoadGlobalGeneric) \
|
||||
V(LoadKeyed) \
|
||||
V(LoadKeyedGeneric) \
|
||||
V(LoadNamedField) \
|
||||
V(LoadNamedGeneric) \
|
||||
V(MapEnumLength) \
|
||||
V(MathAbs) \
|
||||
V(MathExp) \
|
||||
V(MathClz32) \
|
||||
V(MathFloor) \
|
||||
V(MathLog) \
|
||||
V(MathMinMax) \
|
||||
V(MathPowHalf) \
|
||||
V(MathRound) \
|
||||
V(MathSqrt) \
|
||||
V(ModByConstI) \
|
||||
V(ModByPowerOf2I) \
|
||||
V(ModI) \
|
||||
V(MulI) \
|
||||
V(MultiplyAddD) \
|
||||
V(NumberTagD) \
|
||||
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) \
|
||||
#define LITHIUM_CONCRETE_INSTRUCTION_LIST(V) \
|
||||
V(AccessArgumentsAt) \
|
||||
V(AddI) \
|
||||
V(Allocate) \
|
||||
V(AllocateBlockContext) \
|
||||
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(DoubleToI) \
|
||||
V(DoubleBits) \
|
||||
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(LoadRoot) \
|
||||
V(LoadFieldByIndex) \
|
||||
V(LoadFunctionPrototype) \
|
||||
V(LoadGlobalCell) \
|
||||
V(LoadGlobalGeneric) \
|
||||
V(LoadKeyed) \
|
||||
V(LoadKeyedGeneric) \
|
||||
V(LoadNamedField) \
|
||||
V(LoadNamedGeneric) \
|
||||
V(MapEnumLength) \
|
||||
V(MathAbs) \
|
||||
V(MathExp) \
|
||||
V(MathClz32) \
|
||||
V(MathFloor) \
|
||||
V(MathFround) \
|
||||
V(MathLog) \
|
||||
V(MathMinMax) \
|
||||
V(MathPowHalf) \
|
||||
V(MathRound) \
|
||||
V(MathSqrt) \
|
||||
V(ModByConstI) \
|
||||
V(ModByPowerOf2I) \
|
||||
V(ModI) \
|
||||
V(MulI) \
|
||||
V(MultiplyAddD) \
|
||||
V(NumberTagD) \
|
||||
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)
|
||||
|
||||
#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic) \
|
||||
@ -852,6 +853,16 @@ class LMathRound V8_FINAL : public LTemplateInstruction<1, 1, 1> {
|
||||
};
|
||||
|
||||
|
||||
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) {
|
||||
@ -2692,6 +2703,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);
|
||||
|
Loading…
Reference in New Issue
Block a user