| Index: src/compiler/opcodes.h
|
| diff --git a/src/compiler/opcodes.h b/src/compiler/opcodes.h
|
| index 31ef304bbacfda421a7358450bb1cb9f74789865..18f40dd6a76b38b8f4e4c10b8363e0ed5ff6f328 100644
|
| --- a/src/compiler/opcodes.h
|
| +++ b/src/compiler/opcodes.h
|
| @@ -140,113 +140,119 @@
|
| JS_OTHER_OP_LIST(V)
|
|
|
| // Opcodes for VirtuaMachine-level operators.
|
| -#define SIMPLIFIED_OP_LIST(V) \
|
| - V(AnyToBoolean) \
|
| - V(BooleanNot) \
|
| - V(BooleanToNumber) \
|
| - V(NumberEqual) \
|
| - V(NumberLessThan) \
|
| - V(NumberLessThanOrEqual) \
|
| - V(NumberAdd) \
|
| - V(NumberSubtract) \
|
| - V(NumberMultiply) \
|
| - V(NumberDivide) \
|
| - V(NumberModulus) \
|
| - V(NumberToInt32) \
|
| - V(NumberToUint32) \
|
| - V(PlainPrimitiveToNumber) \
|
| - V(ReferenceEqual) \
|
| - V(StringEqual) \
|
| - V(StringLessThan) \
|
| - V(StringLessThanOrEqual) \
|
| - V(StringAdd) \
|
| - V(ChangeTaggedToInt32) \
|
| - V(ChangeTaggedToUint32) \
|
| - V(ChangeTaggedToFloat64) \
|
| - V(ChangeInt32ToTagged) \
|
| - V(ChangeUint32ToTagged) \
|
| - V(ChangeFloat64ToTagged) \
|
| - V(ChangeBoolToBit) \
|
| - V(ChangeBitToBool) \
|
| - V(LoadField) \
|
| - V(LoadBuffer) \
|
| - V(LoadElement) \
|
| - V(StoreField) \
|
| - V(StoreBuffer) \
|
| - V(StoreElement) \
|
| - V(ObjectIsSmi) \
|
| +#define SIMPLIFIED_COMPARE_BINOP_LIST(V) \
|
| + V(NumberEqual) \
|
| + V(NumberLessThan) \
|
| + V(NumberLessThanOrEqual) \
|
| + V(ReferenceEqual) \
|
| + V(StringEqual) \
|
| + V(StringLessThan) \
|
| + V(StringLessThanOrEqual)
|
| +
|
| +#define SIMPLIFIED_OP_LIST(V) \
|
| + SIMPLIFIED_COMPARE_BINOP_LIST(V) \
|
| + V(AnyToBoolean) \
|
| + V(BooleanNot) \
|
| + V(BooleanToNumber) \
|
| + V(NumberAdd) \
|
| + V(NumberSubtract) \
|
| + V(NumberMultiply) \
|
| + V(NumberDivide) \
|
| + V(NumberModulus) \
|
| + V(NumberToInt32) \
|
| + V(NumberToUint32) \
|
| + V(PlainPrimitiveToNumber) \
|
| + V(StringAdd) \
|
| + V(ChangeTaggedToInt32) \
|
| + V(ChangeTaggedToUint32) \
|
| + V(ChangeTaggedToFloat64) \
|
| + V(ChangeInt32ToTagged) \
|
| + V(ChangeUint32ToTagged) \
|
| + V(ChangeFloat64ToTagged) \
|
| + V(ChangeBoolToBit) \
|
| + V(ChangeBitToBool) \
|
| + V(LoadField) \
|
| + V(LoadBuffer) \
|
| + V(LoadElement) \
|
| + V(StoreField) \
|
| + V(StoreBuffer) \
|
| + V(StoreElement) \
|
| + V(ObjectIsSmi) \
|
| V(ObjectIsNonNegativeSmi)
|
|
|
| // Opcodes for Machine-level operators.
|
| -#define MACHINE_OP_LIST(V) \
|
| - V(Load) \
|
| - V(Store) \
|
| - V(Word32And) \
|
| - V(Word32Or) \
|
| - V(Word32Xor) \
|
| - V(Word32Shl) \
|
| - V(Word32Shr) \
|
| - V(Word32Sar) \
|
| - V(Word32Ror) \
|
| - V(Word32Equal) \
|
| - V(Word64And) \
|
| - V(Word64Or) \
|
| - V(Word64Xor) \
|
| - V(Word64Shl) \
|
| - V(Word64Shr) \
|
| - V(Word64Sar) \
|
| - V(Word64Ror) \
|
| - V(Word64Equal) \
|
| - V(Int32Add) \
|
| - V(Int32AddWithOverflow) \
|
| - V(Int32Sub) \
|
| - V(Int32SubWithOverflow) \
|
| - V(Int32Mul) \
|
| - V(Int32MulHigh) \
|
| - V(Int32Div) \
|
| - V(Int32Mod) \
|
| - V(Int32LessThan) \
|
| - V(Int32LessThanOrEqual) \
|
| - V(Uint32Div) \
|
| - V(Uint32LessThan) \
|
| - V(Uint32LessThanOrEqual) \
|
| - V(Uint32Mod) \
|
| - V(Uint32MulHigh) \
|
| - V(Int64Add) \
|
| - V(Int64Sub) \
|
| - V(Int64Mul) \
|
| - V(Int64Div) \
|
| - V(Int64Mod) \
|
| - V(Int64LessThan) \
|
| - V(Int64LessThanOrEqual) \
|
| - V(Uint64Div) \
|
| - V(Uint64LessThan) \
|
| - V(Uint64Mod) \
|
| - V(ChangeFloat32ToFloat64) \
|
| - V(ChangeFloat64ToInt32) \
|
| - V(ChangeFloat64ToUint32) \
|
| - V(ChangeInt32ToFloat64) \
|
| - V(ChangeInt32ToInt64) \
|
| - V(ChangeUint32ToFloat64) \
|
| - V(ChangeUint32ToUint64) \
|
| - V(TruncateFloat64ToFloat32) \
|
| - V(TruncateFloat64ToInt32) \
|
| - V(TruncateInt64ToInt32) \
|
| - V(Float64Add) \
|
| - V(Float64Sub) \
|
| - V(Float64Mul) \
|
| - V(Float64Div) \
|
| - V(Float64Mod) \
|
| - V(Float64Sqrt) \
|
| - V(Float64Equal) \
|
| - V(Float64LessThan) \
|
| - V(Float64LessThanOrEqual) \
|
| - V(Float64Floor) \
|
| - V(Float64Ceil) \
|
| - V(Float64RoundTruncate) \
|
| - V(Float64RoundTiesAway) \
|
| - V(LoadStackPointer) \
|
| - V(CheckedLoad) \
|
| +#define MACHINE_COMPARE_BINOP_LIST(V) \
|
| + V(Word32Equal) \
|
| + V(Word64Equal) \
|
| + V(Int32LessThan) \
|
| + V(Int32LessThanOrEqual) \
|
| + V(Uint32LessThan) \
|
| + V(Uint32LessThanOrEqual) \
|
| + V(Int64LessThan) \
|
| + V(Int64LessThanOrEqual) \
|
| + V(Uint64LessThan) \
|
| + V(Float64Equal) \
|
| + V(Float64LessThan) \
|
| + V(Float64LessThanOrEqual)
|
| +
|
| +#define MACHINE_OP_LIST(V) \
|
| + MACHINE_COMPARE_BINOP_LIST(V) \
|
| + V(Load) \
|
| + V(Store) \
|
| + V(Word32And) \
|
| + V(Word32Or) \
|
| + V(Word32Xor) \
|
| + V(Word32Shl) \
|
| + V(Word32Shr) \
|
| + V(Word32Sar) \
|
| + V(Word32Ror) \
|
| + V(Word64And) \
|
| + V(Word64Or) \
|
| + V(Word64Xor) \
|
| + V(Word64Shl) \
|
| + V(Word64Shr) \
|
| + V(Word64Sar) \
|
| + V(Word64Ror) \
|
| + V(Int32Add) \
|
| + V(Int32AddWithOverflow) \
|
| + V(Int32Sub) \
|
| + V(Int32SubWithOverflow) \
|
| + V(Int32Mul) \
|
| + V(Int32MulHigh) \
|
| + V(Int32Div) \
|
| + V(Int32Mod) \
|
| + V(Uint32Div) \
|
| + V(Uint32Mod) \
|
| + V(Uint32MulHigh) \
|
| + V(Int64Add) \
|
| + V(Int64Sub) \
|
| + V(Int64Mul) \
|
| + V(Int64Div) \
|
| + V(Int64Mod) \
|
| + V(Uint64Div) \
|
| + V(Uint64Mod) \
|
| + V(ChangeFloat32ToFloat64) \
|
| + V(ChangeFloat64ToInt32) \
|
| + V(ChangeFloat64ToUint32) \
|
| + V(ChangeInt32ToFloat64) \
|
| + V(ChangeInt32ToInt64) \
|
| + V(ChangeUint32ToFloat64) \
|
| + V(ChangeUint32ToUint64) \
|
| + V(TruncateFloat64ToFloat32) \
|
| + V(TruncateFloat64ToInt32) \
|
| + V(TruncateInt64ToInt32) \
|
| + V(Float64Add) \
|
| + V(Float64Sub) \
|
| + V(Float64Mul) \
|
| + V(Float64Div) \
|
| + V(Float64Mod) \
|
| + V(Float64Sqrt) \
|
| + V(Float64Floor) \
|
| + V(Float64Ceil) \
|
| + V(Float64RoundTruncate) \
|
| + V(Float64RoundTiesAway) \
|
| + V(LoadStackPointer) \
|
| + V(CheckedLoad) \
|
| V(CheckedStore)
|
|
|
| #define VALUE_OP_LIST(V) \
|
| @@ -308,6 +314,13 @@ class IrOpcode {
|
| static bool IsMergeOpcode(Value value) {
|
| return value == kMerge || value == kLoop;
|
| }
|
| +
|
| + // Returns true if opcode for comparison operator.
|
| + static bool IsComparisonOpcode(Value value) {
|
| + return (kJSEqual <= value && value <= kJSGreaterThanOrEqual) ||
|
| + (kNumberEqual <= value && value <= kStringLessThanOrEqual) ||
|
| + (kWord32Equal <= value && value <= kFloat64LessThanOrEqual);
|
| + }
|
| };
|
|
|
| } // namespace compiler
|
|
|