Upgrade V8 to version 4.9.385.28
https://chromium.googlesource.com/v8/v8/+/4.9.385.28
FPIIM-449
Change-Id: I4b2e74289d4bf3667f2f3dc8aa2e541f63e26eb4
diff --git a/src/compiler/opcodes.h b/src/compiler/opcodes.h
index d229b6d..a97fdfa 100644
--- a/src/compiler/opcodes.h
+++ b/src/compiler/opcodes.h
@@ -5,48 +5,61 @@
#ifndef V8_COMPILER_OPCODES_H_
#define V8_COMPILER_OPCODES_H_
-// Opcodes for control operators.
-#define INNER_CONTROL_OP_LIST(V) \
- V(Dead) \
- V(Loop) \
- V(Branch) \
- V(IfTrue) \
- V(IfFalse) \
- V(Merge) \
- V(Return) \
- V(Terminate) \
- V(Throw)
+#include <iosfwd>
+// Opcodes for control operators.
#define CONTROL_OP_LIST(V) \
- INNER_CONTROL_OP_LIST(V) \
V(Start) \
+ V(Loop) \
+ V(Branch) \
+ V(Switch) \
+ V(IfTrue) \
+ V(IfFalse) \
+ V(IfSuccess) \
+ V(IfException) \
+ V(IfValue) \
+ V(IfDefault) \
+ V(Merge) \
+ V(Deoptimize) \
+ V(Return) \
+ V(TailCall) \
+ V(Terminate) \
+ V(OsrNormalEntry) \
+ V(OsrLoopEntry) \
+ V(Throw) \
V(End)
-// Opcodes for common operators.
-#define LEAF_OP_LIST(V) \
- V(Int32Constant) \
- V(Int64Constant) \
- V(Float32Constant) \
- V(Float64Constant) \
- V(ExternalConstant) \
- V(NumberConstant) \
+// Opcodes for constant operators.
+#define CONSTANT_OP_LIST(V) \
+ V(Int32Constant) \
+ V(Int64Constant) \
+ V(Float32Constant) \
+ V(Float64Constant) \
+ V(ExternalConstant) \
+ V(NumberConstant) \
V(HeapConstant)
#define INNER_OP_LIST(V) \
V(Select) \
V(Phi) \
+ V(EffectSet) \
V(EffectPhi) \
- V(ValueEffect) \
- V(Finish) \
+ V(Guard) \
+ V(BeginRegion) \
+ V(FinishRegion) \
V(FrameState) \
V(StateValues) \
+ V(TypedStateValues) \
+ V(ObjectState) \
V(Call) \
V(Parameter) \
+ V(OsrValue) \
V(Projection)
#define COMMON_OP_LIST(V) \
- LEAF_OP_LIST(V) \
- INNER_OP_LIST(V)
+ CONSTANT_OP_LIST(V) \
+ INNER_OP_LIST(V) \
+ V(Dead)
// Opcodes for JavaScript operators.
#define JS_COMPARE_BINOP_LIST(V) \
@@ -79,8 +92,6 @@
JS_BITWISE_BINOP_LIST(V) \
JS_ARITH_BINOP_LIST(V)
-#define JS_LOGIC_UNOP_LIST(V) V(JSUnaryNot)
-
#define JS_CONVERSION_UNOP_LIST(V) \
V(JSToBoolean) \
V(JSToNumber) \
@@ -92,23 +103,32 @@
V(JSTypeOf)
#define JS_SIMPLE_UNOP_LIST(V) \
- JS_LOGIC_UNOP_LIST(V) \
JS_CONVERSION_UNOP_LIST(V) \
JS_OTHER_UNOP_LIST(V)
-#define JS_OBJECT_OP_LIST(V) \
- V(JSCreate) \
- V(JSLoadProperty) \
- V(JSLoadNamed) \
- V(JSStoreProperty) \
- V(JSStoreNamed) \
- V(JSDeleteProperty) \
- V(JSHasProperty) \
+#define JS_OBJECT_OP_LIST(V) \
+ V(JSCreate) \
+ V(JSCreateArguments) \
+ V(JSCreateArray) \
+ V(JSCreateClosure) \
+ V(JSCreateIterResultObject) \
+ V(JSCreateLiteralArray) \
+ V(JSCreateLiteralObject) \
+ V(JSCreateLiteralRegExp) \
+ V(JSLoadProperty) \
+ V(JSLoadNamed) \
+ V(JSLoadGlobal) \
+ V(JSStoreProperty) \
+ V(JSStoreNamed) \
+ V(JSStoreGlobal) \
+ V(JSDeleteProperty) \
+ V(JSHasProperty) \
V(JSInstanceOf)
#define JS_CONTEXT_OP_LIST(V) \
V(JSLoadContext) \
V(JSStoreContext) \
+ V(JSLoadDynamic) \
V(JSCreateFunctionContext) \
V(JSCreateCatchContext) \
V(JSCreateWithContext) \
@@ -120,8 +140,15 @@
V(JSCallConstruct) \
V(JSCallFunction) \
V(JSCallRuntime) \
+ V(JSConvertReceiver) \
+ V(JSForInDone) \
+ V(JSForInNext) \
+ V(JSForInPrepare) \
+ V(JSForInStep) \
+ V(JSLoadMessage) \
+ V(JSStoreMessage) \
V(JSYield) \
- V(JSDebugger)
+ V(JSStackCheck)
#define JS_OP_LIST(V) \
JS_SIMPLE_BINOP_LIST(V) \
@@ -131,112 +158,170 @@
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(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) \
- V(ObjectIsNonNegativeSmi)
+#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(BooleanNot) \
+ V(BooleanToNumber) \
+ V(NumberAdd) \
+ V(NumberSubtract) \
+ V(NumberMultiply) \
+ V(NumberDivide) \
+ V(NumberModulus) \
+ V(NumberBitwiseOr) \
+ V(NumberBitwiseXor) \
+ V(NumberBitwiseAnd) \
+ V(NumberShiftLeft) \
+ V(NumberShiftRight) \
+ V(NumberShiftRightLogical) \
+ V(NumberToInt32) \
+ V(NumberToUint32) \
+ V(NumberIsHoleNaN) \
+ V(PlainPrimitiveToNumber) \
+ V(ChangeTaggedToInt32) \
+ V(ChangeTaggedToUint32) \
+ V(ChangeTaggedToFloat64) \
+ V(ChangeInt32ToTagged) \
+ V(ChangeUint32ToTagged) \
+ V(ChangeFloat64ToTagged) \
+ V(ChangeBoolToBit) \
+ V(ChangeBitToBool) \
+ V(Allocate) \
+ V(LoadField) \
+ V(LoadBuffer) \
+ V(LoadElement) \
+ V(StoreField) \
+ V(StoreBuffer) \
+ V(StoreElement) \
+ V(ObjectIsNumber) \
+ V(ObjectIsSmi)
// 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(Uint64LessThanOrEqual) \
+ V(Float32Equal) \
+ V(Float32LessThan) \
+ V(Float32LessThanOrEqual) \
+ 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(Word32Clz) \
+ V(Word32Ctz) \
+ V(Word32Popcnt) \
+ V(Word64Popcnt) \
+ V(Word64And) \
+ V(Word64Or) \
+ V(Word64Xor) \
+ V(Word64Shl) \
+ V(Word64Shr) \
+ V(Word64Sar) \
+ V(Word64Ror) \
+ V(Word64Clz) \
+ V(Word64Ctz) \
+ 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(Int64AddWithOverflow) \
+ V(Int64Sub) \
+ V(Int64SubWithOverflow) \
+ V(Int64Mul) \
+ V(Int64Div) \
+ V(Int64Mod) \
+ V(Uint64Div) \
+ V(Uint64Mod) \
+ V(ChangeFloat32ToFloat64) \
+ V(ChangeFloat64ToInt32) \
+ V(ChangeFloat64ToUint32) \
+ V(TryTruncateFloat32ToInt64) \
+ V(TryTruncateFloat64ToInt64) \
+ V(TryTruncateFloat32ToUint64) \
+ V(TryTruncateFloat64ToUint64) \
+ V(ChangeInt32ToFloat64) \
+ V(ChangeInt32ToInt64) \
+ V(ChangeUint32ToFloat64) \
+ V(ChangeUint32ToUint64) \
+ V(TruncateFloat64ToFloat32) \
+ V(TruncateFloat64ToInt32) \
+ V(TruncateInt64ToInt32) \
+ V(RoundInt64ToFloat32) \
+ V(RoundInt64ToFloat64) \
+ V(RoundUint64ToFloat32) \
+ V(RoundUint64ToFloat64) \
+ V(BitcastFloat32ToInt32) \
+ V(BitcastFloat64ToInt64) \
+ V(BitcastInt32ToFloat32) \
+ V(BitcastInt64ToFloat64) \
+ V(Float32Add) \
+ V(Float32Sub) \
+ V(Float32Mul) \
+ V(Float32Div) \
+ V(Float32Max) \
+ V(Float32Min) \
+ V(Float32Abs) \
+ V(Float32Sqrt) \
+ V(Float32RoundDown) \
+ V(Float64Add) \
+ V(Float64Sub) \
+ V(Float64Mul) \
+ V(Float64Div) \
+ V(Float64Mod) \
+ V(Float64Max) \
+ V(Float64Min) \
+ V(Float64Abs) \
+ V(Float64Sqrt) \
+ V(Float64RoundDown) \
+ V(Float32RoundUp) \
+ V(Float64RoundUp) \
+ V(Float32RoundTruncate) \
+ V(Float64RoundTruncate) \
+ V(Float64RoundTiesAway) \
+ V(Float32RoundTiesEven) \
+ V(Float64RoundTiesEven) \
+ V(Float64ExtractLowWord32) \
+ V(Float64ExtractHighWord32) \
+ V(Float64InsertLowWord32) \
+ V(Float64InsertHighWord32) \
+ V(LoadStackPointer) \
+ V(LoadFramePointer) \
+ V(CheckedLoad) \
V(CheckedStore)
#define VALUE_OP_LIST(V) \
@@ -271,60 +356,53 @@
// Returns the mnemonic name of an opcode.
static char const* Mnemonic(Value value);
- static bool IsJsOpcode(Value val) {
- switch (val) {
-// TODO(turbofan): make this a range check.
-#define RETURN_NAME(x) \
- case k##x: \
- return true;
- JS_OP_LIST(RETURN_NAME)
-#undef RETURN_NAME
- default:
- return false;
- }
+ // Returns true if opcode for common operator.
+ static bool IsCommonOpcode(Value value) {
+ return kStart <= value && value <= kDead;
}
- static bool IsControlOpcode(Value val) {
- switch (val) {
-// TODO(turbofan): make this a range check.
-#define RETURN_NAME(x) \
- case k##x: \
- return true;
- CONTROL_OP_LIST(RETURN_NAME)
-#undef RETURN_NAME
- default:
- return false;
- }
+ // Returns true if opcode for control operator.
+ static bool IsControlOpcode(Value value) {
+ return kStart <= value && value <= kEnd;
}
- static bool IsLeafOpcode(Value val) {
- switch (val) {
-// TODO(turbofan): make this a table lookup.
-#define RETURN_NAME(x) \
- case k##x: \
- return true;
- LEAF_OP_LIST(RETURN_NAME)
-#undef RETURN_NAME
- default:
- return false;
- }
+ // Returns true if opcode for JavaScript operator.
+ static bool IsJsOpcode(Value value) {
+ return kJSEqual <= value && value <= kJSStackCheck;
}
- static bool IsCommonOpcode(Value val) {
- switch (val) {
-// TODO(turbofan): make this a table lookup or a range check.
-#define RETURN_NAME(x) \
- case k##x: \
- return true;
- CONTROL_OP_LIST(RETURN_NAME)
- COMMON_OP_LIST(RETURN_NAME)
-#undef RETURN_NAME
- default:
- return false;
- }
+ // Returns true if opcode for constant operator.
+ static bool IsConstantOpcode(Value value) {
+ return kInt32Constant <= value && value <= kHeapConstant;
+ }
+
+ static bool IsPhiOpcode(Value value) {
+ return value == kPhi || value == kEffectPhi;
+ }
+
+ static bool IsMergeOpcode(Value value) {
+ return value == kMerge || value == kLoop;
+ }
+
+ static bool IsIfProjectionOpcode(Value value) {
+ return kIfTrue <= value && value <= kIfDefault;
+ }
+
+ // Returns true if opcode can be inlined.
+ static bool IsInlineeOpcode(Value value) {
+ return value == kJSCallConstruct || value == kJSCallFunction;
+ }
+
+ // 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);
}
};
+std::ostream& operator<<(std::ostream&, IrOpcode::Value);
+
} // namespace compiler
} // namespace internal
} // namespace v8