blob: ed91d7056e7970dfbda146d9015eb6d106617a93 [file]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
// Implements Atomics according to http://tc39.github.io/ecmascript_sharedmem/shmem.html
//----------------------------------------------------------------------------
#pragma once
namespace Js
{
class AtomicsObject
{
public:
class EntryInfo
{
public:
static FunctionInfo Add;
static FunctionInfo And;
static FunctionInfo CompareExchange;
static FunctionInfo Exchange;
static FunctionInfo IsLockFree;
static FunctionInfo Load;
static FunctionInfo Or;
static FunctionInfo Store;
static FunctionInfo Sub;
static FunctionInfo Wait;
static FunctionInfo Wake;
static FunctionInfo Xor;
};
static Var EntryAdd(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryAnd(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryCompareExchange(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryExchange(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryIsLockFree(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryLoad(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryOr(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryStore(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntrySub(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryWait(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryWake(RecyclableObject* function, CallInfo callInfo, ...);
static Var EntryXor(RecyclableObject* function, CallInfo callInfo, ...);
private:
static Var ValidateSharedIntegerTypedArray(Var typedArray, ScriptContext *scriptContext, bool onlyInt32);
static uint32 ValidateAtomicAccess(Var typedArray, Var index, ScriptContext *scriptContext);
static TypedArrayBase * ValidateAndGetTypedArray(Var typedArray, Var index, __out uint32 *accessIndex, ScriptContext *scriptContext, bool onlyInt32 = false);
};
}