diff options
Diffstat (limited to 'chromium/v8/src/common/globals.h')
-rw-r--r-- | chromium/v8/src/common/globals.h | 76 |
1 files changed, 48 insertions, 28 deletions
diff --git a/chromium/v8/src/common/globals.h b/chromium/v8/src/common/globals.h index 4309b702347..dcb1d4e13d4 100644 --- a/chromium/v8/src/common/globals.h +++ b/chromium/v8/src/common/globals.h @@ -68,10 +68,13 @@ constexpr int GB = MB * 1024; #define V8_EMBEDDED_CONSTANT_POOL false #endif -#ifdef V8_TARGET_ARCH_ARM -// Set stack limit lower for ARM than for other architectures because -// stack allocating MacroAssembler takes 120K bytes. -// See issue crbug.com/405338 +#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 +// Set stack limit lower for ARM and ARM64 than for other architectures because: +// - on Arm stack allocating MacroAssembler takes 120K bytes. +// See issue crbug.com/405338 +// - on Arm64 when running in single-process mode for Android WebView, when +// initializing V8 we already have a large stack and so have to set the +// limit lower. See issue crbug.com/v8/10575 #define V8_DEFAULT_STACK_SIZE_KB 864 #else // Slightly less than 1MB, since Windows' default stack size for @@ -151,6 +154,8 @@ constexpr int kMaxInt16 = (1 << 15) - 1; constexpr int kMinInt16 = -(1 << 15); constexpr int kMaxUInt16 = (1 << 16) - 1; constexpr int kMinUInt16 = 0; +constexpr int kMaxInt31 = kMaxInt / 2; +constexpr int kMinInt31 = kMinInt / 2; constexpr uint32_t kMaxUInt32 = 0xFFFFFFFFu; constexpr int kMinUInt32 = 0; @@ -327,7 +332,7 @@ constexpr uint64_t kQuietNaNMask = static_cast<uint64_t>(0xfff) << 51; // Code-point values in Unicode 4.0 are 21 bits wide. // Code units in UTF-16 are 16 bits wide. using uc16 = uint16_t; -using uc32 = int32_t; +using uc32 = uint32_t; constexpr int kOneByteSize = kCharSize; constexpr int kUC16Size = sizeof(uc16); // NOLINT @@ -1337,31 +1342,46 @@ class BinaryOperationFeedback { }; // Type feedback is encoded in such a way that, we can combine the feedback -// at different points by performing an 'OR' operation. Type feedback moves -// to a more generic type when we combine feedback. -// -// kSignedSmall -> kNumber -> kNumberOrOddball -> kAny -// kReceiver -> kReceiverOrNullOrUndefined -> kAny -// kInternalizedString -> kString -> kAny -// kSymbol -> kAny -// kBigInt -> kAny -// +// at different points by performing an 'OR' operation. // This is distinct from BinaryOperationFeedback on purpose, because the // feedback that matters differs greatly as well as the way it is consumed. class CompareOperationFeedback { - public: enum { - kNone = 0x000, - kSignedSmall = 0x001, - kNumber = 0x003, - kNumberOrOddball = 0x007, - kInternalizedString = 0x008, - kString = 0x018, - kSymbol = 0x020, - kBigInt = 0x040, - kReceiver = 0x080, - kReceiverOrNullOrUndefined = 0x180, - kAny = 0x1ff + kSignedSmallFlag = 1 << 0, + kOtherNumberFlag = 1 << 1, + kBooleanFlag = 1 << 2, + kNullOrUndefinedFlag = 1 << 3, + kInternalizedStringFlag = 1 << 4, + kOtherStringFlag = 1 << 5, + kSymbolFlag = 1 << 6, + kBigIntFlag = 1 << 7, + kReceiverFlag = 1 << 8, + kAnyMask = 0x1FF, + }; + + public: + enum Type { + kNone = 0, + + kBoolean = kBooleanFlag, + kNullOrUndefined = kNullOrUndefinedFlag, + kOddball = kBoolean | kNullOrUndefined, + + kSignedSmall = kSignedSmallFlag, + kNumber = kSignedSmall | kOtherNumberFlag, + kNumberOrBoolean = kNumber | kBoolean, + kNumberOrOddball = kNumber | kOddball, + + kInternalizedString = kInternalizedStringFlag, + kString = kInternalizedString | kOtherStringFlag, + + kReceiver = kReceiverFlag, + kReceiverOrNullOrUndefined = kReceiver | kNullOrUndefined, + + kBigInt = kBigIntFlag, + kSymbol = kSymbolFlag, + + kAny = kAnyMask, }; }; @@ -1592,8 +1612,8 @@ enum class LoadSensitivity { V(TrapDataSegmentDropped) \ V(TrapElemSegmentDropped) \ V(TrapTableOutOfBounds) \ - V(TrapBrOnExnNullRef) \ - V(TrapRethrowNullRef) \ + V(TrapBrOnExnNull) \ + V(TrapRethrowNull) \ V(TrapNullDereference) \ V(TrapIllegalCast) \ V(TrapArrayOutOfBounds) |