SimdInt32x4Lib.h 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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. class SIMDInt32x4Lib
  8. {
  9. public:
  10. class EntryInfo
  11. {
  12. public:
  13. static FunctionInfo Int32x4;
  14. static FunctionInfo Check;
  15. static FunctionInfo Zero;
  16. static FunctionInfo Splat;
  17. static FunctionInfo Bool;
  18. // Conversions
  19. static FunctionInfo FromBool;
  20. static FunctionInfo FromFloat64x2;
  21. static FunctionInfo FromFloat64x2Bits;
  22. static FunctionInfo FromFloat32x4;
  23. static FunctionInfo FromFloat32x4Bits;
  24. static FunctionInfo FromUint32x4Bits;
  25. static FunctionInfo FromUint8x16Bits;
  26. static FunctionInfo FromUint16x8Bits;
  27. static FunctionInfo FromInt8x16Bits;
  28. static FunctionInfo FromInt16x8Bits;
  29. // UnaryOps
  30. static FunctionInfo Abs;
  31. static FunctionInfo Neg;
  32. static FunctionInfo Not;
  33. // BinaryOps
  34. static FunctionInfo Add;
  35. static FunctionInfo Sub;
  36. static FunctionInfo Mul;
  37. static FunctionInfo And;
  38. static FunctionInfo Or;
  39. static FunctionInfo Xor;
  40. static FunctionInfo Min;
  41. static FunctionInfo Max;
  42. // CompareOps
  43. static FunctionInfo LessThan;
  44. static FunctionInfo LessThanOrEqual;
  45. static FunctionInfo Equal;
  46. static FunctionInfo NotEqual;
  47. static FunctionInfo GreaterThan;
  48. static FunctionInfo GreaterThanOrEqual;
  49. // WithFlagX/Y/Z/W
  50. static FunctionInfo WithFlagX;
  51. static FunctionInfo WithFlagY;
  52. static FunctionInfo WithFlagZ;
  53. static FunctionInfo WithFlagW;
  54. //Lane access
  55. static FunctionInfo ExtractLane;
  56. static FunctionInfo ReplaceLane;
  57. // ShiftOps
  58. static FunctionInfo ShiftLeftByScalar;
  59. static FunctionInfo ShiftRightByScalar;
  60. // Others
  61. static FunctionInfo Swizzle;
  62. static FunctionInfo Shuffle;
  63. static FunctionInfo Select;
  64. static FunctionInfo Load;
  65. static FunctionInfo Load1;
  66. static FunctionInfo Load2;
  67. static FunctionInfo Load3;
  68. static FunctionInfo Store;
  69. static FunctionInfo Store1;
  70. static FunctionInfo Store2;
  71. static FunctionInfo Store3;
  72. };
  73. // Entry points to library
  74. // constructor
  75. static Var EntryInt32x4(RecyclableObject* function, CallInfo callInfo, ...);
  76. // type-check
  77. static Var EntryCheck(RecyclableObject* function, CallInfo callInfo, ...);
  78. static Var EntrySplat(RecyclableObject* function, CallInfo callInfo, ...);
  79. static Var EntryBool(RecyclableObject* function, CallInfo callInfo, ...);
  80. static Var EntryFromFloat64x2(RecyclableObject* function, CallInfo callInfo, ...);
  81. static Var EntryFromFloat64x2Bits(RecyclableObject* function, CallInfo callInfo, ...);
  82. static Var EntryFromFloat32x4(RecyclableObject* function, CallInfo callInfo, ...);
  83. static Var EntryFromFloat32x4Bits(RecyclableObject* function, CallInfo callInfo, ...);
  84. static Var EntryFromUint32x4Bits(RecyclableObject* function, CallInfo callInfo, ...);
  85. static Var EntryFromUint8x16Bits(RecyclableObject* function, CallInfo callInfo, ...);
  86. static Var EntryFromUint16x8Bits(RecyclableObject* function, CallInfo callInfo, ...);
  87. static Var EntryFromInt8x16Bits(RecyclableObject* function, CallInfo callInfo, ...);
  88. static Var EntryFromInt16x8Bits(RecyclableObject* function, CallInfo callInfo, ...);
  89. // UnaryOps
  90. static Var EntryAbs(RecyclableObject* function, CallInfo callInfo, ...);
  91. static Var EntryNeg(RecyclableObject* function, CallInfo callInfo, ...);
  92. static Var EntryNot(RecyclableObject* function, CallInfo callInfo, ...);
  93. // BinaryOps
  94. static Var EntryAdd(RecyclableObject* function, CallInfo callInfo, ...);
  95. static Var EntrySub(RecyclableObject* function, CallInfo callInfo, ...);
  96. static Var EntryMul(RecyclableObject* function, CallInfo callInfo, ...);
  97. static Var EntryAnd(RecyclableObject* function, CallInfo callInfo, ...);
  98. static Var EntryOr(RecyclableObject* function, CallInfo callInfo, ...);
  99. static Var EntryXor(RecyclableObject* function, CallInfo callInfo, ...);
  100. static Var EntryMin(RecyclableObject* function, CallInfo callInfo, ...);
  101. static Var EntryMax(RecyclableObject* function, CallInfo callInfo, ...);
  102. // CompareOps
  103. static Var EntryLessThan(RecyclableObject* function, CallInfo callInfo, ...);
  104. static Var EntryLessThanOrEqual(RecyclableObject* function, CallInfo callInfo, ...);
  105. static Var EntryEqual(RecyclableObject* function, CallInfo callInfo, ...);
  106. static Var EntryNotEqual(RecyclableObject* function, CallInfo callInfo, ...);
  107. static Var EntryGreaterThan(RecyclableObject* function, CallInfo callInfo, ...);
  108. static Var EntryGreaterThanOrEqual(RecyclableObject* function, CallInfo callInfo, ...);
  109. // WithFlagX/Y/Z/W
  110. static Var EntryWithFlagX(RecyclableObject* function, CallInfo callInfo, ...);
  111. static Var EntryWithFlagY(RecyclableObject* function, CallInfo callInfo, ...);
  112. static Var EntryWithFlagZ(RecyclableObject* function, CallInfo callInfo, ...);
  113. static Var EntryWithFlagW(RecyclableObject* function, CallInfo callInfo, ...);
  114. // Lane Access
  115. static Var EntryExtractLane(RecyclableObject* function, CallInfo callInfo, ...);
  116. static Var EntryReplaceLane(RecyclableObject* function, CallInfo callInfo, ...);
  117. // ShiftOps
  118. static Var EntryShiftLeftByScalar(RecyclableObject* function, CallInfo callInfo, ...);
  119. static Var EntryShiftRightByScalar(RecyclableObject* function, CallInfo callInfo, ...);
  120. // Others
  121. static Var EntrySwizzle(RecyclableObject* function, CallInfo callInfo, ...);
  122. static Var EntryShuffle(RecyclableObject* function, CallInfo callInfo, ...);
  123. static Var EntrySelect(RecyclableObject* function, CallInfo callInfo, ...);
  124. static Var EntryLoad(RecyclableObject* function, CallInfo callInfo, ...);
  125. static Var EntryLoad1(RecyclableObject* function, CallInfo callInfo, ...); // load X
  126. static Var EntryLoad2(RecyclableObject* function, CallInfo callInfo, ...); // load XY
  127. static Var EntryLoad3(RecyclableObject* function, CallInfo callInfo, ...); // load XYZ
  128. static Var EntryStore(RecyclableObject* function, CallInfo callInfo, ...);
  129. static Var EntryStore1(RecyclableObject* function, CallInfo callInfo, ...); // store X
  130. static Var EntryStore2(RecyclableObject* function, CallInfo callInfo, ...); // store XY
  131. static Var EntryStore3(RecyclableObject* function, CallInfo callInfo, ...); // store XYZ
  132. // End entry points
  133. };
  134. } // namespace Js