| Index: src/runtime/runtime.h
|
| diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h
|
| index bf72469827938844941b8adf52412022474b662a..ae8943e02b3998495a194ea5b0e114e9a32dadcf 100644
|
| --- a/src/runtime/runtime.h
|
| +++ b/src/runtime/runtime.h
|
| @@ -53,6 +53,19 @@ namespace internal {
|
| F(FastOneByteArrayJoin, 2, 1)
|
|
|
|
|
| +#define FOR_EACH_INTRINSIC_ATOMICS(F) \
|
| + F(AtomicsCompareExchange, 4, 1) \
|
| + F(AtomicsLoad, 2, 1) \
|
| + F(AtomicsStore, 3, 1) \
|
| + F(AtomicsAdd, 3, 1) \
|
| + F(AtomicsSub, 3, 1) \
|
| + F(AtomicsAnd, 3, 1) \
|
| + F(AtomicsOr, 3, 1) \
|
| + F(AtomicsXor, 3, 1) \
|
| + F(AtomicsExchange, 3, 1) \
|
| + F(AtomicsIsLockFree, 1, 1)
|
| +
|
| +
|
| #define FOR_EACH_INTRINSIC_CLASSES(F) \
|
| F(ThrowNonMethodError, 0, 1) \
|
| F(ThrowUnsupportedSuperError, 0, 1) \
|
| @@ -654,6 +667,8 @@ namespace internal {
|
| F(TypedArraySetFastCases, 3, 1) \
|
| F(TypedArrayMaxSizeInHeap, 0, 1) \
|
| F(IsTypedArray, 1, 1) \
|
| + F(IsSharedTypedArray, 1, 1) \
|
| + F(IsSharedIntegerTypedArray, 1, 1) \
|
| F(DataViewInitialize, 4, 1) \
|
| F(DataViewGetUint8, 3, 1) \
|
| F(DataViewGetInt8, 3, 1) \
|
| @@ -686,6 +701,7 @@ namespace internal {
|
|
|
| #define FOR_EACH_INTRINSIC_RETURN_OBJECT(F) \
|
| FOR_EACH_INTRINSIC_ARRAY(F) \
|
| + FOR_EACH_INTRINSIC_ATOMICS(F) \
|
| FOR_EACH_INTRINSIC_CLASSES(F) \
|
| FOR_EACH_INTRINSIC_COLLECTIONS(F) \
|
| FOR_EACH_INTRINSIC_COMPILER(F) \
|
| @@ -873,6 +889,8 @@ class Runtime : public AllStatic {
|
|
|
| static MaybeHandle<JSArray> GetInternalProperties(Isolate* isolate,
|
| Handle<Object>);
|
| +
|
| + static bool AtomicIsLockFree(uint32_t size);
|
| };
|
|
|
|
|
| @@ -889,6 +907,29 @@ class DeclareGlobalsNativeFlag : public BitField<bool, 1, 1> {};
|
| STATIC_ASSERT(LANGUAGE_END == 3);
|
| class DeclareGlobalsLanguageMode : public BitField<LanguageMode, 2, 2> {};
|
|
|
| +//---------------------------------------------------------------------------
|
| +// Inline functions
|
| +
|
| +// Assume that 32-bit architectures don't have 64-bit atomic ops.
|
| +// TODO(binji): can we do better here?
|
| +#if V8_TARGET_ARCH_64_BIT && V8_HOST_ARCH_64_BIT
|
| +
|
| +#define ATOMICS_REQUIRE_LOCK_64_BIT 0
|
| +
|
| +inline bool Runtime::AtomicIsLockFree(uint32_t size) {
|
| + return size == 1 || size == 2 || size == 4 || size == 8;
|
| +}
|
| +
|
| +#else
|
| +
|
| +#define ATOMICS_REQUIRE_LOCK_64_BIT 1
|
| +
|
| +inline bool Runtime::AtomicIsLockFree(uint32_t size) {
|
| + return size == 1 || size == 2 || size == 4;
|
| +}
|
| +
|
| +#endif
|
| +
|
| } // namespace internal
|
| } // namespace v8
|
|
|
|
|