Index: src/runtime/runtime.h |
diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h |
index cfd67ba891393dc2649e53694e79d3c738269d4a..402353929d82fcd12b7d31699f19404282b45e71 100644 |
--- a/src/runtime/runtime.h |
+++ b/src/runtime/runtime.h |
@@ -6,6 +6,7 @@ |
#define V8_RUNTIME_RUNTIME_H_ |
#include "src/allocation.h" |
+#include "src/base/platform/time.h" |
#include "src/objects.h" |
#include "src/unicode.h" |
#include "src/zone.h" |
@@ -336,7 +337,8 @@ namespace internal { |
F(ThrowDerivedConstructorReturnedNonObject, 0, 1) \ |
F(ThrowCalledNonCallable, 1, 1) \ |
F(CreateListFromArrayLike, 1, 1) \ |
- F(IncrementUseCounter, 1, 1) |
+ F(IncrementUseCounter, 1, 1) \ |
+ F(GetAndResetRuntimeCallStats, 0, 1) |
#define FOR_EACH_INTRINSIC_JSON(F) \ |
@@ -567,311 +569,317 @@ namespace internal { |
F(Arguments, 1, 1) |
-#define FOR_EACH_INTRINSIC_SIMD(F) \ |
- F(IsSimdValue, 1, 1) \ |
- F(SimdSameValue, 2, 1) \ |
- F(SimdSameValueZero, 2, 1) \ |
- F(CreateFloat32x4, 4, 1) \ |
- F(CreateInt32x4, 4, 1) \ |
- F(CreateUint32x4, 4, 1) \ |
- F(CreateBool32x4, 4, 1) \ |
- F(CreateInt16x8, 8, 1) \ |
- F(CreateUint16x8, 8, 1) \ |
- F(CreateBool16x8, 8, 1) \ |
- F(CreateInt8x16, 16, 1) \ |
- F(CreateUint8x16, 16, 1) \ |
- F(CreateBool8x16, 16, 1) \ |
- F(Float32x4Check, 1, 1) \ |
- F(Float32x4ExtractLane, 2, 1) \ |
- F(Float32x4ReplaceLane, 3, 1) \ |
- F(Float32x4Abs, 1, 1) \ |
- F(Float32x4Neg, 1, 1) \ |
- F(Float32x4Sqrt, 1, 1) \ |
- F(Float32x4RecipApprox, 1, 1) \ |
- F(Float32x4RecipSqrtApprox, 1, 1) \ |
- F(Float32x4Add, 2, 1) \ |
- F(Float32x4Sub, 2, 1) \ |
- F(Float32x4Mul, 2, 1) \ |
- F(Float32x4Div, 2, 1) \ |
- F(Float32x4Min, 2, 1) \ |
- F(Float32x4Max, 2, 1) \ |
- F(Float32x4MinNum, 2, 1) \ |
- F(Float32x4MaxNum, 2, 1) \ |
- F(Float32x4Equal, 2, 1) \ |
- F(Float32x4NotEqual, 2, 1) \ |
- F(Float32x4LessThan, 2, 1) \ |
- F(Float32x4LessThanOrEqual, 2, 1) \ |
- F(Float32x4GreaterThan, 2, 1) \ |
- F(Float32x4GreaterThanOrEqual, 2, 1) \ |
- F(Float32x4Select, 3, 1) \ |
- F(Float32x4Swizzle, 5, 1) \ |
- F(Float32x4Shuffle, 6, 1) \ |
- F(Float32x4FromInt32x4, 1, 1) \ |
- F(Float32x4FromUint32x4, 1, 1) \ |
- F(Float32x4FromInt32x4Bits, 1, 1) \ |
- F(Float32x4FromUint32x4Bits, 1, 1) \ |
- F(Float32x4FromInt16x8Bits, 1, 1) \ |
- F(Float32x4FromUint16x8Bits, 1, 1) \ |
- F(Float32x4FromInt8x16Bits, 1, 1) \ |
- F(Float32x4FromUint8x16Bits, 1, 1) \ |
- F(Float32x4Load, 2, 1) \ |
- F(Float32x4Load1, 2, 1) \ |
- F(Float32x4Load2, 2, 1) \ |
- F(Float32x4Load3, 2, 1) \ |
- F(Float32x4Store, 3, 1) \ |
- F(Float32x4Store1, 3, 1) \ |
- F(Float32x4Store2, 3, 1) \ |
- F(Float32x4Store3, 3, 1) \ |
- F(Int32x4Check, 1, 1) \ |
- F(Int32x4ExtractLane, 2, 1) \ |
- F(Int32x4ReplaceLane, 3, 1) \ |
- F(Int32x4Neg, 1, 1) \ |
- F(Int32x4Add, 2, 1) \ |
- F(Int32x4Sub, 2, 1) \ |
- F(Int32x4Mul, 2, 1) \ |
- F(Int32x4Min, 2, 1) \ |
- F(Int32x4Max, 2, 1) \ |
- F(Int32x4And, 2, 1) \ |
- F(Int32x4Or, 2, 1) \ |
- F(Int32x4Xor, 2, 1) \ |
- F(Int32x4Not, 1, 1) \ |
- F(Int32x4ShiftLeftByScalar, 2, 1) \ |
- F(Int32x4ShiftRightByScalar, 2, 1) \ |
- F(Int32x4Equal, 2, 1) \ |
- F(Int32x4NotEqual, 2, 1) \ |
- F(Int32x4LessThan, 2, 1) \ |
- F(Int32x4LessThanOrEqual, 2, 1) \ |
- F(Int32x4GreaterThan, 2, 1) \ |
- F(Int32x4GreaterThanOrEqual, 2, 1) \ |
- F(Int32x4Select, 3, 1) \ |
- F(Int32x4Swizzle, 5, 1) \ |
- F(Int32x4Shuffle, 6, 1) \ |
- F(Int32x4FromFloat32x4, 1, 1) \ |
- F(Int32x4FromUint32x4, 1, 1) \ |
- F(Int32x4FromFloat32x4Bits, 1, 1) \ |
- F(Int32x4FromUint32x4Bits, 1, 1) \ |
- F(Int32x4FromInt16x8Bits, 1, 1) \ |
- F(Int32x4FromUint16x8Bits, 1, 1) \ |
- F(Int32x4FromInt8x16Bits, 1, 1) \ |
- F(Int32x4FromUint8x16Bits, 1, 1) \ |
- F(Int32x4Load, 2, 1) \ |
- F(Int32x4Load1, 2, 1) \ |
- F(Int32x4Load2, 2, 1) \ |
- F(Int32x4Load3, 2, 1) \ |
- F(Int32x4Store, 3, 1) \ |
- F(Int32x4Store1, 3, 1) \ |
- F(Int32x4Store2, 3, 1) \ |
- F(Int32x4Store3, 3, 1) \ |
- F(Uint32x4Check, 1, 1) \ |
- F(Uint32x4ExtractLane, 2, 1) \ |
- F(Uint32x4ReplaceLane, 3, 1) \ |
- F(Uint32x4Add, 2, 1) \ |
- F(Uint32x4Sub, 2, 1) \ |
- F(Uint32x4Mul, 2, 1) \ |
- F(Uint32x4Min, 2, 1) \ |
- F(Uint32x4Max, 2, 1) \ |
- F(Uint32x4And, 2, 1) \ |
- F(Uint32x4Or, 2, 1) \ |
- F(Uint32x4Xor, 2, 1) \ |
- F(Uint32x4Not, 1, 1) \ |
- F(Uint32x4ShiftLeftByScalar, 2, 1) \ |
- F(Uint32x4ShiftRightByScalar, 2, 1) \ |
- F(Uint32x4Equal, 2, 1) \ |
- F(Uint32x4NotEqual, 2, 1) \ |
- F(Uint32x4LessThan, 2, 1) \ |
- F(Uint32x4LessThanOrEqual, 2, 1) \ |
- F(Uint32x4GreaterThan, 2, 1) \ |
- F(Uint32x4GreaterThanOrEqual, 2, 1) \ |
- F(Uint32x4Select, 3, 1) \ |
- F(Uint32x4Swizzle, 5, 1) \ |
- F(Uint32x4Shuffle, 6, 1) \ |
- F(Uint32x4FromFloat32x4, 1, 1) \ |
- F(Uint32x4FromInt32x4, 1, 1) \ |
- F(Uint32x4FromFloat32x4Bits, 1, 1) \ |
- F(Uint32x4FromInt32x4Bits, 1, 1) \ |
- F(Uint32x4FromInt16x8Bits, 1, 1) \ |
- F(Uint32x4FromUint16x8Bits, 1, 1) \ |
- F(Uint32x4FromInt8x16Bits, 1, 1) \ |
- F(Uint32x4FromUint8x16Bits, 1, 1) \ |
- F(Uint32x4Load, 2, 1) \ |
- F(Uint32x4Load1, 2, 1) \ |
- F(Uint32x4Load2, 2, 1) \ |
- F(Uint32x4Load3, 2, 1) \ |
- F(Uint32x4Store, 3, 1) \ |
- F(Uint32x4Store1, 3, 1) \ |
- F(Uint32x4Store2, 3, 1) \ |
- F(Uint32x4Store3, 3, 1) \ |
- F(Bool32x4Check, 1, 1) \ |
- F(Bool32x4ExtractLane, 2, 1) \ |
- F(Bool32x4ReplaceLane, 3, 1) \ |
- F(Bool32x4And, 2, 1) \ |
- F(Bool32x4Or, 2, 1) \ |
- F(Bool32x4Xor, 2, 1) \ |
- F(Bool32x4Not, 1, 1) \ |
- F(Bool32x4AnyTrue, 1, 1) \ |
- F(Bool32x4AllTrue, 1, 1) \ |
- F(Bool32x4Swizzle, 5, 1) \ |
- F(Bool32x4Shuffle, 6, 1) \ |
- F(Int16x8Check, 1, 1) \ |
- F(Int16x8ExtractLane, 2, 1) \ |
- F(Int16x8ReplaceLane, 3, 1) \ |
- F(Int16x8Neg, 1, 1) \ |
- F(Int16x8Add, 2, 1) \ |
- F(Int16x8AddSaturate, 2, 1) \ |
- F(Int16x8Sub, 2, 1) \ |
- F(Int16x8SubSaturate, 2, 1) \ |
- F(Int16x8Mul, 2, 1) \ |
- F(Int16x8Min, 2, 1) \ |
- F(Int16x8Max, 2, 1) \ |
- F(Int16x8And, 2, 1) \ |
- F(Int16x8Or, 2, 1) \ |
- F(Int16x8Xor, 2, 1) \ |
- F(Int16x8Not, 1, 1) \ |
- F(Int16x8ShiftLeftByScalar, 2, 1) \ |
- F(Int16x8ShiftRightByScalar, 2, 1) \ |
- F(Int16x8Equal, 2, 1) \ |
- F(Int16x8NotEqual, 2, 1) \ |
- F(Int16x8LessThan, 2, 1) \ |
- F(Int16x8LessThanOrEqual, 2, 1) \ |
- F(Int16x8GreaterThan, 2, 1) \ |
- F(Int16x8GreaterThanOrEqual, 2, 1) \ |
- F(Int16x8Select, 3, 1) \ |
- F(Int16x8Swizzle, 9, 1) \ |
- F(Int16x8Shuffle, 10, 1) \ |
- F(Int16x8FromUint16x8, 1, 1) \ |
- F(Int16x8FromFloat32x4Bits, 1, 1) \ |
- F(Int16x8FromInt32x4Bits, 1, 1) \ |
- F(Int16x8FromUint32x4Bits, 1, 1) \ |
- F(Int16x8FromUint16x8Bits, 1, 1) \ |
- F(Int16x8FromInt8x16Bits, 1, 1) \ |
- F(Int16x8FromUint8x16Bits, 1, 1) \ |
- F(Int16x8Load, 2, 1) \ |
- F(Int16x8Store, 3, 1) \ |
- F(Uint16x8Check, 1, 1) \ |
- F(Uint16x8ExtractLane, 2, 1) \ |
- F(Uint16x8ReplaceLane, 3, 1) \ |
- F(Uint16x8Add, 2, 1) \ |
- F(Uint16x8AddSaturate, 2, 1) \ |
- F(Uint16x8Sub, 2, 1) \ |
- F(Uint16x8SubSaturate, 2, 1) \ |
- F(Uint16x8Mul, 2, 1) \ |
- F(Uint16x8Min, 2, 1) \ |
- F(Uint16x8Max, 2, 1) \ |
- F(Uint16x8And, 2, 1) \ |
- F(Uint16x8Or, 2, 1) \ |
- F(Uint16x8Xor, 2, 1) \ |
- F(Uint16x8Not, 1, 1) \ |
- F(Uint16x8ShiftLeftByScalar, 2, 1) \ |
- F(Uint16x8ShiftRightByScalar, 2, 1) \ |
- F(Uint16x8Equal, 2, 1) \ |
- F(Uint16x8NotEqual, 2, 1) \ |
- F(Uint16x8LessThan, 2, 1) \ |
- F(Uint16x8LessThanOrEqual, 2, 1) \ |
- F(Uint16x8GreaterThan, 2, 1) \ |
- F(Uint16x8GreaterThanOrEqual, 2, 1) \ |
- F(Uint16x8Select, 3, 1) \ |
- F(Uint16x8Swizzle, 9, 1) \ |
- F(Uint16x8Shuffle, 10, 1) \ |
- F(Uint16x8FromInt16x8, 1, 1) \ |
- F(Uint16x8FromFloat32x4Bits, 1, 1) \ |
- F(Uint16x8FromInt32x4Bits, 1, 1) \ |
- F(Uint16x8FromUint32x4Bits, 1, 1) \ |
- F(Uint16x8FromInt16x8Bits, 1, 1) \ |
- F(Uint16x8FromInt8x16Bits, 1, 1) \ |
- F(Uint16x8FromUint8x16Bits, 1, 1) \ |
- F(Uint16x8Load, 2, 1) \ |
- F(Uint16x8Store, 3, 1) \ |
- F(Bool16x8Check, 1, 1) \ |
- F(Bool16x8ExtractLane, 2, 1) \ |
- F(Bool16x8ReplaceLane, 3, 1) \ |
- F(Bool16x8And, 2, 1) \ |
- F(Bool16x8Or, 2, 1) \ |
- F(Bool16x8Xor, 2, 1) \ |
- F(Bool16x8Not, 1, 1) \ |
- F(Bool16x8AnyTrue, 1, 1) \ |
- F(Bool16x8AllTrue, 1, 1) \ |
- F(Bool16x8Swizzle, 9, 1) \ |
- F(Bool16x8Shuffle, 10, 1) \ |
- F(Int8x16Check, 1, 1) \ |
- F(Int8x16ExtractLane, 2, 1) \ |
- F(Int8x16ReplaceLane, 3, 1) \ |
- F(Int8x16Neg, 1, 1) \ |
- F(Int8x16Add, 2, 1) \ |
- F(Int8x16AddSaturate, 2, 1) \ |
- F(Int8x16Sub, 2, 1) \ |
- F(Int8x16SubSaturate, 2, 1) \ |
- F(Int8x16Mul, 2, 1) \ |
- F(Int8x16Min, 2, 1) \ |
- F(Int8x16Max, 2, 1) \ |
- F(Int8x16And, 2, 1) \ |
- F(Int8x16Or, 2, 1) \ |
- F(Int8x16Xor, 2, 1) \ |
- F(Int8x16Not, 1, 1) \ |
- F(Int8x16ShiftLeftByScalar, 2, 1) \ |
- F(Int8x16ShiftRightByScalar, 2, 1) \ |
- F(Int8x16Equal, 2, 1) \ |
- F(Int8x16NotEqual, 2, 1) \ |
- F(Int8x16LessThan, 2, 1) \ |
- F(Int8x16LessThanOrEqual, 2, 1) \ |
- F(Int8x16GreaterThan, 2, 1) \ |
- F(Int8x16GreaterThanOrEqual, 2, 1) \ |
- F(Int8x16Select, 3, 1) \ |
- F(Int8x16Swizzle, 17, 1) \ |
- F(Int8x16Shuffle, 18, 1) \ |
- F(Int8x16FromUint8x16, 1, 1) \ |
- F(Int8x16FromFloat32x4Bits, 1, 1) \ |
- F(Int8x16FromInt32x4Bits, 1, 1) \ |
- F(Int8x16FromUint32x4Bits, 1, 1) \ |
- F(Int8x16FromInt16x8Bits, 1, 1) \ |
- F(Int8x16FromUint16x8Bits, 1, 1) \ |
- F(Int8x16FromUint8x16Bits, 1, 1) \ |
- F(Int8x16Load, 2, 1) \ |
- F(Int8x16Store, 3, 1) \ |
- F(Uint8x16Check, 1, 1) \ |
- F(Uint8x16ExtractLane, 2, 1) \ |
- F(Uint8x16ReplaceLane, 3, 1) \ |
- F(Uint8x16Add, 2, 1) \ |
- F(Uint8x16AddSaturate, 2, 1) \ |
- F(Uint8x16Sub, 2, 1) \ |
- F(Uint8x16SubSaturate, 2, 1) \ |
- F(Uint8x16Mul, 2, 1) \ |
- F(Uint8x16Min, 2, 1) \ |
- F(Uint8x16Max, 2, 1) \ |
- F(Uint8x16And, 2, 1) \ |
- F(Uint8x16Or, 2, 1) \ |
- F(Uint8x16Xor, 2, 1) \ |
- F(Uint8x16Not, 1, 1) \ |
- F(Uint8x16ShiftLeftByScalar, 2, 1) \ |
- F(Uint8x16ShiftRightByScalar, 2, 1) \ |
- F(Uint8x16Equal, 2, 1) \ |
- F(Uint8x16NotEqual, 2, 1) \ |
- F(Uint8x16LessThan, 2, 1) \ |
- F(Uint8x16LessThanOrEqual, 2, 1) \ |
- F(Uint8x16GreaterThan, 2, 1) \ |
- F(Uint8x16GreaterThanOrEqual, 2, 1) \ |
- F(Uint8x16Select, 3, 1) \ |
- F(Uint8x16Swizzle, 17, 1) \ |
- F(Uint8x16Shuffle, 18, 1) \ |
- F(Uint8x16FromInt8x16, 1, 1) \ |
- F(Uint8x16FromFloat32x4Bits, 1, 1) \ |
- F(Uint8x16FromInt32x4Bits, 1, 1) \ |
- F(Uint8x16FromUint32x4Bits, 1, 1) \ |
- F(Uint8x16FromInt16x8Bits, 1, 1) \ |
- F(Uint8x16FromUint16x8Bits, 1, 1) \ |
- F(Uint8x16FromInt8x16Bits, 1, 1) \ |
- F(Uint8x16Load, 2, 1) \ |
- F(Uint8x16Store, 3, 1) \ |
- F(Bool8x16Check, 1, 1) \ |
- F(Bool8x16ExtractLane, 2, 1) \ |
- F(Bool8x16ReplaceLane, 3, 1) \ |
- F(Bool8x16And, 2, 1) \ |
- F(Bool8x16Or, 2, 1) \ |
- F(Bool8x16Xor, 2, 1) \ |
- F(Bool8x16Not, 1, 1) \ |
- F(Bool8x16AnyTrue, 1, 1) \ |
- F(Bool8x16AllTrue, 1, 1) \ |
- F(Bool8x16Swizzle, 17, 1) \ |
- F(Bool8x16Shuffle, 18, 1) |
+#define FOR_EACH_INTRINSIC_SIMD(F) \ |
+ F(IsSimdValue, 1, 1) \ |
+ F(SimdSameValue, 2, 1) \ |
+ F(SimdSameValueZero, 2, 1) \ |
+ F(CreateFloat32x4, 4, 1) \ |
+ F(CreateInt32x4, 4, 1) \ |
+ F(CreateUint32x4, 4, 1) \ |
+ F(CreateBool32x4, 4, 1) \ |
+ F(CreateInt16x8, 8, 1) \ |
+ F(CreateUint16x8, 8, 1) \ |
+ F(CreateBool16x8, 8, 1) \ |
+ F(CreateInt8x16, 16, 1) \ |
+ F(CreateUint8x16, 16, 1) \ |
+ F(CreateBool8x16, 16, 1) \ |
+ F(Float32x4Check, 1, 1) \ |
+ F(Float32x4ExtractLane, 2, 1) \ |
+ F(Float32x4ReplaceLane, 3, 1) \ |
+ F(Float32x4Abs, 1, 1) \ |
+ F(Float32x4Neg, 1, 1) \ |
+ F(Float32x4Sqrt, 1, 1) \ |
+ F(Float32x4RecipApprox, 1, 1) \ |
+ F(Float32x4RecipSqrtApprox, 1, 1) \ |
+ F(Float32x4Add, 2, 1) \ |
+ F(Float32x4Sub, 2, 1) \ |
+ F(Float32x4Mul, 2, 1) \ |
+ F(Float32x4Div, 2, 1) \ |
+ F(Float32x4Min, 2, 1) \ |
+ F(Float32x4Max, 2, 1) \ |
+ F(Float32x4MinNum, 2, 1) \ |
+ F(Float32x4MaxNum, 2, 1) \ |
+ F(Float32x4Equal, 2, 1) \ |
+ F(Float32x4NotEqual, 2, 1) \ |
+ F(Float32x4LessThan, 2, 1) \ |
+ F(Float32x4LessThanOrEqual, 2, 1) \ |
+ F(Float32x4GreaterThan, 2, 1) \ |
+ F(Float32x4GreaterThanOrEqual, 2, 1) \ |
+ F(Float32x4Select, 3, 1) \ |
+ F(Float32x4Swizzle, 5, 1) \ |
+ F(Float32x4Shuffle, 6, 1) \ |
+ F(Float32x4FromInt32x4, 1, 1) \ |
+ F(Float32x4FromUint32x4, 1, 1) \ |
+ F(Float32x4FromInt32x4Bits, 1, 1) \ |
+ F(Float32x4FromUint32x4Bits, 1, 1) \ |
+ F(Float32x4FromInt16x8Bits, 1, 1) \ |
+ F(Float32x4FromUint16x8Bits, 1, 1) \ |
+ F(Float32x4FromInt8x16Bits, 1, 1) \ |
+ F(Float32x4FromUint8x16Bits, 1, 1) \ |
+ F(Float32x4Load, 2, 1) \ |
+ F(Float32x4Load1, 2, 1) \ |
+ F(Float32x4Load2, 2, 1) \ |
+ F(Float32x4Load3, 2, 1) \ |
+ F(Float32x4Store, 3, 1) \ |
+ F(Float32x4Store1, 3, 1) \ |
+ F(Float32x4Store2, 3, 1) \ |
+ F(Float32x4Store3, 3, 1) \ |
+ F(Int32x4Check, 1, 1) \ |
+ F(Int32x4ExtractLane, 2, 1) \ |
+ F(Int32x4ReplaceLane, 3, 1) \ |
+ F(Int32x4Neg, 1, 1) \ |
+ F(Int32x4Add, 2, 1) \ |
+ F(Int32x4Sub, 2, 1) \ |
+ F(Int32x4Mul, 2, 1) \ |
+ F(Int32x4Min, 2, 1) \ |
+ F(Int32x4Max, 2, 1) \ |
+ F(Int32x4And, 2, 1) \ |
+ F(Int32x4Or, 2, 1) \ |
+ F(Int32x4Xor, 2, 1) \ |
+ F(Int32x4Not, 1, 1) \ |
+ F(Int32x4ShiftLeftByScalar, 2, 1) \ |
+ F(Int32x4ShiftRightByScalar, 2, 1) \ |
+ F(Int32x4Equal, 2, 1) \ |
+ F(Int32x4NotEqual, 2, 1) \ |
+ F(Int32x4LessThan, 2, 1) \ |
+ F(Int32x4LessThanOrEqual, 2, 1) \ |
+ F(Int32x4GreaterThan, 2, 1) \ |
+ F(Int32x4GreaterThanOrEqual, 2, 1) \ |
+ F(Int32x4Select, 3, 1) \ |
+ F(Int32x4Swizzle, 5, 1) \ |
+ F(Int32x4Shuffle, 6, 1) \ |
+ F(Int32x4FromFloat32x4, 1, 1) \ |
+ F(Int32x4FromUint32x4, 1, 1) \ |
+ F(Int32x4FromFloat32x4Bits, 1, 1) \ |
+ F(Int32x4FromUint32x4Bits, 1, 1) \ |
+ F(Int32x4FromInt16x8Bits, 1, 1) \ |
+ F(Int32x4FromUint16x8Bits, 1, 1) \ |
+ F(Int32x4FromInt8x16Bits, 1, 1) \ |
+ F(Int32x4FromUint8x16Bits, 1, 1) \ |
+ F(Int32x4Load, 2, 1) \ |
+ F(Int32x4Load1, 2, 1) \ |
+ F(Int32x4Load2, 2, 1) \ |
+ F(Int32x4Load3, 2, 1) \ |
+ F(Int32x4Store, 3, 1) \ |
+ F(Int32x4Store1, 3, 1) \ |
+ F(Int32x4Store2, 3, 1) \ |
+ F(Int32x4Store3, 3, 1) \ |
+ F(Uint32x4Check, 1, 1) \ |
+ F(Uint32x4ExtractLane, 2, 1) \ |
+ F(Uint32x4ReplaceLane, 3, 1) \ |
+ F(Uint32x4Add, 2, 1) \ |
+ F(Uint32x4Sub, 2, 1) \ |
+ F(Uint32x4Mul, 2, 1) \ |
+ F(Uint32x4Min, 2, 1) \ |
+ F(Uint32x4Max, 2, 1) \ |
+ F(Uint32x4And, 2, 1) \ |
+ F(Uint32x4Or, 2, 1) \ |
+ F(Uint32x4Xor, 2, 1) \ |
+ F(Uint32x4Not, 1, 1) \ |
+ F(Uint32x4ShiftLeftByScalar, 2, 1) \ |
+ F(Uint32x4ShiftRightByScalar, 2, 1) \ |
+ F(Uint32x4Equal, 2, 1) \ |
+ F(Uint32x4NotEqual, 2, 1) \ |
+ F(Uint32x4LessThan, 2, 1) \ |
+ F(Uint32x4LessThanOrEqual, 2, 1) \ |
+ F(Uint32x4GreaterThan, 2, 1) \ |
+ F(Uint32x4GreaterThanOrEqual, 2, 1) \ |
+ F(Uint32x4Select, 3, 1) \ |
+ F(Uint32x4Swizzle, 5, 1) \ |
+ F(Uint32x4Shuffle, 6, 1) \ |
+ F(Uint32x4FromFloat32x4, 1, 1) \ |
+ F(Uint32x4FromInt32x4, 1, 1) \ |
+ F(Uint32x4FromFloat32x4Bits, 1, 1) \ |
+ F(Uint32x4FromInt32x4Bits, 1, 1) \ |
+ F(Uint32x4FromInt16x8Bits, 1, 1) \ |
+ F(Uint32x4FromUint16x8Bits, 1, 1) \ |
+ F(Uint32x4FromInt8x16Bits, 1, 1) \ |
+ F(Uint32x4FromUint8x16Bits, 1, 1) \ |
+ F(Uint32x4Load, 2, 1) \ |
+ F(Uint32x4Load1, 2, 1) \ |
+ F(Uint32x4Load2, 2, 1) \ |
+ F(Uint32x4Load3, 2, 1) \ |
+ F(Uint32x4Store, 3, 1) \ |
+ F(Uint32x4Store1, 3, 1) \ |
+ F(Uint32x4Store2, 3, 1) \ |
+ F(Uint32x4Store3, 3, 1) \ |
+ F(Bool32x4Check, 1, 1) \ |
+ F(Bool32x4ExtractLane, 2, 1) \ |
+ F(Bool32x4ReplaceLane, 3, 1) \ |
+ F(Bool32x4And, 2, 1) \ |
+ F(Bool32x4Or, 2, 1) \ |
+ F(Bool32x4Xor, 2, 1) \ |
+ F(Bool32x4Not, 1, 1) \ |
+ F(Bool32x4AnyTrue, 1, 1) \ |
+ F(Bool32x4AllTrue, 1, 1) \ |
+ F(Bool32x4Swizzle, 5, 1) \ |
+ F(Bool32x4Shuffle, 6, 1) \ |
+ F(Bool32x4Equal, 2, 1) \ |
+ F(Bool32x4NotEqual, 2, 1) \ |
+ F(Int16x8Check, 1, 1) \ |
+ F(Int16x8ExtractLane, 2, 1) \ |
+ F(Int16x8ReplaceLane, 3, 1) \ |
+ F(Int16x8Neg, 1, 1) \ |
+ F(Int16x8Add, 2, 1) \ |
+ F(Int16x8AddSaturate, 2, 1) \ |
+ F(Int16x8Sub, 2, 1) \ |
+ F(Int16x8SubSaturate, 2, 1) \ |
+ F(Int16x8Mul, 2, 1) \ |
+ F(Int16x8Min, 2, 1) \ |
+ F(Int16x8Max, 2, 1) \ |
+ F(Int16x8And, 2, 1) \ |
+ F(Int16x8Or, 2, 1) \ |
+ F(Int16x8Xor, 2, 1) \ |
+ F(Int16x8Not, 1, 1) \ |
+ F(Int16x8ShiftLeftByScalar, 2, 1) \ |
+ F(Int16x8ShiftRightByScalar, 2, 1) \ |
+ F(Int16x8Equal, 2, 1) \ |
+ F(Int16x8NotEqual, 2, 1) \ |
+ F(Int16x8LessThan, 2, 1) \ |
+ F(Int16x8LessThanOrEqual, 2, 1) \ |
+ F(Int16x8GreaterThan, 2, 1) \ |
+ F(Int16x8GreaterThanOrEqual, 2, 1) \ |
+ F(Int16x8Select, 3, 1) \ |
+ F(Int16x8Swizzle, 9, 1) \ |
+ F(Int16x8Shuffle, 10, 1) \ |
+ F(Int16x8FromUint16x8, 1, 1) \ |
+ F(Int16x8FromFloat32x4Bits, 1, 1) \ |
+ F(Int16x8FromInt32x4Bits, 1, 1) \ |
+ F(Int16x8FromUint32x4Bits, 1, 1) \ |
+ F(Int16x8FromUint16x8Bits, 1, 1) \ |
+ F(Int16x8FromInt8x16Bits, 1, 1) \ |
+ F(Int16x8FromUint8x16Bits, 1, 1) \ |
+ F(Int16x8Load, 2, 1) \ |
+ F(Int16x8Store, 3, 1) \ |
+ F(Uint16x8Check, 1, 1) \ |
+ F(Uint16x8ExtractLane, 2, 1) \ |
+ F(Uint16x8ReplaceLane, 3, 1) \ |
+ F(Uint16x8Add, 2, 1) \ |
+ F(Uint16x8AddSaturate, 2, 1) \ |
+ F(Uint16x8Sub, 2, 1) \ |
+ F(Uint16x8SubSaturate, 2, 1) \ |
+ F(Uint16x8Mul, 2, 1) \ |
+ F(Uint16x8Min, 2, 1) \ |
+ F(Uint16x8Max, 2, 1) \ |
+ F(Uint16x8And, 2, 1) \ |
+ F(Uint16x8Or, 2, 1) \ |
+ F(Uint16x8Xor, 2, 1) \ |
+ F(Uint16x8Not, 1, 1) \ |
+ F(Uint16x8ShiftLeftByScalar, 2, 1) \ |
+ F(Uint16x8ShiftRightByScalar, 2, 1) \ |
+ F(Uint16x8Equal, 2, 1) \ |
+ F(Uint16x8NotEqual, 2, 1) \ |
+ F(Uint16x8LessThan, 2, 1) \ |
+ F(Uint16x8LessThanOrEqual, 2, 1) \ |
+ F(Uint16x8GreaterThan, 2, 1) \ |
+ F(Uint16x8GreaterThanOrEqual, 2, 1) \ |
+ F(Uint16x8Select, 3, 1) \ |
+ F(Uint16x8Swizzle, 9, 1) \ |
+ F(Uint16x8Shuffle, 10, 1) \ |
+ F(Uint16x8FromInt16x8, 1, 1) \ |
+ F(Uint16x8FromFloat32x4Bits, 1, 1) \ |
+ F(Uint16x8FromInt32x4Bits, 1, 1) \ |
+ F(Uint16x8FromUint32x4Bits, 1, 1) \ |
+ F(Uint16x8FromInt16x8Bits, 1, 1) \ |
+ F(Uint16x8FromInt8x16Bits, 1, 1) \ |
+ F(Uint16x8FromUint8x16Bits, 1, 1) \ |
+ F(Uint16x8Load, 2, 1) \ |
+ F(Uint16x8Store, 3, 1) \ |
+ F(Bool16x8Check, 1, 1) \ |
+ F(Bool16x8ExtractLane, 2, 1) \ |
+ F(Bool16x8ReplaceLane, 3, 1) \ |
+ F(Bool16x8And, 2, 1) \ |
+ F(Bool16x8Or, 2, 1) \ |
+ F(Bool16x8Xor, 2, 1) \ |
+ F(Bool16x8Not, 1, 1) \ |
+ F(Bool16x8AnyTrue, 1, 1) \ |
+ F(Bool16x8AllTrue, 1, 1) \ |
+ F(Bool16x8Swizzle, 9, 1) \ |
+ F(Bool16x8Shuffle, 10, 1) \ |
+ F(Bool16x8Equal, 2, 1) \ |
+ F(Bool16x8NotEqual, 2, 1) \ |
+ F(Int8x16Check, 1, 1) \ |
+ F(Int8x16ExtractLane, 2, 1) \ |
+ F(Int8x16ReplaceLane, 3, 1) \ |
+ F(Int8x16Neg, 1, 1) \ |
+ F(Int8x16Add, 2, 1) \ |
+ F(Int8x16AddSaturate, 2, 1) \ |
+ F(Int8x16Sub, 2, 1) \ |
+ F(Int8x16SubSaturate, 2, 1) \ |
+ F(Int8x16Mul, 2, 1) \ |
+ F(Int8x16Min, 2, 1) \ |
+ F(Int8x16Max, 2, 1) \ |
+ F(Int8x16And, 2, 1) \ |
+ F(Int8x16Or, 2, 1) \ |
+ F(Int8x16Xor, 2, 1) \ |
+ F(Int8x16Not, 1, 1) \ |
+ F(Int8x16ShiftLeftByScalar, 2, 1) \ |
+ F(Int8x16ShiftRightByScalar, 2, 1) \ |
+ F(Int8x16Equal, 2, 1) \ |
+ F(Int8x16NotEqual, 2, 1) \ |
+ F(Int8x16LessThan, 2, 1) \ |
+ F(Int8x16LessThanOrEqual, 2, 1) \ |
+ F(Int8x16GreaterThan, 2, 1) \ |
+ F(Int8x16GreaterThanOrEqual, 2, 1) \ |
+ F(Int8x16Select, 3, 1) \ |
+ F(Int8x16Swizzle, 17, 1) \ |
+ F(Int8x16Shuffle, 18, 1) \ |
+ F(Int8x16FromUint8x16, 1, 1) \ |
+ F(Int8x16FromFloat32x4Bits, 1, 1) \ |
+ F(Int8x16FromInt32x4Bits, 1, 1) \ |
+ F(Int8x16FromUint32x4Bits, 1, 1) \ |
+ F(Int8x16FromInt16x8Bits, 1, 1) \ |
+ F(Int8x16FromUint16x8Bits, 1, 1) \ |
+ F(Int8x16FromUint8x16Bits, 1, 1) \ |
+ F(Int8x16Load, 2, 1) \ |
+ F(Int8x16Store, 3, 1) \ |
+ F(Uint8x16Check, 1, 1) \ |
+ F(Uint8x16ExtractLane, 2, 1) \ |
+ F(Uint8x16ReplaceLane, 3, 1) \ |
+ F(Uint8x16Add, 2, 1) \ |
+ F(Uint8x16AddSaturate, 2, 1) \ |
+ F(Uint8x16Sub, 2, 1) \ |
+ F(Uint8x16SubSaturate, 2, 1) \ |
+ F(Uint8x16Mul, 2, 1) \ |
+ F(Uint8x16Min, 2, 1) \ |
+ F(Uint8x16Max, 2, 1) \ |
+ F(Uint8x16And, 2, 1) \ |
+ F(Uint8x16Or, 2, 1) \ |
+ F(Uint8x16Xor, 2, 1) \ |
+ F(Uint8x16Not, 1, 1) \ |
+ F(Uint8x16ShiftLeftByScalar, 2, 1) \ |
+ F(Uint8x16ShiftRightByScalar, 2, 1) \ |
+ F(Uint8x16Equal, 2, 1) \ |
+ F(Uint8x16NotEqual, 2, 1) \ |
+ F(Uint8x16LessThan, 2, 1) \ |
+ F(Uint8x16LessThanOrEqual, 2, 1) \ |
+ F(Uint8x16GreaterThan, 2, 1) \ |
+ F(Uint8x16GreaterThanOrEqual, 2, 1) \ |
+ F(Uint8x16Select, 3, 1) \ |
+ F(Uint8x16Swizzle, 17, 1) \ |
+ F(Uint8x16Shuffle, 18, 1) \ |
+ F(Uint8x16FromInt8x16, 1, 1) \ |
+ F(Uint8x16FromFloat32x4Bits, 1, 1) \ |
+ F(Uint8x16FromInt32x4Bits, 1, 1) \ |
+ F(Uint8x16FromUint32x4Bits, 1, 1) \ |
+ F(Uint8x16FromInt16x8Bits, 1, 1) \ |
+ F(Uint8x16FromUint16x8Bits, 1, 1) \ |
+ F(Uint8x16FromInt8x16Bits, 1, 1) \ |
+ F(Uint8x16Load, 2, 1) \ |
+ F(Uint8x16Store, 3, 1) \ |
+ F(Bool8x16Check, 1, 1) \ |
+ F(Bool8x16ExtractLane, 2, 1) \ |
+ F(Bool8x16ReplaceLane, 3, 1) \ |
+ F(Bool8x16And, 2, 1) \ |
+ F(Bool8x16Or, 2, 1) \ |
+ F(Bool8x16Xor, 2, 1) \ |
+ F(Bool8x16Not, 1, 1) \ |
+ F(Bool8x16AnyTrue, 1, 1) \ |
+ F(Bool8x16AllTrue, 1, 1) \ |
+ F(Bool8x16Swizzle, 17, 1) \ |
+ F(Bool8x16Shuffle, 18, 1) \ |
+ F(Bool8x16Equal, 2, 1) \ |
+ F(Bool8x16NotEqual, 2, 1) |
#define FOR_EACH_INTRINSIC_STRINGS(F) \ |
@@ -1182,6 +1190,26 @@ class Runtime : public AllStatic { |
}; |
+struct RuntimeCallStats { |
+#define CALL_RUNTIME_COUNTER(name, nargs, ressize) \ |
+ uint32_t Count_Runtime_##name; \ |
+ base::TimeDelta Time_Runtime_##name; |
+ FOR_EACH_INTRINSIC(CALL_RUNTIME_COUNTER) |
+#undef CALL_RUNTIME_COUNTER |
+ |
+ // Dummy counter for the unexpected stub miss. |
+ uint32_t Count_UnexpectedStubMiss; |
+ base::TimeDelta Time_UnexpectedStubMiss; |
+ |
+ bool in_runtime_call = false; |
+ |
+ void Reset(); |
+ void Print(std::ostream& os); |
+ |
+ RuntimeCallStats() { Reset(); } |
+}; |
+ |
+ |
class RuntimeState { |
public: |
unibrow::Mapping<unibrow::ToUppercase, 128>* to_upper_mapping() { |
@@ -1200,11 +1228,15 @@ class RuntimeState { |
redirected_intrinsic_functions_.Reset(redirected_intrinsic_functions); |
} |
+ RuntimeCallStats* runtime_call_stats() { return &runtime_call_stats_; } |
+ |
private: |
RuntimeState() {} |
unibrow::Mapping<unibrow::ToUppercase, 128> to_upper_mapping_; |
unibrow::Mapping<unibrow::ToLowercase, 128> to_lower_mapping_; |
+ RuntimeCallStats runtime_call_stats_; |
+ |
base::SmartArrayPointer<Runtime::Function> redirected_intrinsic_functions_; |
friend class Isolate; |