ScriptContextOptimizationOverrideInfo.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. #pragma once
  6. namespace Js
  7. {
  8. class ScriptContextOptimizationOverrideInfo
  9. {
  10. public:
  11. ScriptContextOptimizationOverrideInfo();
  12. ~ScriptContextOptimizationOverrideInfo();
  13. static DWORD GetSideEffectsOffset() { return offsetof(ScriptContextOptimizationOverrideInfo, sideEffects); }
  14. static DWORD GetArraySetElementFastPathVtableOffset() { return offsetof(ScriptContextOptimizationOverrideInfo, arraySetElementFastPathVtable); }
  15. static DWORD GetIntArraySetElementFastPathVtableOffset() { return offsetof(ScriptContextOptimizationOverrideInfo, intArraySetElementFastPathVtable); }
  16. static DWORD GetFloatArraySetElementFastPathVtableOffset() { return offsetof(ScriptContextOptimizationOverrideInfo, floatArraySetElementFastPathVtable); }
  17. void SetSideEffects(SideEffects se);
  18. SideEffects GetSideEffects() { return sideEffects; }
  19. intptr_t GetAddressOfSideEffects() const { return (intptr_t)&sideEffects; }
  20. bool IsEnabledArraySetElementFastPath() const;
  21. void DisableArraySetElementFastPath();
  22. INT_PTR GetArraySetElementFastPathVtable() const;
  23. INT_PTR GetArraySetElementFastPathVtableAddr() const;
  24. INT_PTR GetIntArraySetElementFastPathVtableAddr() const;
  25. INT_PTR GetFloatArraySetElementFastPathVtableAddr() const;
  26. void * GetAddressOfArraySetElementFastPathVtable();
  27. void * GetAddressOfIntArraySetElementFastPathVtable();
  28. void * GetAddressOfFloatArraySetElementFastPathVtable();
  29. void Merge(ScriptContextOptimizationOverrideInfo * info);
  30. // Use a small integer so JIT'ed code can encode in a smaller instruction
  31. static const INT_PTR InvalidVtable = (INT_PTR)1;
  32. private:
  33. // Optimization overrides
  34. SideEffects sideEffects;
  35. INT_PTR arraySetElementFastPathVtable;
  36. INT_PTR intArraySetElementFastPathVtable;
  37. INT_PTR floatArraySetElementFastPathVtable;
  38. // Cross site tracking
  39. ScriptContextOptimizationOverrideInfo * crossSiteRoot;
  40. ScriptContextOptimizationOverrideInfo * crossSitePrev;
  41. ScriptContextOptimizationOverrideInfo * crossSiteNext;
  42. template <typename Fn>
  43. void ForEachCrossSiteInfo(Fn fn);
  44. template <typename Fn>
  45. void ForEachEditingCrossSiteInfo(Fn fn);
  46. void Update(ScriptContextOptimizationOverrideInfo * info);
  47. void CopyTo(ScriptContextOptimizationOverrideInfo * info);
  48. void Insert(ScriptContextOptimizationOverrideInfo * info);
  49. #if DBG
  50. void Verify();
  51. #endif
  52. };
  53. };