AtomicsObject.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. // Implements Atomics according to http://tc39.github.io/ecmascript_sharedmem/shmem.html
  6. //----------------------------------------------------------------------------
  7. #pragma once
  8. namespace Js
  9. {
  10. class AtomicsObject
  11. {
  12. public:
  13. class EntryInfo
  14. {
  15. public:
  16. static FunctionInfo Add;
  17. static FunctionInfo And;
  18. static FunctionInfo CompareExchange;
  19. static FunctionInfo Exchange;
  20. static FunctionInfo IsLockFree;
  21. static FunctionInfo Load;
  22. static FunctionInfo Or;
  23. static FunctionInfo Store;
  24. static FunctionInfo Sub;
  25. static FunctionInfo Wait;
  26. static FunctionInfo Notify;
  27. static FunctionInfo Xor;
  28. };
  29. static Var EntryAdd(RecyclableObject* function, CallInfo callInfo, ...);
  30. static Var EntryAnd(RecyclableObject* function, CallInfo callInfo, ...);
  31. static Var EntryCompareExchange(RecyclableObject* function, CallInfo callInfo, ...);
  32. static Var EntryExchange(RecyclableObject* function, CallInfo callInfo, ...);
  33. static Var EntryIsLockFree(RecyclableObject* function, CallInfo callInfo, ...);
  34. static Var EntryLoad(RecyclableObject* function, CallInfo callInfo, ...);
  35. static Var EntryOr(RecyclableObject* function, CallInfo callInfo, ...);
  36. static Var EntryStore(RecyclableObject* function, CallInfo callInfo, ...);
  37. static Var EntrySub(RecyclableObject* function, CallInfo callInfo, ...);
  38. static Var EntryWait(RecyclableObject* function, CallInfo callInfo, ...);
  39. static Var EntryNotify(RecyclableObject* function, CallInfo callInfo, ...);
  40. static Var EntryXor(RecyclableObject* function, CallInfo callInfo, ...);
  41. private:
  42. static Var ValidateSharedIntegerTypedArray(Var typedArray, ScriptContext *scriptContext, bool onlyInt32);
  43. static uint32 ValidateAtomicAccess(Var typedArray, Var index, ScriptContext *scriptContext);
  44. static TypedArrayBase * ValidateAndGetTypedArray(Var typedArray, Var index, __out uint32 *accessIndex, ScriptContext *scriptContext, bool onlyInt32 = false);
  45. };
  46. }