LibraryFunction.h 12 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved.
  4. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  5. //-------------------------------------------------------------------------------------------------------
  6. /*
  7. * These are javascript library functions that might be inlined
  8. * by the JIT.
  9. *
  10. * Notes:
  11. * - the argc is the number of args to pass to InlineXXX call, e.g. 2 for Math.pow and 2 for String.CharAt.
  12. * - TODO: consider having dst/src1/src2 in separate columns rather than bitmask, this seems to be better for design but we won't be able to see 'all float' by single check.
  13. * - TODO: enable string inlines when string type spec is available
  14. *
  15. * target name argc flags EntryInfo
  16. */
  17. LIBRARY_FUNCTION(Math, Abs, 1, BIF_TypeSpecSrcAndDstToFloatOrInt , Math::EntryInfo::Abs)
  18. LIBRARY_FUNCTION(Math, Acos, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Acos)
  19. LIBRARY_FUNCTION(Math, Asin, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Asin)
  20. LIBRARY_FUNCTION(Math, Atan, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Atan)
  21. LIBRARY_FUNCTION(Math, Atan2, 2, BIF_TypeSpecAllToFloat , Math::EntryInfo::Atan2)
  22. LIBRARY_FUNCTION(Math, Ceil, 1, BIF_TypeSpecDstToInt | BIF_TypeSpecSrc1ToFloat , Math::EntryInfo::Ceil)
  23. LIBRARY_FUNCTION(JavascriptString, At, 2, BIF_UseSrc0 , JavascriptString::EntryInfo::At)
  24. LIBRARY_FUNCTION(JavascriptString, CodePointAt, 2, BIF_TypeSpecSrc2ToInt | BIF_UseSrc0 , JavascriptString::EntryInfo::CodePointAt)
  25. LIBRARY_FUNCTION(JavascriptString, CharAt, 2, BIF_UseSrc0 , JavascriptString::EntryInfo::CharAt )
  26. LIBRARY_FUNCTION(JavascriptString, CharCodeAt, 2, BIF_UseSrc0 , JavascriptString::EntryInfo::CharCodeAt )
  27. LIBRARY_FUNCTION(JavascriptString, Concat, 15, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptString::EntryInfo::Concat )
  28. LIBRARY_FUNCTION(JavascriptString, FromCharCode, 1, BIF_None , JavascriptString::EntryInfo::FromCharCode)
  29. LIBRARY_FUNCTION(JavascriptString, FromCodePoint, 1, BIF_None , JavascriptString::EntryInfo::FromCodePoint)
  30. LIBRARY_FUNCTION(JavascriptString, IndexOf, 3, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptString::EntryInfo::IndexOf)
  31. LIBRARY_FUNCTION(JavascriptString, LastIndexOf, 3, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptString::EntryInfo::LastIndexOf)
  32. LIBRARY_FUNCTION(JavascriptString, Link, 2, BIF_UseSrc0 , JavascriptString::EntryInfo::Link)
  33. LIBRARY_FUNCTION(JavascriptString, Match, 2, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::Match)
  34. LIBRARY_FUNCTION(JavascriptString, Replace, 3, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::Replace)
  35. LIBRARY_FUNCTION(JavascriptString, Search, 2, BIF_UseSrc0 , JavascriptString::EntryInfo::Search)
  36. LIBRARY_FUNCTION(JavascriptString, Slice, 3, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptString::EntryInfo::Slice )
  37. LIBRARY_FUNCTION(JavascriptString, Split, 3, BIF_UseSrc0 | BIF_VariableArgsNumber | BIF_IgnoreDst , JavascriptString::EntryInfo::Split)
  38. LIBRARY_FUNCTION(JavascriptString, Substr, 3, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptString::EntryInfo::Substr)
  39. LIBRARY_FUNCTION(JavascriptString, Substring, 3, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptString::EntryInfo::Substring)
  40. LIBRARY_FUNCTION(JavascriptString, ToLocaleLowerCase, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::ToLocaleLowerCase)
  41. LIBRARY_FUNCTION(JavascriptString, ToLocaleUpperCase, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::ToLocaleUpperCase)
  42. LIBRARY_FUNCTION(JavascriptString, ToLowerCase, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::ToLowerCase)
  43. LIBRARY_FUNCTION(JavascriptString, ToUpperCase, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::ToUpperCase)
  44. LIBRARY_FUNCTION(JavascriptString, Trim, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::Trim)
  45. LIBRARY_FUNCTION(JavascriptString, TrimLeft, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::TrimLeft)
  46. LIBRARY_FUNCTION(JavascriptString, TrimStart, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::TrimStart)
  47. LIBRARY_FUNCTION(JavascriptString, TrimRight, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::TrimRight)
  48. LIBRARY_FUNCTION(JavascriptString, TrimEnd, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptString::EntryInfo::TrimEnd)
  49. LIBRARY_FUNCTION(Math, Cos, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Cos)
  50. LIBRARY_FUNCTION(Math, Exp, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Exp)
  51. LIBRARY_FUNCTION(Math, Floor, 1, BIF_TypeSpecDstToInt | BIF_TypeSpecSrc1ToFloat , Math::EntryInfo::Floor)
  52. LIBRARY_FUNCTION(Math, Log, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Log)
  53. LIBRARY_FUNCTION(Math, Max, 2, BIF_TypeSpecSrcAndDstToFloatOrInt , Math::EntryInfo::Max)
  54. LIBRARY_FUNCTION(Math, Min, 2, BIF_TypeSpecSrcAndDstToFloatOrInt , Math::EntryInfo::Min)
  55. LIBRARY_FUNCTION(Math, Pow, 2, BIF_TypeSpecSrcAndDstToFloatOrInt , Math::EntryInfo::Pow)
  56. LIBRARY_FUNCTION(Math, Imul, 2, BIF_TypeSpecAllToInt , Math::EntryInfo::Imul)
  57. LIBRARY_FUNCTION(Math, Clz32, 1, BIF_TypeSpecAllToInt , Math::EntryInfo::Clz32)
  58. LIBRARY_FUNCTION(JavascriptArray, Push, 2, BIF_UseSrc0 | BIF_IgnoreDst | BIF_TypeSpecSrc1ToFloatOrInt, JavascriptArray::EntryInfo::Push)
  59. LIBRARY_FUNCTION(JavascriptArray, Pop, 1, BIF_UseSrc0 | BIF_TypeSpecDstToFloatOrInt , JavascriptArray::EntryInfo::Pop)
  60. LIBRARY_FUNCTION(Math, Random, 0, BIF_TypeSpecDstToFloat , Math::EntryInfo::Random)
  61. LIBRARY_FUNCTION(Math, Round, 1, BIF_TypeSpecDstToInt | BIF_TypeSpecSrc1ToFloat , Math::EntryInfo::Round)
  62. LIBRARY_FUNCTION(Math, Sin, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Sin)
  63. LIBRARY_FUNCTION(Math, Sqrt, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Sqrt)
  64. LIBRARY_FUNCTION(Math, Tan, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Tan)
  65. LIBRARY_FUNCTION(JavascriptArray, At, 2, BIF_UseSrc0 , JavascriptArray::EntryInfo::At)
  66. LIBRARY_FUNCTION(JavascriptArray, Concat, 15, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptArray::EntryInfo::Concat)
  67. LIBRARY_FUNCTION(JavascriptArray, IndexOf, 2, BIF_UseSrc0 , JavascriptArray::EntryInfo::IndexOf)
  68. LIBRARY_FUNCTION(JavascriptArray, Includes, 2, BIF_UseSrc0 , JavascriptArray::EntryInfo::Includes)
  69. LIBRARY_FUNCTION(JavascriptArray, IsArray, 1, BIF_None , JavascriptArray::EntryInfo::IsArray)
  70. LIBRARY_FUNCTION(JavascriptArray, Join, 2, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptArray::EntryInfo::Join)
  71. LIBRARY_FUNCTION(JavascriptArray, LastIndexOf, 3, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptArray::EntryInfo::LastIndexOf)
  72. LIBRARY_FUNCTION(JavascriptArray, Reverse, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptArray::EntryInfo::Reverse)
  73. LIBRARY_FUNCTION(JavascriptArray, Shift, 1, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptArray::EntryInfo::Shift)
  74. LIBRARY_FUNCTION(JavascriptArray, Slice, 3, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptArray::EntryInfo::Slice)
  75. LIBRARY_FUNCTION(JavascriptArray, Splice, 15, BIF_UseSrc0 | BIF_VariableArgsNumber | BIF_IgnoreDst , JavascriptArray::EntryInfo::Splice)
  76. LIBRARY_FUNCTION(JavascriptArray, Unshift, 15, BIF_UseSrc0 | BIF_VariableArgsNumber | BIF_IgnoreDst , JavascriptArray::EntryInfo::Unshift)
  77. LIBRARY_FUNCTION(JavascriptFunction, Apply, 3, BIF_UseSrc0 | BIF_IgnoreDst | BIF_VariableArgsNumber , JavascriptFunction::EntryInfo::Apply)
  78. LIBRARY_FUNCTION(JavascriptFunction, Call, 15, BIF_UseSrc0 | BIF_IgnoreDst | BIF_VariableArgsNumber , JavascriptFunction::EntryInfo::Call)
  79. LIBRARY_FUNCTION(EngineInterfaceObject, CallInstanceFunction, 15, BIF_UseSrc0 | BIF_IgnoreDst | BIF_VariableArgsNumber , EngineInterfaceObject::EntryInfo::CallInstanceFunction)
  80. LIBRARY_FUNCTION(GlobalObject, ParseInt, 1, BIF_IgnoreDst , GlobalObject::EntryInfo::ParseInt)
  81. LIBRARY_FUNCTION(JavascriptRegExp, Exec, 2, BIF_UseSrc0 | BIF_IgnoreDst , JavascriptRegExp::EntryInfo::Exec)
  82. LIBRARY_FUNCTION(JavascriptRegExp, SymbolSearch, 2, BIF_UseSrc0 , JavascriptRegExp::EntryInfo::SymbolSearch)
  83. LIBRARY_FUNCTION(Math, Fround, 1, BIF_TypeSpecUnaryToFloat , Math::EntryInfo::Fround)
  84. LIBRARY_FUNCTION(JavascriptString, PadStart, 2, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptString::EntryInfo::PadStart)
  85. LIBRARY_FUNCTION(JavascriptString, PadEnd, 2, BIF_UseSrc0 | BIF_VariableArgsNumber , JavascriptString::EntryInfo::PadEnd)
  86. LIBRARY_FUNCTION(JavascriptObject, HasOwnProperty, 2, BIF_UseSrc0 , JavascriptObject::EntryInfo::HasOwnProperty)
  87. LIBRARY_FUNCTION(JavascriptObject, HasOwn, 3, BIF_None , JavascriptObject::EntryInfo::HasOwn)
  88. // Note: 1st column is currently used only for debug tracing.