OpCodeUtil.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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 OpCodeUtil
  9. {
  10. public:
  11. static char16 const * GetOpCodeName(OpCode op);
  12. static bool IsCallOp(OpCode op);
  13. static bool IsProfiledCallOp(OpCode op);
  14. static bool IsProfiledCallOpWithICIndex(OpCode op);
  15. static bool IsProfiledReturnTypeCallOp(OpCode op);
  16. // OpCode conversion functions
  17. static void ConvertOpToNonProfiled(OpCode& op);
  18. static void ConvertNonCallOpToProfiled(OpCode& op);
  19. static void ConvertNonCallOpToProfiledWithICIndex(OpCode& op);
  20. static void ConvertNonCallOpToNonProfiled(OpCode& op);
  21. static void ConvertNonCallOpToNonProfiledWithICIndex(OpCode& op);
  22. static OpCode ConvertProfiledCallOpToNonProfiled(OpCode op);
  23. static OpCode ConvertProfiledReturnTypeCallOpToNonProfiled(OpCode op);
  24. static OpCode ConvertCallOpToProfiled(OpCode op, bool withICIndex = false);
  25. static OpCode ConvertCallOpToProfiledReturnType(OpCode op);
  26. static bool IsValidByteCodeOpcode(OpCode op);
  27. static bool IsValidOpcode(OpCode op);
  28. static bool IsPrefixOpcode(OpCode op);
  29. static bool IsSmallEncodedOpcode(OpCode op);
  30. static uint EncodedSize(OpCode op, LayoutSize layoutSize);
  31. static OpLayoutType GetOpCodeLayout(OpCode op);
  32. private:
  33. #if DBG_DUMP || ENABLE_DEBUG_CONFIG_OPTIONS
  34. static char16 const * const OpCodeNames[(int)Js::OpCode::MaxByteSizedOpcodes + 1];
  35. static char16 const * const ExtendedOpCodeNames[];
  36. static char16 const * const BackendOpCodeNames[];
  37. #endif
  38. static OpLayoutType const OpCodeLayouts[];
  39. static OpLayoutType const ExtendedOpCodeLayouts[];
  40. static OpLayoutType const BackendOpCodeLayouts[];
  41. #if DBG
  42. static OpCode DebugConvertProfiledCallToNonProfiled(OpCode op);
  43. static OpCode DebugConvertProfiledReturnTypeCallToNonProfiled(OpCode op);
  44. #endif
  45. };
  46. };