SIMDFloat64x2Lib.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. #if ENABLE_NATIVE_CODEGEN
  7. namespace Js {
  8. class SIMDFloat64x2Lib
  9. {
  10. public:
  11. class EntryInfo
  12. {
  13. public:
  14. static FunctionInfo Float64x2;
  15. static FunctionInfo Check;
  16. static FunctionInfo Zero;
  17. static FunctionInfo Splat;
  18. static FunctionInfo FromFloat32x4;
  19. static FunctionInfo FromFloat32x4Bits;
  20. static FunctionInfo FromInt32x4;
  21. static FunctionInfo FromInt32x4Bits;
  22. // UnaryOps
  23. static FunctionInfo Not;
  24. static FunctionInfo Abs;
  25. static FunctionInfo Neg;
  26. static FunctionInfo Sqrt;
  27. static FunctionInfo Reciprocal;
  28. static FunctionInfo ReciprocalSqrt;
  29. // BinaryOps
  30. static FunctionInfo Add;
  31. static FunctionInfo Sub;
  32. static FunctionInfo Mul;
  33. static FunctionInfo Div;
  34. static FunctionInfo And;
  35. static FunctionInfo Or;
  36. static FunctionInfo Xor;
  37. static FunctionInfo Min;
  38. static FunctionInfo Max;
  39. static FunctionInfo Scale;
  40. // CompareOps
  41. static FunctionInfo LessThan;
  42. static FunctionInfo LessThanOrEqual;
  43. static FunctionInfo Equal;
  44. static FunctionInfo NotEqual;
  45. static FunctionInfo GreaterThan;
  46. static FunctionInfo GreaterThanOrEqual;
  47. static FunctionInfo Swizzle;
  48. static FunctionInfo Shuffle;
  49. static FunctionInfo Clamp;
  50. static FunctionInfo Select;
  51. static FunctionInfo Load;
  52. static FunctionInfo Load1;
  53. static FunctionInfo Store;
  54. static FunctionInfo Store1;
  55. };
  56. // Entry points to library
  57. // constructor
  58. static Var EntryFloat64x2(RecyclableObject* function, CallInfo callInfo, ...);
  59. static Var EntryCheck(RecyclableObject* function, CallInfo callInfo, ...);
  60. static Var EntryZero(RecyclableObject* function, CallInfo callInfo, ...);
  61. static Var EntrySplat(RecyclableObject* function, CallInfo callInfo, ...);
  62. static Var EntryFromFloat32x4(RecyclableObject* function, CallInfo callInfo, ...);
  63. static Var EntryFromFloat32x4Bits(RecyclableObject* function, CallInfo callInfo, ...);
  64. static Var EntryFromInt32x4(RecyclableObject* function, CallInfo callInfo, ...);
  65. static Var EntryFromInt32x4Bits(RecyclableObject* function, CallInfo callInfo, ...);
  66. // UnaryOps
  67. static Var EntryNot(RecyclableObject* function, CallInfo callInfo, ...);
  68. static Var EntryAbs(RecyclableObject* function, CallInfo callInfo, ...);
  69. static Var EntryNeg(RecyclableObject* function, CallInfo callInfo, ...);
  70. static Var EntrySqrt(RecyclableObject* function, CallInfo callInfo, ...);
  71. static Var EntryReciprocal(RecyclableObject* function, CallInfo callInfo, ...);
  72. static Var EntryReciprocalSqrt(RecyclableObject* function, CallInfo callInfo, ...);
  73. // BinaryOps
  74. static Var EntryAdd(RecyclableObject* function, CallInfo callInfo, ...);
  75. static Var EntrySub(RecyclableObject* function, CallInfo callInfo, ...);
  76. static Var EntryMul(RecyclableObject* function, CallInfo callInfo, ...);
  77. static Var EntryDiv(RecyclableObject* function, CallInfo callInfo, ...);
  78. static Var EntryAnd(RecyclableObject* function, CallInfo callInfo, ...);
  79. static Var EntryOr(RecyclableObject* function, CallInfo callInfo, ...);
  80. static Var EntryXor(RecyclableObject* function, CallInfo callInfo, ...);
  81. static Var EntryMin(RecyclableObject* function, CallInfo callInfo, ...);
  82. static Var EntryMax(RecyclableObject* function, CallInfo callInfo, ...);
  83. static Var EntryScale(RecyclableObject* function, CallInfo callInfo, ...);
  84. // CompareOps
  85. static Var EntryLessThan(RecyclableObject* function, CallInfo callInfo, ...);
  86. static Var EntryLessThanOrEqual(RecyclableObject* function, CallInfo callInfo, ...);
  87. static Var EntryEqual(RecyclableObject* function, CallInfo callInfo, ...);
  88. static Var EntryNotEqual(RecyclableObject* function, CallInfo callInfo, ...);
  89. static Var EntryGreaterThan(RecyclableObject* function, CallInfo callInfo, ...);
  90. static Var EntryGreaterThanOrEqual(RecyclableObject* function, CallInfo callInfo, ...);
  91. static Var EntrySwizzle(RecyclableObject* function, CallInfo callInfo, ...);
  92. static Var EntryShuffle(RecyclableObject* function, CallInfo callInfo, ...);
  93. static Var EntryClamp(RecyclableObject* function, CallInfo callInfo, ...);
  94. static Var EntrySelect(RecyclableObject* function, CallInfo callInfo, ...);
  95. static Var EntryLoad(RecyclableObject* function, CallInfo callInfo, ...);
  96. static Var EntryLoad1(RecyclableObject* function, CallInfo callInfo, ...); // load X
  97. static Var EntryStore(RecyclableObject* function, CallInfo callInfo, ...);
  98. static Var EntryStore1(RecyclableObject* function, CallInfo callInfo, ...); // store X
  99. // End entry points
  100. private:
  101. static Var InnerLoad(RecyclableObject* function, CallInfo callInfo, int laneCount);
  102. static void InnerStore(RecyclableObject* function, CallInfo callInfo, int laneCount);
  103. };
  104. } // namespace Js
  105. #endif